All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.arjuna.orbportability.common.OrbPortabilityEnvironmentBean Maven / Gradle / Ivy

There is a newer version: 4.17.37.Final
Show newest version
/*
 * JBoss, Home of Professional Open Source
 * Copyright 2009, Red Hat Middleware LLC, and individual contributors
 * as indicated by the @author tags.
 * See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
 * of the GNU Lesser General Public License, v. 2.1.
 * This program is distributed in the hope that it will be useful, but WITHOUT A
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
 * You should have received a copy of the GNU Lesser General Public License,
 * v.2.1 along with this distribution; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA  02110-1301, USA.
 *
 * (C) 2009,
 * @author JBoss, a division of Red Hat.
 */
package com.arjuna.orbportability.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.arjuna.ats.internal.arjuna.common.ClassloadingUtility;
import com.arjuna.common.internal.util.propertyservice.ConcatenationPrefix;
import com.arjuna.common.internal.util.propertyservice.PropertyPrefix;
import com.arjuna.orbportability.ORBData;
import com.arjuna.orbportability.event.EventHandler;
import com.arjuna.orbportability.oa.core.POAImple;
import com.arjuna.orbportability.orb.core.ORBImple;

/**
 * A JavaBean containing assorted configuration properties for the Orb Portability layer.
 *
 * @author Jonathan Halliday ([email protected])
 */
@PropertyPrefix(prefix = "com.arjuna.orbportability.")
public class OrbPortabilityEnvironmentBean implements OrbPortabilityEnvironmentBeanMBean
{
    private volatile String initialReferencesRoot = System.getProperty("user.dir");
    private volatile String initialReferencesFile = "CosServices.cfg";
    private volatile String fileDir = null;
    private volatile String resolveService = "CONFIGURATION_FILE";

    @ConcatenationPrefix(prefix = "com.arjuna.orbportability.eventHandler")
    private volatile List eventHandlerClassNames = new ArrayList();
    private volatile List eventHandlers = null;

    // alternative: com.arjuna.orbportability.internal.orbspecific.javaidl.orb.implementations.javaidl_1_4
    private volatile String orbImpleClassName = "com.arjuna.orbportability.internal.orbspecific.jacorb.orb.implementations.jacorb_2_0";
    private volatile Class orbImpleClass = null;

    // alternative: com.arjuna.orbportability.internal.orbspecific.javaidl.oa.implementations.javaidl_1_4
    private volatile String poaImpleClassName = "com.arjuna.orbportability.internal.orbspecific.jacorb.oa.implementations.jacorb_2_0";
    private volatile Class poaImpleClass = null;

    // alternative: com.arjuna.orbportability.internal.orbspecific.versions.javaidl_1_4
    private volatile String orbDataClassName = "com.arjuna.orbportability.internal.orbspecific.versions.jacorb_2_0";
    private volatile ORBData orbData = null;

    private volatile String bindMechanism = "CONFIGURATION_FILE";

    private volatile Map orbInitializationProperties = new HashMap();


    /**
     * Returns the name of the directory in which the initial reference file is stored.
     *
     * Default: value of System.getProperty("user.dir")
     * Equivalent deprecated property: com.arjuna.orbportability.initialReferencesRoot
     *
     * @return the path to the directory in which initial references are stored.
     */
    public String getInitialReferencesRoot()
    {
        return initialReferencesRoot;
    }

    /**
     * Sets the name of the directory in which the initial reference file is stored.
     *
     * @param initialReferencesRoot the path to the directory.
     */
    public void setInitialReferencesRoot(String initialReferencesRoot)
    {
        this.initialReferencesRoot = initialReferencesRoot;
    }

    /**
     * Returns the relative name of the file in which initial references are stored.
     *
     * Default: "CosServices.cfg"
     * Equivalent deprecated property: com.arjuna.orbportability.initialReferencesFile
     *
     * @return the name of the initial references file.
     */
    public String getInitialReferencesFile()
    {
        return initialReferencesFile;
    }

