Methods Summary |
---|
public void | adapterManagerStateChanged(int managerId, short newState)
if (!hasIORInterceptors)
return ;
interceptorInvoker.adapterManagerStateChanged( managerId, newState ) ;
|
public void | adapterStateChanged(org.omg.PortableInterceptor.ObjectReferenceTemplate[] templates, short newState)
if (!hasIORInterceptors)
return ;
interceptorInvoker.adapterStateChanged( templates, newState ) ;
|
public synchronized int | allocateServerRequestId()
return serverRequestIdCounter++;
|
public void | cleanupClientPIRequest()
if( !hasClientInterceptors ) return;
if( !isClientPIEnabledForThisThread() ) return;
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
// If the replyStatus has not yet been set, this is an indication
// that the ORB threw an exception before we had a chance to
// invoke the client interceptor ending points.
//
// _REVISIT_ We cannot handle any exceptions or ForwardRequests
// flagged by the ending points here because there is no way
// to gracefully handle this in any of the calling code.
// This is a rare corner case, so we will ignore this for now.
short replyStatus = info.getReplyStatus();
if( replyStatus == info.UNINITIALIZED ) {
invokeClientPIEndingPoint( ReplyMessage.SYSTEM_EXCEPTION,
wrapper.unknownRequestInvoke(
CompletionStatus.COMPLETED_MAYBE ) ) ;
}
// Decrement entry count, and if it is zero, pop it from the stack.
info.decrementEntryCount();
if( info.getEntryCount() == 0 ) {
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
infoStack.pop();
printPop();
}
|
public void | cleanupServerPIRequest()
if( !hasServerInterceptors ) return;
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalServerRequestInfoStack.get();
infoStack.pop();
printPop();
|
private int | convertPIReplyStatusToReplyMessage(short replyStatus)Utility method to convert a PI reply status short to a ReplyMessage
constant. This is a reverse lookup on the table defined in
REPLY_MESSAGE_TO_PI_REPLY_STATUS. The reverse lookup need not be
performed as quickly since it is only executed in exception
conditions.
int result = 0;
for( int i = 0; i < REPLY_MESSAGE_TO_PI_REPLY_STATUS.length; i++ ) {
if( REPLY_MESSAGE_TO_PI_REPLY_STATUS[i] == replyStatus ) {
result = i;
break;
}
}
return result;
|
private ORBInitInfoImpl | createORBInitInfo()Creates the ORBInitInfo object to be passed to ORB intializers'
pre_init and post_init methods
ORBInitInfoImpl result = null;
// arguments comes from set_parameters. May be null.
// _REVISIT_ The spec does not specify which ID this is to be.
// We currently get this from the corba.ORB, which reads it from
// the ORB_ID_PROPERTY property.
String orbId = orb.getORBData().getORBId() ;
result = new ORBInitInfoImpl( orb, arguments, orbId, codecFactory );
return result;
|
public org.omg.CORBA.Policy | create_policy(int type, org.omg.CORBA.Any val)This is the implementation of standard API defined in org.omg.CORBA.ORB
class. This method finds the Policy Factory for the given Policy Type
and instantiates the Policy object from the Factory. It will throw
PolicyError exception, If the PolicyFactory for the given type is
not registered.
_REVISIT_, Once Policy Framework work is completed, Reorganize
this method to com.sun.corba.se.spi.orb.ORB.
if( val == null ) {
nullParam( );
}
if( policyFactoryTable == null ) {
throw new org.omg.CORBA.PolicyError(
"There is no PolicyFactory Registered for type " + type,
BAD_POLICY.value );
}
PolicyFactory factory = (PolicyFactory)policyFactoryTable.get(
new Integer(type) );
if( factory == null ) {
throw new org.omg.CORBA.PolicyError(
" Could Not Find PolicyFactory for the Type " + type,
BAD_POLICY.value);
}
org.omg.CORBA.Policy policy = factory.create_policy( type, val );
return policy;
|
public void | destroyInterceptors()ptc/00-08-06 p 205: "When an application calls ORB::destroy, the ORB
1) waits for all requests in progress to complete
2) calls the Interceptor::destroy operation for each interceptor
3) completes destruction of the ORB"
This must be called at the end of ORB.destroy. Note that this is not
part of the PIHandler interface, since ORBImpl implements the ORB interface.
interceptorList.destroyAll();
|
public void | disableInterceptorsThisThread()
if( !hasClientInterceptors ) return;
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
infoStack.disableCount++;
|
public void | enableInterceptorsThisThread()
if( !hasClientInterceptors ) return;
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
infoStack.disableCount--;
|
public org.omg.PortableInterceptor.Current | getPICurrent()
return current;
|
public void | initialize()
// If we have any orb initializers, make use of them:
if( orb.getORBData().getORBInitializers() != null ) {
// Create the ORBInitInfo object to pass to ORB intializers:
ORBInitInfoImpl orbInitInfo = createORBInitInfo();
// Make sure get_slot and set_slot are not called from within
// ORB initializers:
current.setORBInitializing( true );
// Call pre_init on all ORB initializers:
preInitORBInitializers( orbInitInfo );
// Call post_init on all ORB initializers:
postInitORBInitializers( orbInitInfo );
// Proprietary: sort interceptors:
interceptorList.sortInterceptors();
// Re-enable get_slot and set_slot to be called from within
// ORB initializers:
current.setORBInitializing( false );
// Ensure nobody makes any more calls on this object.
orbInitInfo.setStage( ORBInitInfoImpl.STAGE_CLOSED );
// Set cached flags indicating whether we have interceptors
// registered of a given type.
hasIORInterceptors = interceptorList.hasInterceptorsOfType(
InterceptorList.INTERCEPTOR_TYPE_IOR );
// XXX This must always be true, so that using the new generic
// RPC framework can pass info between the PI stack and the
// framework invocation stack. Temporary until Harold fixes
// this. Note that this must never be true until after the
// ORBInitializer instances complete executing.
//hasClientInterceptors = interceptorList.hasInterceptorsOfType(
//InterceptorList.INTERCEPTOR_TYPE_CLIENT );
hasClientInterceptors = true;
hasServerInterceptors = interceptorList.hasInterceptorsOfType(
InterceptorList.INTERCEPTOR_TYPE_SERVER );
// Enable interceptor invoker (not necessary if no interceptors
// are registered). This should be the last stage of ORB
// initialization.
interceptorInvoker.setEnabled( true );
}
|
public void | initializeServerPIInfo(com.sun.corba.se.spi.protocol.CorbaMessageMediator request, com.sun.corba.se.spi.oa.ObjectAdapter oa, byte[] objectId, com.sun.corba.se.spi.ior.ObjectKeyTemplate oktemp)
if( !hasServerInterceptors ) return;
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalServerRequestInfoStack.get();
ServerRequestInfoImpl info = new ServerRequestInfoImpl( orb );
infoStack.push( info );
printPush();
// Notify request object that once response is constructed, make
// sure we execute ending points.
request.setExecutePIInResponseConstructor( true );
info.setInfo( request, oa, objectId, oktemp );
|
public void | initiateClientPIRequest(boolean diiRequest)
if( !hasClientInterceptors ) return;
if( !isClientPIEnabledForThisThread() ) return;
// Get the most recent info object from the thread local
// ClientRequestInfoImpl stack:
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
ClientRequestInfoImpl info = null;
if( !infoStack.empty() ) info =
(ClientRequestInfoImpl)infoStack.peek();
if( !diiRequest && (info != null) && info.isDIIInitiate() ) {
// In RequestImpl.doInvocation we already called
// initiateClientPIRequest( true ), so ignore this initiate.
info.setDIIInitiate( false );
}
else {
// If there is no info object or if we are not retrying a request,
// push a new ClientRequestInfoImpl on the stack:
if( (info == null) || !info.getRetryRequest() ) {
info = new ClientRequestInfoImpl( orb );
infoStack.push( info );
printPush();
// Note: the entry count is automatically initialized to 0.
}
// Reset the retry request flag so that recursive calls will
// push a new info object, and bump up entry count so we know
// when to pop this info object:
info.setRetryRequest( false );
info.incrementEntryCount();
// If this is a DII request, make sure we ignore the next initiate.
if( diiRequest ) {
info.setDIIInitiate( true );
}
}
|
public java.lang.Exception | invokeClientPIEndingPoint(int replyStatus, java.lang.Exception exception)
if( !hasClientInterceptors ) return exception;
if( !isClientPIEnabledForThisThread() ) return exception;
// Translate ReplyMessage.replyStatus into PI replyStatus:
// Note: this is also an assertion to make sure a valid replyStatus
// is passed in (IndexOutOfBoundsException will be thrown otherwise)
short piReplyStatus = REPLY_MESSAGE_TO_PI_REPLY_STATUS[replyStatus];
// Invoke the ending interception points and record exception
// and reply status info in the info object:
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
info.setReplyStatus( piReplyStatus );
info.setException( exception );
interceptorInvoker.invokeClientInterceptorEndingPoint( info );
piReplyStatus = info.getReplyStatus();
// Check reply status:
if( (piReplyStatus == LOCATION_FORWARD.value) ||
(piReplyStatus == TRANSPORT_RETRY.value) )
{
// If this is a forward or a retry, reset and reuse
// info object:
info.reset();
info.setRetryRequest( true );
// ... and return a RemarshalException so the orb internals know
exception = new RemarshalException();
}
else if( (piReplyStatus == SYSTEM_EXCEPTION.value) ||
(piReplyStatus == USER_EXCEPTION.value) )
{
exception = info.getException();
}
return exception;
|
public void | invokeClientPIStartingPoint()
if( !hasClientInterceptors ) return;
if( !isClientPIEnabledForThisThread() ) return;
// Invoke the starting interception points and record exception
// and reply status info in the info object:
ClientRequestInfoImpl info = peekClientRequestInfoImplStack();
interceptorInvoker.invokeClientInterceptorStartingPoint( info );
// Check reply status. If we will not have another chance later
// to invoke the client ending points, do it now.
short replyStatus = info.getReplyStatus();
if( (replyStatus == SYSTEM_EXCEPTION.value) ||
(replyStatus == LOCATION_FORWARD.value) )
{
// Note: Transport retry cannot happen here since this happens
// before the request hits the wire.
Exception exception = invokeClientPIEndingPoint(
convertPIReplyStatusToReplyMessage( replyStatus ),
info.getException() );
if( exception == null ) {
// Do not throw anything. Otherwise, it must be a
// SystemException, UserException or RemarshalException.
} if( exception instanceof SystemException ) {
throw (SystemException)exception;
} else if( exception instanceof RemarshalException ) {
throw (RemarshalException)exception;
} else if( (exception instanceof UserException) ||
(exception instanceof ApplicationException) ) {
// It should not be possible for an interceptor to throw
// a UserException. By asserting instead of throwing the
// UserException, we need not declare anything but
// RemarshalException in the throws clause.
throw wrapper.exceptionInvalid() ;
}
}
else if( replyStatus != ClientRequestInfoImpl.UNINITIALIZED ) {
throw wrapper.replyStatusNotInit() ;
}
|
public void | invokeServerPIEndingPoint(com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage replyMessage)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
// REVISIT: This needs to be done "early" for the following workaround.
info.setReplyMessage( replyMessage );
// REVISIT: This was done inside of invokeServerInterceptorEndingPoint
// but needs to be here for now. See comment in that method for why.
info.setCurrentExecutionPoint( info.EXECUTION_POINT_ENDING );
// It is possible we might have entered this method more than
// once (e.g. if an ending point threw a SystemException, then
// a new ServerResponseImpl is created).
if( !info.getAlreadyExecuted() ) {
int replyStatus = replyMessage.getReplyStatus();
// Translate ReplyMessage.replyStatus into PI replyStatus:
// Note: this is also an assertion to make sure a valid
// replyStatus is passed in (IndexOutOfBoundsException will be
// thrown otherwise)
short piReplyStatus =
REPLY_MESSAGE_TO_PI_REPLY_STATUS[replyStatus];
// Make forwarded IOR available to interceptors, if applicable:
if( ( piReplyStatus == LOCATION_FORWARD.value ) ||
( piReplyStatus == TRANSPORT_RETRY.value ) )
{
info.setForwardRequest( replyMessage.getIOR() );
}
// REVISIT: Do early above for now.
// Make reply message available to interceptors:
//info.setReplyMessage( replyMessage );
// Remember exception so we can tell if an interceptor changed it.
Exception prevException = info.getException();
// _REVISIT_ We do not have access to the User Exception at
// this point, so treat it as an UNKNOWN for now.
// Note that if this is a DSI call, we do have the user exception.
if( !info.isDynamic() &&
(piReplyStatus == USER_EXCEPTION.value) )
{
info.setException( omgWrapper.unknownUserException(
CompletionStatus.COMPLETED_MAYBE ) ) ;
}
// Invoke the ending interception points:
info.setReplyStatus( piReplyStatus );
interceptorInvoker.invokeServerInterceptorEndingPoint( info );
short newPIReplyStatus = info.getReplyStatus();
Exception newException = info.getException();
// Check reply status. If an interceptor threw a SystemException
// and it is different than the one that we came in with,
// rethrow it so the proper response can be constructed:
if( ( newPIReplyStatus == SYSTEM_EXCEPTION.value ) &&
( newException != prevException ) )
{
throw (SystemException)newException;
}
// If we are to forward the location:
if( newPIReplyStatus == LOCATION_FORWARD.value ) {
if( piReplyStatus != LOCATION_FORWARD.value ) {
// Treat a ForwardRequest as a ForwardException.
IOR ior = info.getForwardRequestIOR();
throw new ForwardException( orb, ior ) ;
}
else if( info.isForwardRequestRaisedInEnding() ) {
// Treat a ForwardRequest by changing the IOR.
replyMessage.setIOR( info.getForwardRequestIOR() );
}
}
}
|
public void | invokeServerPIIntermediatePoint()
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
interceptorInvoker.invokeServerInterceptorIntermediatePoint( info );
// Clear servant from info object so that the user has control over
// its lifetime:
info.releaseServant();
// Handle SystemException or ForwardRequest:
serverPIHandleExceptions( info );
|
public void | invokeServerPIStartingPoint()
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
interceptorInvoker.invokeServerInterceptorStartingPoint( info );
// Handle SystemException or ForwardRequest:
serverPIHandleExceptions( info );
|
private boolean | isClientPIEnabledForThisThread()Convenience method to determine whether Client PI is enabled
for requests on this thread.
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
return (infoStack.disableCount == 0);
|
private void | nullParam()Called when an invalid null parameter was passed. Throws a
BAD_PARAM with a minor code of 1
throw orbutilWrapper.nullParam() ;
|
public void | objectAdapterCreated(com.sun.corba.se.spi.oa.ObjectAdapter oa)
if (!hasIORInterceptors)
return ;
interceptorInvoker.objectAdapterCreated( oa ) ;
|
private ClientRequestInfoImpl | peekClientRequestInfoImplStack()Convenience method to get the ClientRequestInfoImpl object off the
top of the ThreadLocal stack. Throws an INTERNAL exception if
the Info stack is empty.
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalClientRequestInfoStack.get();
ClientRequestInfoImpl info = null;
if( !infoStack.empty() ) {
info = (ClientRequestInfoImpl)infoStack.peek();
} else {
throw wrapper.clientInfoStackNull() ;
}
return info;
|
private ServerRequestInfoImpl | peekServerRequestInfoImplStack()Convenience method to get the ServerRequestInfoImpl object off the
top of the ThreadLocal stack. Returns null if there are none.
RequestInfoStack infoStack =
(RequestInfoStack)threadLocalServerRequestInfoStack.get();
ServerRequestInfoImpl info = null;
if( !infoStack.empty() ) {
info = (ServerRequestInfoImpl)infoStack.peek();
} else {
throw wrapper.serverInfoStackNull() ;
}
return info;
|
private void | postInitORBInitializers(ORBInitInfoImpl info)Call post_init on all ORB initializers
// Inform ORBInitInfo we are in post_init stage
info.setStage( ORBInitInfoImpl.STAGE_POST_INIT );
// Step through each initializer instantiation and call its post_init.
// Ignore any exceptions.
for( int i = 0; i < orb.getORBData().getORBInitializers().length;
i++ ) {
ORBInitializer init = orb.getORBData().getORBInitializers()[i];
if( init != null ) {
try {
init.post_init( info );
}
catch( Exception e ) {
// As per orbos/99-12-02, section 9.3.1.2, "If there are
// any exceptions, the ORB shall ignore them and proceed."
}
}
}
|
private void | preInitORBInitializers(ORBInitInfoImpl info)Call pre_init on all ORB initializers
// Inform ORBInitInfo we are in pre_init stage
info.setStage( ORBInitInfoImpl.STAGE_PRE_INIT );
// Step through each initializer instantiation and call its
// pre_init. Ignore any exceptions.
for( int i = 0; i < orb.getORBData().getORBInitializers().length;
i++ ) {
ORBInitializer init = orb.getORBData().getORBInitializers()[i];
if( init != null ) {
try {
init.pre_init( info );
}
catch( Exception e ) {
// As per orbos/99-12-02, section 9.3.1.2, "If there are
// any exceptions, the ORB shall ignore them and proceed."
}
}
}
|
private void | printPop()
if (! printPushPopEnabled) return;
pushLevel--;
printSpaces(pushLevel);
System.out.println("POP");
|
private void | printPush()
if (! printPushPopEnabled) return;
printSpaces(pushLevel);
pushLevel++;
System.out.println("PUSH");
|
private void | printSpaces(int n)
for (int i = 0; i < n; i++) {
System.out.print(" ");
}
|
public void | registerPolicyFactory(int type, org.omg.PortableInterceptor.PolicyFactory factory)This method registers the Policy Factory in the policyFactoryTable,
which is a HashMap. This method is made package private, because
it is used internally by the Interceptors.
if( policyFactoryTable == null ) {
policyFactoryTable = new HashMap();
}
Integer key = new Integer( type );
java.lang.Object val = policyFactoryTable.get( key );
if( val == null ) {
policyFactoryTable.put( key, factory );
}
else {
throw omgWrapper.policyFactoryRegFailed( new Integer( type ) ) ;
}
|
public void | register_interceptor(org.omg.PortableInterceptor.Interceptor interceptor, int type)Called by ORBInitInfo when an interceptor needs to be registered.
The type is one of:
- INTERCEPTOR_TYPE_CLIENT - ClientRequestInterceptor
- INTERCEPTOR_TYPE_SERVER - ServerRequestInterceptor
- INTERCEPTOR_TYPE_IOR - IORInterceptor
// We will assume interceptor is not null, since it is called
// internally.
if( (type >= InterceptorList.NUM_INTERCEPTOR_TYPES) || (type < 0) ) {
throw wrapper.typeOutOfRange( new Integer( type ) ) ;
}
String interceptorName = interceptor.name();
if( interceptorName == null ) {
throw wrapper.nameNull() ;
}
// Register with interceptor list:
interceptorList.register_interceptor( interceptor, type );
|
private void | serverPIHandleExceptions(ServerRequestInfoImpl info)Handles exceptions for the starting and intermediate points for
server request interceptors. This is common code that has been
factored out into this utility method.
This method will NOT work for ending points.
int endingPointCall = info.getEndingPointCall();
if(endingPointCall == ServerRequestInfoImpl.CALL_SEND_EXCEPTION) {
// If a system exception was thrown, throw it to caller:
throw (SystemException)info.getException();
}
else if( (endingPointCall == ServerRequestInfoImpl.CALL_SEND_OTHER) &&
(info.getForwardRequestException() != null) )
{
// If an interceptor throws a forward request, convert it
// into a ForwardException for easier handling:
IOR ior = info.getForwardRequestIOR();
throw new ForwardException( orb, ior );
}
|
public void | setClientPIInfo(com.sun.corba.se.spi.protocol.CorbaMessageMediator messageMediator)
if( !hasClientInterceptors ) return;
if( !isClientPIEnabledForThisThread() ) return;
peekClientRequestInfoImplStack().setInfo(messageMediator);
|
public void | setClientPIInfo(com.sun.corba.se.impl.corba.RequestImpl requestImpl)
if( !hasClientInterceptors ) return;
if( !isClientPIEnabledForThisThread() ) return;
peekClientRequestInfoImplStack().setDIIRequest( requestImpl );
|
public void | setServerPIExceptionInfo(org.omg.CORBA.Any exception)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
info.setDSIException( exception );
|
public void | setServerPIInfo(java.lang.Exception exception)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
info.setException( exception );
|
public void | setServerPIInfo(org.omg.CORBA.NVList arguments)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
info.setDSIArguments( arguments );
|
public void | setServerPIInfo(org.omg.CORBA.Any result)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
info.setDSIResult( result );
|
public void | setServerPIInfo(java.lang.Object servant, java.lang.String targetMostDerivedInterface)
if( !hasServerInterceptors ) return;
ServerRequestInfoImpl info = peekServerRequestInfoImplStack();
info.setInfo( servant, targetMostDerivedInterface );
|