    001package 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
    024import java.rmi.RemoteException;
    025import java.rmi.server.UnicastRemoteObject;
    026import java.util.Properties;
    027
    028import org.apache.commons.configuration.Configuration;
    029import org.apache.commons.configuration.ConfigurationConverter;
    030
    031/**
    032 * A base implementation of an {@link java.rmi.server.UnicastRemoteObject}
    033 * as a Turbine {@link org.apache.turbine.services.Service}.
    034 *
    035 * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    036 */
    037public class BaseUnicastRemoteService extends UnicastRemoteObject
    038        implements Service
    039{
    040    /**
    041     * Serial version.
    042     */
    043    private static final long serialVersionUID = -7775459623190960297L;
    044
    045    protected Configuration configuration;
    046    private boolean isInitialized;
    047    private InitableBroker initableBroker;
    048    private String name;
    049    private ServiceBroker serviceBroker;
    050
    051    /**
    052     * Default constructor
    053     * @throws RemoteException if the remote object cannot be created
    054     */
    055    public BaseUnicastRemoteService()
    056            throws RemoteException
    057    {
    058        isInitialized = false;
    059        initableBroker = null;
    060        name = null;
    061        serviceBroker = null;
    062    }
    063
    064    /**
    065     * Returns the configuration of this service.
    066     *
    067     * @return The configuration of this service.
    068     */
    069    @Override
    070    public Configuration getConfiguration()
    071    {
    072        if (name == null)
    073        {
    074            return null;
    075        }
    076        else
    077        {
    078            if (configuration == null)
    079            {
    080                configuration = getServiceBroker().getConfiguration(name);
    081            }
    082            return configuration;
    083        }
    084    }
    085
    086    @Override
    087    public void setInitableBroker(InitableBroker broker)
    088    {
    089        this.initableBroker = broker;
    090    }
    091
    092    /**
    093     * Get the {@link InitableBroker} instance
    094     * @return the broker instance
    095     */
    096    public InitableBroker getInitableBroker()
    097    {
    098        return initableBroker;
    099    }
    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}