    /**
     * Sets the name of the initial references file.
     *
     * @param initialReferencesFile the file name, without directory path.
     */
    public void setInitialReferencesFile(String initialReferencesFile)
    {
        this.initialReferencesFile = initialReferencesFile;
    }

    /**
     * Returns the name of the directory to store reference files in.
     *
     * Default: null
     * Equivalent deprecated property: com.arjuna.orbportability.fileDir
     *
     * @return the path to the reference file directory.
     */
    public String getFileDir()
    {
        return fileDir;
    }

    /**
     * Sets the name of the direcory to store reference files in.
     *
     * @param fileDir the path to the reference file directory.
     */
    public void setFileDir(String fileDir)
    {
        this.fileDir = fileDir;
    }

    /**
     * Returns the symbolic name of the configuration mechanism for resolving service references.
     *
     * Default: "CONFIGURATION_FILE"
     * Equivalent deprecated property: com.arjuna.orbportability.resolveService
     *
     * @return the name of the configuration mechanism for service references.
     */
    public String getResolveService()
    {
        return resolveService;
    }

    /**
     * Sets the symbolic name of the configuration mechanism for resolving service references.
     *
     * @param resolveService the name of the service resolution configuration mechanism.
     */
    public void setResolveService(String resolveService)
    {
        this.resolveService = resolveService;
    }

    /**
     * Returns the class names for the ORB object connect/disconnect event handlers.
     * The returned list is a copy. May return an empty list, will not return null.
     *
     * Default: empty list.
     * Equivalent deprecated property prefix: com.arjuna.orbportability.eventHandler
     *
     * @return a list of names of classes, being implementations of the EventHandler interface.
     */
    public List getEventHandlerClassNames()
    {
        synchronized(this) {
            return new ArrayList(eventHandlerClassNames);
        }
    }

    /**
     * Sets the class names of the ORB object connect/disconnect event handlers.
     * List elements should be names of classes that implement EventHandler.
     * The provided list will be copied, not retained.
     *
     * @param eventHandlerClassNames a list of EventHandler implementation classnames.
     */
    public void setEventHandlerClassNames(List eventHandlerClassNames)
    {
        synchronized(this)
        {
            if(eventHandlerClassNames == null)
            {
                this.eventHandlers = new ArrayList();
                this.eventHandlerClassNames = new ArrayList();
            }
            else if(!eventHandlerClassNames.equals(this.eventHandlerClassNames))
            {
                this.eventHandlers = null;
                this.eventHandlerClassNames = new ArrayList(eventHandlerClassNames);
            }
        }
    }

    /**
     * Returns the set of EventHandler instances.
     * The returned list is a copy. May return an empty list, will not return null.
     *
     * If there is no pre-instantiated instance set and classloading or instantiation of one or more
     * elements fails, this method will log an appropriate warning and return a non-null set with
     * fewer elements.
     *
     * @return the set of EventHandler instances.
     */
    public List getEventHandlers()
    {
        synchronized(this)
        {
            if(eventHandlers == null) {
                List instances = ClassloadingUtility.loadAndInstantiateClassesWithInit(EventHandler.class, eventHandlerClassNames);
                eventHandlers = instances;
            }
            return new ArrayList(eventHandlers);
        }
    }

    /**
     * Sets the instances of EventHandler.
     * The provided list will be copied, not retained.
     *
     * @param eventHandlers the set of EventHandler instances.
     */
    public void setEventHandlers(List eventHandlers)
    {
        synchronized(this)
        {
            if(eventHandlers == null)
            {
                this.eventHandlers = new ArrayList();
                this.eventHandlerClassNames = new ArrayList();
            }
            else
            {
                this.eventHandlers = new ArrayList(eventHandlers);
                List names = ClassloadingUtility.getNamesForClasses(this.eventHandlers);
                this.eventHandlerClassNames = names;
            }
        }
    }

