001    package org.apache.turbine.services;
002    
003    
004    /*
005     * Licensed to the Apache Software Foundation (ASF) under one
006     * or more contributor license agreements.  See the NOTICE file
007     * distributed with this work for additional information
008     * regarding copyright ownership.  The ASF licenses this file
009     * to you under the Apache License, Version 2.0 (the
010     * "License"); you may not use this file except in compliance
011     * with the License.  You may obtain a copy of the License at
012     *
013     *   http://www.apache.org/licenses/LICENSE-2.0
014     *
015     * Unless required by applicable law or agreed to in writing,
016     * software distributed under the License is distributed on an
017     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018     * KIND, either express or implied.  See the License for the
019     * specific language governing permissions and limitations
020     * under the License.
021     */
022    
023    
024    import java.rmi.RemoteException;
025    import java.rmi.server.UnicastRemoteObject;
026    import java.util.Properties;
027    import javax.servlet.ServletConfig;
028    
029    import org.apache.commons.configuration.Configuration;
030    import org.apache.commons.configuration.ConfigurationConverter;
031    
032    /**
033     * A base implementation of an {@link java.rmi.server.UnicastRemoteObject}
034     * as a Turbine {@link org.apache.turbine.services.Service}.
035     *
036     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
037     */
038    public class BaseUnicastRemoteService extends UnicastRemoteObject
039            implements Service
040    {
041        /**
042         * Serial version.
043         */
044        private static final long serialVersionUID = -7775459623190960297L;
045        
046        protected Configuration configuration;
047        private boolean isInitialized;
048        private InitableBroker initableBroker;
049        private String name;
050        private ServiceBroker serviceBroker;
051    
052        public BaseUnicastRemoteService()
053                throws RemoteException
054        {
055            isInitialized = false;
056            initableBroker = null;
057            name = null;
058            serviceBroker = null;
059        }
060    
061        /**
062         * Returns the configuration of this service.
063         *
064         * @return The configuration of this service.
065         */
066        public Configuration getConfiguration()
067        {
068            if (name == null)
069            {
070                return null;
071            }
072            else
073            {
074                if (configuration == null)
075                {
076                    configuration = getServiceBroker().getConfiguration(name);
077                }
078                return configuration;
079            }
080        }
081    
082        public void init(ServletConfig config)
083                throws InitializationException
084        {
085            setInit(true);
086        }
087    
088        public void setInitableBroker(InitableBroker broker)
089        {
090            this.initableBroker = broker;
091        }
092    
093        public InitableBroker getInitableBroker()
094        {
095            return initableBroker;
096        }
097    
098        public void init(Object data)
099                throws InitializationException
100        {
101            init((ServletConfig) data);
102        }
103    
104        public void init() throws InitializationException
105        {
106            setInit(true);
107        }
108    
109        protected void setInit(boolean value)
110        {
111            isInitialized = value;
112        }
113    
114        public boolean getInit()
115        {
116            return isInitialized;
117        }
118    
119        /**
120         * Shuts down this service.
121         */
122        public void shutdown()
123        {
124            setInit(false);
125        }
126    
127        public Properties getProperties()
128        {
129            return ConfigurationConverter.getProperties(getConfiguration());
130        }
131    
132        public void setName(String name)
133        {
134            this.name = name;
135        }
136    
137        public String getName()
138        {
139            return name;
140        }
141    
142        public ServiceBroker getServiceBroker()
143        {
144            return serviceBroker;
145        }
146    
147        public void setServiceBroker(ServiceBroker broker)
148        {
149            this.serviceBroker = broker;
150        }
151    }