View Javadoc
1   package org.apache.turbine.services;
2   
3   
4   /*
5    * Licensed to the Apache Software Foundation (ASF) under one
6    * or more contributor license agreements.  See the NOTICE file
7    * distributed with this work for additional information
8    * regarding copyright ownership.  The ASF licenses this file
9    * to you under the Apache License, Version 2.0 (the
10   * "License"); you may not use this file except in compliance
11   * with the License.  You may obtain a copy of the License at
12   *
13   *   http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing,
16   * software distributed under the License is distributed on an
17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18   * KIND, either express or implied.  See the License for the
19   * specific language governing permissions and limitations
20   * under the License.
21   */
22  
23  
24  import java.rmi.RemoteException;
25  import java.rmi.server.UnicastRemoteObject;
26  import java.util.Properties;
27  
28  import org.apache.commons.configuration2.Configuration;
29  import org.apache.commons.configuration2.ConfigurationConverter;
30  
31  /**
32   * A base implementation of an {@link java.rmi.server.UnicastRemoteObject}
33   * as a Turbine {@link org.apache.turbine.services.Service}.
34   *
35   * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
36   */
37  public class BaseUnicastRemoteService extends UnicastRemoteObject
38          implements Service
39  {
40      /**
41       * Serial version.
42       */
43      private static final long serialVersionUID = -7775459623190960297L;
44  
45      protected Configuration configuration;
46      private boolean isInitialized;
47      private InitableBroker initableBroker;
48      private String name;
49      private ServiceBroker serviceBroker;
50  
51      /**
52       * Default constructor
53       * @throws RemoteException if the remote object cannot be created
54       */
55      public BaseUnicastRemoteService()
56              throws RemoteException
57      {
58          isInitialized = false;
59          initableBroker = null;
60          name = null;
61          serviceBroker = null;
62      }
63  
64      /**
65       * Returns the configuration of this service.
66       *
67       * @return The configuration of this service.
68       */
69      @Override
70      public Configuration getConfiguration()
71      {
72          if (name == null)
73          {
74              return null;
75          }
76          else
77          {
78              if (configuration == null)
79              {
80                  configuration = getServiceBroker().getConfiguration(name);
81              }
82              return configuration;
83          }
84      }
85  
86      @Override
87      public void setInitableBroker(InitableBroker broker)
88      {
89          this.initableBroker = broker;
90      }
91  
92      /**
93       * Get the {@link InitableBroker} instance
94       * @return the broker instance
95       */
96      public InitableBroker getInitableBroker()
97      {
98          return initableBroker;
99      }
100 
101     @Override
102     public void init(Object data)
103             throws InitializationException
104     {
105         init();
106     }
107 
108     @Override
109     public void init() throws InitializationException
110     {
111         setInit(true);
112     }
113 
114     protected void setInit(boolean value)
115     {
116         isInitialized = value;
117     }
118 
119     @Override
120     public boolean getInit()
121     {
122         return isInitialized;
123     }
124 
125     /**
126      * Shuts down this service.
127      */
128     @Override
129     public void shutdown()
130     {
131         setInit(false);
132     }
133 
134     @Override
135     public Properties getProperties()
136     {
137         return ConfigurationConverter.getProperties(getConfiguration());
138     }
139 
140     @Override
141     public void setName(String name)
142     {
143         this.name = name;
144     }
145 
146     @Override
147     public String getName()
148     {
149         return name;
150     }
151 
152     /**
153      * Get the {@link ServiceBroker} instance
154      * @return the broker instance
155      */
156     public ServiceBroker getServiceBroker()
157     {
158         return serviceBroker;
159     }
160 
161     @Override
162     public void setServiceBroker(ServiceBroker broker)
163     {
164         this.serviceBroker = broker;
165     }
166 }