Project

General

Profile

1
<!--
2
  * metacat-architecture.html
3
  *
4
  *      Authors: Michael Daigle
5
  *    Copyright: 2009 Regents of the University of California and the
6
  *               National Center for Ecological Analysis and Synthesis
7
  *  For Details: http://www.nceas.ucsb.edu/
8
  *      Created: 2009 January 19
9
  *      Version: 
10
  *    File Info: '$ '
11
  * 
12
  * 
13
-->
14
<html>
15
<head>
16
<title>Metacat Service Based Architecture</title>
17
<!-- unfortunately, we have to look for the common css file in the 
18
     user docs directory.  This is because the user docs deploy to 
19
     the top level of the metacat docs on the knb web server -->
20
<link rel="stylesheet" type="text/css" href="../user/common.css">
21
<link rel="stylesheet" type="text/css" href="./default.css">
22
</head> 
23

    
24
<body>
25
  <table class="tabledefault" width="100%">
26
    <tr>
27
      <td rowspan="2"><img src="./images/KNBLogo.gif"></td>
28
      <td colspan="7"><div class="title">KNB Software Development Guide: Metacat Service Based Architecture</div></td>
29
    </tr>
30
    <tr>
31
      <td><a href="/" class="toollink"> KNB Home </a></td>
32
      <td><a href="/data.html" class="toollink"> Data </a></td>
33
      <td><a href="/people.html" class="toollink"> People </a></td>
34
      <td><a href="/informatics" class="toollink"> Informatics </a></td>
35
      <td><a href="/biodiversity" class="toollink"> Biocomplexity </a></td>
36
      <td><a href="/education" class="toollink"> Education </a></td>
37
      <td><a href="/software" class="toollink"> Software </a></td>
38
    </tr>
39
  </table>
40
  <br>
41

    
42
  <table width="100%">
43
    <tr>
44
      <td class="tablehead" colspan="2"><p class="label">Metacat Service Based Architecture</p></td>
45
      <td class="tablehead" colspan="2" align="right">
46
        <a href="./query-caching.html">Back</a> | <a href="./index.html">Home</a> | 
47
        <a href="./utilities-classes.html">Next</a>
48
      </td>
49
    </tr>
50
  </table>
51
  
52
  <div class="header1">Table of Contents</div>
53
  <div class="toc">
54
    <div class="toc1"><a href="#Overview">Overview</a></div>
55
    <div class="toc1"><a href="#BaseService">Extending BaseService Class</a></div>
56
    <div class="toc1"><a href="#ServiceService">Controling Services With ServiceService Class</a></div>
57
  </div>  
58
  
59
  <a name="Overview"></a><div class="header1">Overview</div>   
60
  <p>There is a goal to migrate Metacat to a service based architecture.  This
61
  provides several advantages: </p>
62
  <ul>
63
    <li>Cached values can be refreshed via the configuration utility without
64
    requiring a restart of Metacat.</li>
65
    <li>Services can be gracefully shut down when Metacat is stopped.  For
66
    instance, the database service can make sure all db requests have completed
67
    before continuing with shutdown.</li>
68
    <li>Services can have a common interface to expose MBeans for JMX monitoring
69
    (see the <a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/">Java Management Extensions</a> page).</li>
70
  </ul>
71
  
72
  <p>From a 
73
  
74
  <p>There are a few basic questions that can be asked when you are creating a 
75
  class to decide if it should be a service.</p>
76
  <ul>
77
    <li>Does this class perform some action repeatedly throughout the lifetime of 
78
    the Metacat application?</li>
79
    <li>Does it make sense for this class to cache certain information?  This is 
80
    typically information that is accessed often and seldom changes.  For example,
81
    system properties rarely change and are constantly being accessed.  (Thus the 
82
    PropertyService class.)</li>
83
    <li>Would it make sense for the information in the class to be refreshable?  Note 
84
    that this is not a strict requirement, since, as we will discuss, a class can
85
    declare itself to be non-refreshable.  A good example of a non-refreshable
86
    class might be a database service.  If core database information changes,
87
    that usually requires a system restart, and not a service refresh.</li>
88
  </ul>  
89
    
90
  <p>Any of these could signify the need for a service.  Note that another option
91
  is to create a utility class.  Utility classes are singletons that have static 
92
  methods and less state requirements.  See the 
93
  <a href="./utilities-classes.html">Utilities Classes page</a> for more information.</p>
94
    
95
  <a name="BaseService"></a><div class="header1">Extending BaseService Class</div>   
96
  <p> All Services extend the BaseService class except the ServiceService class (discussed
97
  next). </p>
98
  
99
  <p>Currently, BaseService defines three methods:</p>
100
  <ul>
101
    <li> refreshable() - a package level abstract method that reports whether the class can be
102
    refreshed.  This has package level access because we only want ServiceService to be 
103
    able to access this information.  You will need to decide at implementation time
104
    whether it makes sense to refresh your service and return the appropriate boolean from
105
    this method.</li>
106
    <li> doRefresh() - a protected abstract method that performs the service refresh.  It is 
107
    protected because it should only be called by the refresh() method (see next).  Typically,
108
    an implementation of the doRefresh() method updates any cached values in the service and 
109
    performs any appropriate state-specific service updates.</li>
110
    <li> refresh() - a package level method that calls refreshable() and doRefresh().  It has
111
    package level access because we only want the ServiceService to be able to refresh the 
112
    service.</li>
113
    <li>stop() - Gracefully shut down the service, releasing any resources.</li>
114
  </ul>
115
    
116
  <a name="ServiceService"></a><div class="header1">Controling Services With ServiceService Class</div>   
117
  <p> The ServiceService class is a exception to the BaseService extension rule.  This service
118
  controls all other services.  It maintains a registry of available services.  </p>
119
  
120
  <p>Some of the methods available via ServiceService are: </p>
121
  <ul>
122
    <li>registerService() - register a service by sending the service name and an instance of 
123
    the service. </li>
124
    <li>refreshService() - refresh a service by name.</li>
125
  </ul>  
126
  
127
  <br>
128
  <a href="./query-caching.html">Back</a> | <a href="./index.html">Home</a> | 
129
  <a href="./utilities-classes.html">Next</a>
130
  </ul>
131

    
132
</body>
133
</html>
(30-30/34)