FileDocCategorySizeDatePackage
POALocalCRDImpl.javaAPI DocJava SE 5 API4616Fri Aug 26 14:54:30 BST 2005com.sun.corba.se.impl.protocol

POALocalCRDImpl

public class POALocalCRDImpl extends LocalClientRequestDispatcherBase

Fields Summary
private com.sun.corba.se.impl.logging.ORBUtilSystemException
wrapper
private com.sun.corba.se.impl.logging.POASystemException
poaWrapper
Constructors Summary
public POALocalCRDImpl(com.sun.corba.se.spi.orb.ORB orb, int scid, com.sun.corba.se.spi.ior.IOR ior)

	super( (com.sun.corba.se.spi.orb.ORB)orb, scid, ior );
	wrapper = ORBUtilSystemException.get( orb, 
	    CORBALogDomains.RPC_PROTOCOL ) ;
	poaWrapper = POASystemException.get( orb, 
	    CORBALogDomains.RPC_PROTOCOL ) ;
    
Methods Summary
private com.sun.corba.se.spi.oa.OAInvocationInfoservantEnter(com.sun.corba.se.spi.oa.ObjectAdapter oa)

	oa.enter() ;

	OAInvocationInfo info = oa.makeInvocationInfo( objectId ) ;
	orb.pushInvocationInfo( info ) ;

	return info ;
    
private voidservantExit(com.sun.corba.se.spi.oa.ObjectAdapter oa)

	try {
	    oa.returnServant();
	} finally {
	    oa.exit() ;
	    orb.popInvocationInfo() ; 
	}
    
public voidservant_postinvoke(org.omg.CORBA.Object self, org.omg.CORBA.portable.ServantObject servantobj)

        ObjectAdapter oa = orb.peekInvocationInfo().oa() ; 
	servantExit( oa ) ;	
    
public org.omg.CORBA.portable.ServantObjectservant_preinvoke(org.omg.CORBA.Object self, java.lang.String operation, java.lang.Class expectedType)

	ObjectAdapter oa = oaf.find( oaid ) ;
	OAInvocationInfo info = null ;

	try {
	    info = servantEnter( oa ) ;
	    info.setOperation( operation ) ;
        } catch ( OADestroyed ex ) {
            // Destroyed POAs can be recreated by normal adapter activation.
            // So just reinvoke this method.
            return servant_preinvoke(self, operation, expectedType);
	}

        try {
	    try {
		oa.getInvocationServant( info );
		if (!checkForCompatibleServant( info, expectedType ))
		    return null ;
	    } catch (Throwable thr) {
		// Cleanup after this call, then throw to allow
		// outer try to handle the exception appropriately.
		servantExit( oa ) ;
		throw thr ;
	    }
        } catch ( ForwardException ex ) {
	    /* REVISIT
	    ClientRequestDispatcher csub = (ClientRequestDispatcher)
		StubAdapter.getDelegate( ex.forward_reference ) ;
	    IOR ior = csub.getIOR() ;
	    setLocatedIOR( ior ) ;
	    */
	    RuntimeException runexc = new RuntimeException("deal with this.");
	    runexc.initCause( ex ) ;
	    throw runexc ;
        } catch ( ThreadDeath ex ) {
	    // ThreadDeath on the server side should not cause a client
	    // side thread death in the local case.  We want to preserve
	    // this behavior for location transparency, so that a ThreadDeath
	    // has the same affect in either the local or remote case.
	    // The non-colocated case is handled in iiop.ORB.process, which
	    // throws the same exception.
	    throw wrapper.runtimeexception( ex ) ;
        } catch ( Throwable t ) {
            if (t instanceof SystemException)
		throw (SystemException)t ;

	    throw poaWrapper.localServantLookup( t ) ;
        } 

	if (!checkForCompatibleServant( info, expectedType )) {
	    servantExit( oa ) ;
	    return null ;
	}

        return info;