    /**
     * Returns the class name of the ORBImple implementation.
     *
     * Default: com.arjuna.orbportability.internal.orbspecific.jacorb.orb.implementations.jacorb_2_0
     * Equivalent deprecated property: com.arjuna.orbportability.orbImplementation
     *
     * @return the name of the class implementing ORBImple.
     */
    public String getOrbImpleClassName()
    {
        return orbImpleClassName;
    }

    /**
     * Sets the class name of the ORBImple implementation. The class should have a public default constructor.
     *
     * @param orbImpleClassName the name of the class implementing ORBImple.
     */
    public void setOrbImpleClassName(String orbImpleClassName)
    {
        synchronized(this)
        {
            if(orbImpleClassName == null)
            {
                this.orbImpleClass = null;
            }
            else if(!orbImpleClassName.equals(this.orbImpleClassName))
            {
                this.orbImpleClass = null;
            }
            this.orbImpleClassName = orbImpleClassName;
        }
    }

    /**
     * Returns a class implementing ORBImple.
     *
     * If classloading fails,
     * this method will log an appropriate warning and return null, not throw an exception.
     *
     * @return an ORBImple implementation instance, or null.
     */
    public Class getOrbImpleClass()
    {
        if(orbImpleClass == null && orbImpleClassName != null)
        {
            synchronized(this) {
                if(orbImpleClass == null && orbImpleClassName != null) {
                    Class clazz = ClassloadingUtility.loadClass(ORBImple.class, orbImpleClassName);
                    orbImpleClass = clazz;
                }
            }
        }

        return orbImpleClass;
    }

    /**
     * Sets the ORBImple implementation class. The class should have a public default constructor.
     *
     * @param orbImpleClass a Class that implements ORBImple
     */
    public void setOrbImpleClass(Class orbImpleClass)
    {
        synchronized(this)
        {
            Class oldClass = this.orbImpleClass;
            this.orbImpleClass = orbImpleClass;

            if(orbImpleClass == null)
            {
                this.orbImpleClassName = null;
            }
            else if(orbImpleClass != oldClass)
            {
                String name = orbImpleClass.getName();
                this.orbImpleClassName = name;
            }
        }
    }

    /**
     * Returns the class name of the POAImple implementation.
     *
     * Default: com.arjuna.orbportability.internal.orbspecific.jacorb.oa.implementations.jacorb_2_0
     * Equivalent deprecated property: com.arjuna.orbportability.oaImplementation
     *
     * @return the name of the class implementing POAImple.
     */
    public String getPoaImpleClassName()
    {
        return poaImpleClassName;
    }

    /**
     * Sets the class name of the POAImple implementation. The class should have a public default constructor.
     *
     * @param poaImpleClassName the name of the class implementing POAImple.
     */
    public void setPoaImpleClassName(String poaImpleClassName)
    {
        synchronized(this)
        {
            if(poaImpleClassName == null)
            {
                this.poaImpleClass = null;
            }
            else if(!poaImpleClassName.equals(this.poaImpleClassName))
            {
                this.poaImpleClass = null;
            }
            this.poaImpleClassName = poaImpleClassName;
        }
    }

    /**
     * Returns a class implementing POAImple.
     *
     * If classloading fails,
     * this method will log an appropriate warning and return null, not throw an exception.
     *
     * @return an POAImple implementation instance, or null.
     */
    public Class getPoaImpleClass()
    {
        if(poaImpleClass == null && poaImpleClassName != null)
        {
            synchronized(this) {
                if(poaImpleClass == null && poaImpleClassName != null) {
                    Class clazz = ClassloadingUtility.loadClass(POAImple.class, poaImpleClassName);
                    poaImpleClass = clazz;
                }
            }
        }

        return poaImpleClass;
    }

