
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