POALocalCRDImplpublic 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.OAInvocationInfo | servantEnter(com.sun.corba.se.spi.oa.ObjectAdapter oa)
oa.enter() ;
OAInvocationInfo info = oa.makeInvocationInfo( objectId ) ;
orb.pushInvocationInfo( info ) ;
return info ;
| private void | servantExit(com.sun.corba.se.spi.oa.ObjectAdapter oa)
try {
oa.returnServant();
} finally {
oa.exit() ;
orb.popInvocationInfo() ;
}
| public void | servant_postinvoke(org.omg.CORBA.Object self, org.omg.CORBA.portable.ServantObject servantobj)
ObjectAdapter oa = orb.peekInvocationInfo().oa() ;
servantExit( oa ) ;
| public org.omg.CORBA.portable.ServantObject | servant_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;
|
|