    /**
     * Sets the POAImple implementation class. The class should have a public default constructor.
     *
     * @param poaImpleClass a Class that implements POAImple
     */
    public void setPoaImpleClass(Class poaImpleClass)
    {
        synchronized(this)
        {
            Class oldClass = this.poaImpleClass;
            this.poaImpleClass = poaImpleClass;

            if(poaImpleClass == null)
            {
                this.poaImpleClassName = null;
            }
            else if(poaImpleClass != oldClass)
            {
                String name = poaImpleClass.getName();
                this.poaImpleClassName = name;
            }
        }
    }

    /**
     * Returns the class name of the ORBData implementation.
     *
     * Default: com.arjuna.orbportability.internal.orbspecific.versions.jacorb_2_0
     *
     * @return the name of the class implementing ORBData.
     */
    public String getOrbDataClassName()
    {
        return orbDataClassName;
    }

    /**
     * Sets the class name of the ORBData implementation. The class should have a public default constructor.
     *
     * @param orbDataClassName the name of the class implementing ORBData.
     */
    public void setOrbDataClassName(String orbDataClassName)
    {
        synchronized(this)
        {
            if(orbDataClassName == null)
            {
                this.orbData = null;
            }
            else if(!orbDataClassName.equals(this.orbDataClassName))
            {
                this.orbData = null;
            }
            this.orbDataClassName = orbDataClassName;
        }
    }

    /**
     * Returns an instance of a class implementing ORBData.
     *
     * If there is no pre-instantiated instance set and classloading or instantiation fails,
     * this method will log an appropriate warning and return null, not throw an exception.
     *
     * @return an ORBData implementation instance, or null.
     */
    public ORBData getOrbData()
    {
        if(orbData == null && orbDataClassName != null)
        {
            synchronized(this) {
                if(orbData == null && orbDataClassName != null) {
                    ORBData instance = ClassloadingUtility.loadAndInstantiateClass(ORBData.class,  orbDataClassName, null);
                    orbData = instance;
                }
            }
        }

        return orbData;
    }

    /**
     * Sets the instance of ORBData
     *
     * @param instance an Object that implements ORBData, or null.
     */
    public void setOrbData(ORBData instance)
    {
        synchronized(this)
        {
            ORBData oldInstance = this.orbData;
            orbData = instance;

            if(instance == null)
            {
                this.orbDataClassName = null;
            }
            else if(instance != oldInstance)
            {
                String name = ClassloadingUtility.getNameForClass(instance);
                this.orbDataClassName = name;
            }
        }
    }

    /**
     * Returns the symbolic name of the configuration mechanism used for service bindings.
     *
     * Default: "CONFIGURATION_FILE"
     * Equivalent deprecated property: com.arjuna.orbportability.bindMechanism
     *
     * @return the name of the service binding mechanism.
     */
    public String getBindMechanism()
    {
        return bindMechanism;
    }

    /**
     * Sets the symbolic name of the configuration mechanism used for service bindings.
     *
     * @param bindMechanism the name of the service binding mechanism.
     */
    public void setBindMechanism(String bindMechanism)
    {
        this.bindMechanism = bindMechanism;
    }

    /**
     * Returns the Map used for the orb initialization parameters. As there are potentially
     * an arbitrary number of ORBs, each with an arbitrary set of initialization classes, it's not
     * well suited to bean based properties :-(
     * The returned object is a clone. May return an empty Map, will not return null.
     *
     * Default: empty Map.
     *
     * @return a Map containing ORB initialization information.
     */
    public Map getOrbInitializationProperties()
    {
        return new HashMap(orbInitializationProperties);
    }

    /**
     * Sets the Map of properties used for ORB initialization.
     * The provided Map will be copied, not retained.
     *
     * @param orbInitializationProperties a Map containing ORB initialization information.
     */
    public void setOrbInitializationProperties(Map orbInitializationProperties)
    {
        if(orbInitializationProperties == null) {
            this.orbInitializationProperties = new HashMap();
        } else {
            this.orbInitializationProperties = new HashMap(orbInitializationProperties);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy