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

com.addc.jndi.ecn.ECNStateFactory Maven / Gradle / Ivy

package com.addc.jndi.ecn;

import java.io.Serializable;
import java.rmi.Remote;
import java.util.Hashtable;

import javax.naming.ConfigurationException;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.spi.StateFactory;

import org.omg.CORBA.ORB;

import com.addc.jndi.CorbaUtils;
import com.addc.jndi.JndiKeys;
import com.addc.naming.seshat.ObjectBinding;
import com.addc.naming.seshat.ObjectBindingFactory;
import com.addc.naming.seshat.ObjectBindingFactoryHelper;

/**
 * The ECNStateFactory class supplies a state factory that converts RMI remote
 * references to CORBA Object references and allows binding of any serializable
 * java objects.
 * 
 */
public class ECNStateFactory implements StateFactory {

    /**
     * Create a new ECNStateFactory
     */
    public ECNStateFactory() {
    }

    @Override
    @SuppressWarnings("PMD.PreserveStackTrace")
    public Object getStateToBind(Object obj, Name name, Context context, Hashtable hashtable)
            throws NamingException {
        if (obj instanceof ECNContext) {
            return ((ECNContext) obj).getNamingContext();
        }
        if (obj instanceof org.omg.CORBA.Object) {
            return obj;
        }
        if (obj instanceof Remote) {
            try {
                ORB orb= (ORB) hashtable.get(JndiKeys.KEY_ORB);
                return CorbaUtils.getInstance().remoteToCorba((Remote) obj, orb);
            } catch (ClassNotFoundException e) {
                throw new ConfigurationException("javax.rmi packages not available");
            }
        }
        if (obj instanceof Serializable) {
            try {
                ObjectBindingFactory bindingFactory= ObjectBindingFactoryHelper
                        .narrow((org.omg.CORBA.Object) context.lookup("ObjectBindingFactory"));
                ObjectBinding binding= bindingFactory.createObjectBinding();
                binding.data(CorbaUtils.getInstance().serializeObject(obj));
                return binding;
            } catch (Exception e) {
                NamingException ne= new NamingException("Failed to get state for Serializable Java Object.");
                ne.setRootCause(e);
                throw ne;
            }
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy