Package pac.kage

Source Code of pac.kage.Test77

package pac.kage;

import java.lang.reflect.Field ;

import java.util.Hashtable;

import javax.naming.*;
import javax.naming.spi.StateFactory;

import java.security.AccessController ;
import java.security.PrivilegedAction ;

import javax.rmi.PortableRemoteObject ;

import com.sun.corba.se.spi.orb.ORB;

import java.rmi.Remote;
import java.rmi.server.ExportException;

// XXX This creates a dependendcy on the implementation
// of the CosNaming service provider.
import com.sun.jndi.cosnaming.CNCtx ;

import com.sun.corba.se.spi.presentation.rmi.StubAdapter ;

public class Test77 implements StateFactory
{
    private static final Field orbField ;

    static {
  orbField = (Field) AccessController.doPrivileged(
      new PrivilegedAction() {
    public Object run() {
        Field fld = null ;
        try {
      Class cls = CNCtx.class ;
      fld = cls.getDeclaredField( "_orb" ) ;
      fld.setAccessible( true ) ;
        } catch (Exception exc) {
      // XXX log exception at FINE
        }
        return fld ;
    }
      }
  ) ;
    }

    public JNDIStateFactoryImpl()
    {
    }

    /**
     * Returns the CORBA object for a Remote object.
     * If input is not a Remote object, or if Remote object uses JRMP, return null.
     * If the RMI-IIOP library is not available, throw ConfigurationException.
     *
     * @param orig The object to turn into a CORBA object. If not Remote,
     *        or if is a JRMP stub or impl, return null.
     * @param name Ignored
     * @param ctx The non-null CNCtx whose ORB to use.
     * @param env Ignored
     * @return The CORBA object for <tt>orig</tt> or null.
     * @exception ConfigurationException If the CORBA object cannot be obtained
     *     due to configuration problems
     * @exception NamingException If some other problem prevented a CORBA
     *    object from being obtained from the Remote object.
     */
    public Object getStateToBind(Object orig, Name name, Context ctx,
  Hashtable<?,?> env) throws NamingException
    {
  if (orig instanceof org.omg.CORBA.Object)
      return orig ;

        if (!(orig instanceof Remote))
      // Not for this StateFactory
      return null ;

  ORB orb = getORB( ctx ) ;
  if (orb == null)
      // Wrong kind of context, so just give up and let another StateFactory
      // try to satisfy getStateToBind.
      return null ;

  Remote stub = null;

  try {
      stub = PortableRemoteObject.toStub( (Remote)orig ) ;
  } catch (Exception exc) {
      // XXX log at FINE level?
      // Wrong sort of object: just return null to allow another StateFactory
      // to handle this.  This can happen easily because this StateFactory
      // is specified for the application, not the service context provider.
      return null ;
  }

  if (StubAdapter.isStub( stub )) {
      try {
    StubAdapter.connect( stub, orb ) ;
      } catch (Exception exc) {
    if (!(exc instanceof java.rmi.RemoteException)) {
        // XXX log at FINE level?
        // Wrong sort of object: just return null to allow another StateFactory
        // to handle this call.
        return null ;
    }

    // ignore RemoteException because stub might have already
    // been connected
      }
  }

  return stub ;
    }

    // This is necessary because the _orb field is package private in
    // com.sun.jndi.cosnaming.CNCtx.  This is not an ideal solution.
    // The best solution for our ORB is to change the CosNaming provider
    // to use the StubAdapter.  But this has problems as well, because
    // other vendors may use the CosNaming provider with a different ORB
    // entirely.
    private ORB getORB( Context ctx )
    {
  ORB orb = null ;

  try {
      orb = (ORB)orbField.get( ctx ) ;
  } catch (Exception exc) {
      // XXX log this exception at FINE level
      // ignore the exception and return null.
      // Note that the exception may be because ctx
      // is not a CosNaming context.
  }

  return orb ;
    }
}
TOP

Related Classes of pac.kage.Test77

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.