Class PIHandlerImpl
java.lang.Object
com.sun.corba.ee.impl.interceptors.PIHandlerImpl
- All Implemented Interfaces:
PIHandler, Closeable, AutoCloseable
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescription(package private) String[](package private) CodecFactoryprivate PICurrentprivate booleanprivate booleanprivate booleanprivate InterceptorInvokerprivate InterceptorList(package private) static final OMGSystemExceptionprivate ORB(package private) static final ORBUtilSystemExceptionprivate Map<Integer, PolicyFactory> private static final short[]private int(package private) static final InterceptorsSystemException -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidadapterManagerStateChanged(int managerId, short newState) Called whenever a state change occurs in an adapter manager.voidadapterStateChanged(ObjectReferenceTemplate[] templates, short newState) Called whenever a state change occurs in an object adapter that was not caused by an adapter manager state change.intvoidInvoked when a request is about to be cleaned up.voidInvoked when a request is about to be cleaned up.private voidprivate voidvoidclose()private intconvertPIReplyStatusToReplyMessage(short replyStatus) Utility method to convert a PI reply status short to a ReplyMessage constant.create_policy(int type, Any val) This is the implementation of standard API defined in org.omg.CORBA.ORB class.private ORBInitInfoImplCreates the ORBInitInfo object to be passed to ORB intializers' pre_init and post_init methodsvoidptc/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.voidCalled for pseudo-ops to temporarily disable portable interceptor hooks for calls on this thread.voidCalled for pseudo-ops to re-enable portable interceptor hooks for calls on this thread.(package private) static StringgetReplyStatus(int piReplyStatus) handleClientPIEndingPoint(int replyStatus, Exception exception, boolean invokeEndingPoint) voidComplete the initialization of the PIHandler.voidinitializeServerPIInfo(MessageMediator request, ObjectAdapter oa, byte[] objectId, ObjectKeyTemplate oktemp) Notifies PI to start a new server request and set initial information for server-side interceptors.voidinitiateClientPIRequest(boolean diiRequest) Invoked when a request is about to be created.invokeClientPIEndingPoint(int replyStatus, Exception exception) Called when the appropriate client ending interception point is to be invoked for all apporpriate client-side request interceptors.voidCalled when the send_request or send_poll portable interception point is to be invoked for all appropriate client-side request interceptors.voidinvokeServerPIEndingPoint(ReplyMessage replyMessage) Called when the appropriate server ending interception point is to be invoked for all appropriate server-side request interceptors.voidCalled when the appropriate server intermediate interception point is to be invoked for all appropriate server-side request interceptors.voidCalled when the appropriate server starting interception point is to be invoked for all appropriate server-side request interceptors.private booleanConvenience method to determine whether Client PI is enabled for requests on this thread.makeCompletedClientRequest(int replyStatus, Exception exception) Called when a retry is needed after initiateClientPIRequest but before invokeClientPIRequest.private voidprivate voidCalled when an invalid null parameter was passed.voidCalled when a new object adapter is created.private ClientRequestInfoImplConvenience method to get the ClientRequestInfoImpl object off the top of the ThreadLocal stack.private ServerRequestInfoImplConvenience method to get the ServerRequestInfoImpl object off the top of the ThreadLocal stack.private voidCall post_init on all ORB initializersprivate voidCall pre_init on all ORB initializersvoidregister_interceptor(Interceptor interceptor, int type) Called by ORBInitInfo when an interceptor needs to be registered.voidregisterPolicyFactory(int type, PolicyFactory factory) This method registers the Policy Factory in the policyFactoryTable, which is a HashMap.private voidprivate voidprivate voidprivate voidHandles exceptions for the starting and intermediate points for server request interceptors.voidsetClientPIInfo(RequestImpl requestImpl) Notifies PI of additional information for client-side interceptors.voidsetClientPIInfo(MessageMediator messageMediator) Notify PI of the MessageMediator for the request.voidsetServerPIExceptionInfo(Any exception) Notifies PI of additional information for server-side interceptors.voidsetServerPIInfo(Exception exception) Notifies PI of additional information required for ServerRequestInfo.voidsetServerPIInfo(Object servant, String targetMostDerivedInterface) Notifies PI of additional information reqired for ServerRequestInfo.voidsetServerPIInfo(Any result) Notifies PI of additional information for server-side interceptors.voidsetServerPIInfo(NVList arguments) Notifies PI of additional information for server-side interceptors.
-
Field Details
-
orb
-
wrapper
-
orbutilWrapper
-
omgWrapper
-
serverRequestIdCounter
private int serverRequestIdCounter -
codecFactory
CodecFactory codecFactory -
arguments
String[] arguments -
interceptorList
-
hasIORInterceptors
private boolean hasIORInterceptors -
hasClientInterceptors
private boolean hasClientInterceptors -
hasServerInterceptors
private boolean hasServerInterceptors -
interceptorInvoker
-
current
-
policyFactoryTable
-
REPLY_MESSAGE_TO_PI_REPLY_STATUS
private static final short[] REPLY_MESSAGE_TO_PI_REPLY_STATUS -
threadLocalClientRequestInfoStack
private ThreadLocal<PIHandlerImpl.RequestInfoStack<ClientRequestInfoImpl>> threadLocalClientRequestInfoStack -
threadLocalServerRequestInfoStack
private ThreadLocal<PIHandlerImpl.RequestInfoStack<ServerRequestInfoImpl>> threadLocalServerRequestInfoStack
-
-
Constructor Details
-
PIHandlerImpl
-
-
Method Details
-
getReplyStatus
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-
initialize
public void initialize()Description copied from interface:PIHandlerComplete the initialization of the PIHandler. This will execute the methods on the ORBInitializers, if any are defined. This must be done here so that the ORB can obtain the PIHandler BEFORE the ORBInitializers run, since they will need access to the PIHandler through the ORB.- Specified by:
initializein interfacePIHandler
-
destroyInterceptors
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.- Specified by:
destroyInterceptorsin interfacePIHandler
-
objectAdapterCreated
Description copied from interface:PIHandlerCalled when a new object adapter is created.- Specified by:
objectAdapterCreatedin interfacePIHandler- Parameters:
oa- The adapter associated with the interceptors to be invoked.
-
adapterManagerStateChanged
public void adapterManagerStateChanged(int managerId, short newState) Description copied from interface:PIHandlerCalled whenever a state change occurs in an adapter manager.- Specified by:
adapterManagerStateChangedin interfacePIHandler- Parameters:
managerId- managerId The adapter manager idnewState- newState The new state of the adapter manager, and by implication of all object adapters managed by this manager.
-
adapterStateChanged
Description copied from interface:PIHandlerCalled whenever a state change occurs in an object adapter that was not caused by an adapter manager state change.- Specified by:
adapterStateChangedin interfacePIHandler- Parameters:
templates- The templates that are changing state.newState- The new state of the adapters identified by the templates.
-
disableInterceptorsThisThread
public void disableInterceptorsThisThread()Description copied from interface:PIHandlerCalled for pseudo-ops to temporarily disable portable interceptor hooks for calls on this thread. Keeps track of the number of times this is called and increments the disabledCount.- Specified by:
disableInterceptorsThisThreadin interfacePIHandler
-
enableInterceptorsThisThread
public void enableInterceptorsThisThread()Description copied from interface:PIHandlerCalled for pseudo-ops to re-enable portable interceptor hooks for calls on this thread. Decrements the disabledCount. If disabledCount is 0, interceptors are re-enabled.- Specified by:
enableInterceptorsThisThreadin interfacePIHandler
-
invokeClientPIStartingPoint
Description copied from interface:PIHandlerCalled when the send_request or send_poll portable interception point is to be invoked for all appropriate client-side request interceptors.- Specified by:
invokeClientPIStartingPointin interfacePIHandler- Throws:
RemarshalException- - Thrown when this request needs to be retried.
-
makeCompletedClientRequest
Description copied from interface:PIHandlerCalled when a retry is needed after initiateClientPIRequest but before invokeClientPIRequest. In this case, we need to properly balance initiateClientPIRequest/cleanupClientPIRequest calls, but WITHOUT extraneous calls to invokeClientPIEndingPoint (see bug 6763340).- Specified by:
makeCompletedClientRequestin interfacePIHandler- Parameters:
replyStatus- One of the constants in iiop.messages.ReplyMessage indicating which reply status to set.exception- The exception before ending interception points have been invoked, or null if no exception at the moment.- Returns:
- The exception to be thrown, after having gone through all ending points, or null if there is no exception to be thrown. Note that this exception can be either the same or different from the exception set using setClientPIException. There are four possible return types: null (no exception), SystemException, UserException, or RemarshalException.
-
invokeClientPIEndingPoint
Description copied from interface:PIHandlerCalled when the appropriate client ending interception point is to be invoked for all apporpriate client-side request interceptors.- Specified by:
invokeClientPIEndingPointin interfacePIHandler- Parameters:
replyStatus- One of the constants in iiop.messages.ReplyMessage indicating which reply status to set.exception- The exception before ending interception points have been invoked, or null if no exception at the moment.- Returns:
- The exception to be thrown, after having gone through all ending points, or null if there is no exception to be thrown. Note that this exception can be either the same or different from the exception set using setClientPIException. There are four possible return types: null (no exception), SystemException, UserException, or RemarshalException.
-
handleClientPIEndingPoint
-
secondCallForADIIRequest
@InfoMethod private void secondCallForADIIRequest() -
normalCall
@InfoMethod private void normalCall() -
clientInfoStackWasPushed
@InfoMethod private void clientInfoStackWasPushed() -
initiateClientPIRequest
public void initiateClientPIRequest(boolean diiRequest) Description copied from interface:PIHandlerInvoked when a request is about to be created. Must be called before any of the setClientPI* methods so that a new info object can be prepared for information collection.- Specified by:
initiateClientPIRequestin interfacePIHandler- Parameters:
diiRequest- True if this is to be a DII request, or false if it is a "normal" request. In the DII case, initiateClientPIRequest is called twice and we need to ignore the second one.
-
clientInfoStackWasPopped
@InfoMethod private void clientInfoStackWasPopped() -
cleanupClientPIRequest
public void cleanupClientPIRequest()Description copied from interface:PIHandlerInvoked when a request is about to be cleaned up. Must be called after ending points are called so that the info object on the stack can be deinitialized and popped from the stack at the appropriate time.- Specified by:
cleanupClientPIRequestin interfacePIHandler
-
setClientPIInfo
Description copied from interface:PIHandlerNotify PI of the MessageMediator for the request.- Specified by:
setClientPIInfoin interfacePIHandler- Parameters:
messageMediator- Mediator to notify
-
setClientPIInfo
Description copied from interface:PIHandlerNotifies PI of additional information for client-side interceptors. PI will use this information as a source of information for the ClientRequestInfo object.- Specified by:
setClientPIInfoin interfacePIHandler- Parameters:
requestImpl- request used as source of information
-
invokeServerPIStartingPoint
public void invokeServerPIStartingPoint()Description copied from interface:PIHandlerCalled when the appropriate server starting interception point is to be invoked for all appropriate server-side request interceptors.- Specified by:
invokeServerPIStartingPointin interfacePIHandler
-
invokeServerPIIntermediatePoint
public void invokeServerPIIntermediatePoint()Description copied from interface:PIHandlerCalled when the appropriate server intermediate interception point is to be invoked for all appropriate server-side request interceptors.- Specified by:
invokeServerPIIntermediatePointin interfacePIHandler
-
invokeServerPIEndingPoint
Description copied from interface:PIHandlerCalled when the appropriate server ending interception point is to be invoked for all appropriate server-side request interceptors.- Specified by:
invokeServerPIEndingPointin interfacePIHandler- Parameters:
replyMessage- The iiop.messages.ReplyMessage containing the reply status.
-
setServerPIInfo
Description copied from interface:PIHandlerNotifies PI of additional information required for ServerRequestInfo.- Specified by:
setServerPIInfoin interfacePIHandler- Parameters:
exception- the exception that will be returned
-
setServerPIInfo
Description copied from interface:PIHandlerNotifies PI of additional information for server-side interceptors. PI will use this information as a source of information for the ServerRequestInfo object. These are the arguments for a DSI request.- Specified by:
setServerPIInfoin interfacePIHandler- Parameters:
arguments- Arguments for a DSI request.
-
setServerPIExceptionInfo
Description copied from interface:PIHandlerNotifies PI of additional information for server-side interceptors. PI will use this information as a source of information for the ServerRequestInfo object. This is the exception of a DSI request.- Specified by:
setServerPIExceptionInfoin interfacePIHandler- Parameters:
exception- Exception of a DSI request
-
setServerPIInfo
Description copied from interface:PIHandlerNotifies PI of additional information for server-side interceptors. PI will use this information as a source of information for the ServerRequestInfo object. This is the result of a DSI request.- Specified by:
setServerPIInfoin interfacePIHandler- Parameters:
result- Result of a DSI request
-
serverInfoStackWasPushed
@InfoMethod private void serverInfoStackWasPushed() -
serverInfoStackWasPopped
@InfoMethod private void serverInfoStackWasPopped() -
initializeServerPIInfo
public void initializeServerPIInfo(MessageMediator request, ObjectAdapter oa, byte[] objectId, ObjectKeyTemplate oktemp) Description copied from interface:PIHandlerNotifies PI to start a new server request and set initial information for server-side interceptors. PI will use this information as a source of information for the ServerRequestInfo object. poaimpl is declared as an Object so that we need not introduce a dependency on the POA package.- Specified by:
initializeServerPIInfoin interfacePIHandler- Parameters:
request- Request holder, included the Connectionoa- Object AdapterobjectId- id of objectoktemp- template for object
-
setServerPIInfo
Description copied from interface:PIHandlerNotifies PI of additional information reqired for ServerRequestInfo.- Specified by:
setServerPIInfoin interfacePIHandler- Parameters:
servant- The servant. This is java.lang.Object because in the POA case, this will be a org.omg.PortableServer.Servant whereas in the ServerRequestDispatcher case this will be an ObjectImpl.targetMostDerivedInterface- The most derived interface. This is passed in instead of calculated when needed because it requires extra information in the POA case that we didn't want to bother creating extra methods for to pass in.
-
cleanupServerPIRequest
public void cleanupServerPIRequest()Description copied from interface:PIHandlerInvoked when a request is about to be cleaned up. Must be called after ending points are called so that the info object on the stack can be deinitialized and popped from the stack at the appropriate time.- Specified by:
cleanupServerPIRequestin interfacePIHandler
-
serverPIHandleExceptions
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.
-
convertPIReplyStatusToReplyMessage
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. -
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. -
peekServerRequestInfoImplStack
Convenience method to get the ServerRequestInfoImpl object off the top of the ThreadLocal stack. Returns null if there are none. -
isClientPIEnabledForThisThread
private boolean isClientPIEnabledForThisThread()Convenience method to determine whether Client PI is enabled for requests on this thread. -
preInitORBInitializers
Call pre_init on all ORB initializers -
postInitORBInitializers
Call post_init on all ORB initializers -
createORBInitInfo
Creates the ORBInitInfo object to be passed to ORB intializers' pre_init and post_init methods -
register_interceptor
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
- Specified by:
register_interceptorin interfacePIHandler- Throws:
DuplicateName- Thrown if an interceptor of the given name already exists for the given type.
-
getPICurrent
- Specified by:
getPICurrentin interfacePIHandler
-
nullParam
-
create_policy
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.ee.spi.orb.ORB.- Specified by:
create_policyin interfacePIHandler- Throws:
PolicyError
-
registerPolicyFactory
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.- Specified by:
registerPolicyFactoryin interfacePIHandler
-
allocateServerRequestId
public int allocateServerRequestId()- Specified by:
allocateServerRequestIdin interfacePIHandler
-