Class POAImpl
java.lang.Object
org.omg.CORBA.LocalObject
com.sun.corba.ee.spi.oa.ObjectAdapterBase
com.sun.corba.ee.impl.oa.poa.POAImpl
- All Implemented Interfaces:
ObjectAdapter, Serializable, Object, IDLEntity, POA, POAOperations
POAImpl is the implementation of the Portable Object Adapter. It
contains an implementation of the POA interfaces specified in
COBRA 2.3.1 chapter 11 (formal/99-10-07). This implementation
is moving to comply with CORBA 3.0 due to the many clarifications
that have been made to the POA semantics since CORBA 2.3.1.
Specific comments have been added where 3.0 applies, but note that
we do not have the new 3.0 APIs yet.
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate AdapterActivatorprivate final Conditionprivate final Conditionprivate final AtomicIntegerprivate final Conditionprivate final ThreadLocal<Boolean> private POAManagerImplprivate POAPolicyMediatorprivate static final Objectprivate final intprivate static final OMGSystemExceptionprivate POAImplprivate final ObjectAdapterId(package private) final ReadWriteLockprivate final Stringprivate static final longprivate intprivate static final intprivate static final intprivate static final intprivate static final intprivate static final intprivate static final intprivate final intprivate static final POASystemException -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidacquireLock(Lock lock) private voidacquireLockWaiting(int count) byte[]activate_object(Servant servant) activate_objectSection 3.3.8.14voidactivate_object_with_id(byte[] id, Servant servant) activate_object_with_idSection 3.3.8.15private voidadapterActivatorResult(boolean result) private voidchildren()the_childrenprivate voidcleanUpLocks(POAImpl child, boolean readLocked, boolean writeLocked, boolean childReadLocked) create_id_assignment_policySection 3.3.8.5create_id_uniqueness_policySection 3.3.8.5create_implicit_activation_policySection 3.3.8.5create_lifespan_policySection 3.3.8.5create_POA(String name, POAManager theManager, Policy[] policies) create_POASection 3.3.8.2create_reference(String repId) create_reference3.3.8.17create_reference_with_id(byte[] oid, String repId) create_reference_with_id3.3.8.18create_request_processing_policySection 3.3.8.5create_servant_retention_policySection 3.3.8.5create_thread_policySection 3.3.8.5private voidcreatedPOA(POAImpl poa) voiddeactivate_object(byte[] id) deactivate_object3.3.8.16voiddestroy(boolean etherealize, boolean wait_for_completion) destroySection 3.3.8.4private booleanprivate voiddoActivate(AdapterActivator act, String name, POAImpl child) voidenter()enter must be called before each request is invoked on a servant.(package private) voidvoidexit()exit must be called after each request has been completed.find_POASection 3.3.8.3private voidget_servantSection 3.3.8.12get_servant_managerSection 3.3.8.10private StringgetEffectivePolicy(int type) String[]getInterfaces(Object servant, byte[] objectId) Return the most derived interface for the given servant and objectId.private intvoidGet the servant for the request given by the parameters.getLocalServant(byte[] objectId) Get the servant corresponding to the given objectId, if this is supported.intReturn the ID of the AdapterManager for this object adapter.(package private) POAPolicyMediatorprivate StringgetName()private ObjectAdapterIdprotected org.glassfish.pfl.dynamic.copyobject.spi.ObjectCopierFactory(package private) static POAFactorygetPOAFactory(ORB orb) (package private) intgetPOAId()private POAManagerImpl(package private) PoliciesshortgetState()Return the current state of this object adapter (seeorg.omg.PortableInterceptorfor states).byte[]id()id11.3.8.26 in ptc/00-08-06id_to_reference(byte[] id) id_to_reference3.3.8.24id_to_servant(byte[] id) id_to_servant3.3.8.23private voidinitialize(POAManagerImpl manager, Policies policies) private voidinitializingPoa(int scid, int serverid, String orbid, ObjectAdapterId poaId) private byte[]internalReferenceToId(Object reference) private void(package private) voidlock()private voidprivate void(package private) final Condition(package private) static POAImplmakeRootPOA(ORB orb) private voidprivate voidnewPOACreated(String name, String parentName) private voidnoPOA()(package private) voidreadLock()(package private) voidbyte[]reference_to_id(Object reference) reference_to_id3.3.8.22reference_to_servant(Object reference) reference_to_servant3.3.8.21private static voidregisterMBean(ORB orb, Object obj) voidCalled from the subcontract to let this POA cleanup after an invocation.private Servantservant()byte[]servant_to_id(Servant servant) servant_to_id3.3.8.19servant_to_reference(Servant servant) servant_to_reference3.3.8.20private ServantManagervoidset_servant(Servant defaultServant) set_servantSection 3.3.8.13voidset_servant_manager(ServantManager servantManager) set_servant_managerSection 3.3.8.10private Stringthe_activatorSection 3.3.8.9voidthe_activator(AdapterActivator activator) the_activatorSection 3.3.8.9POA[]This attribute identifies the current set of all child POAs of the POA.the_name()the_nameSection 3.3.8.6the_parentSection 3.3.8.7the_POAManagerSection 3.3.8.8private voidtoString()(package private) voidunlock()private booleanMethods inherited from class ObjectAdapterBase
getAdapterId, getAdapterTemplate, getCurrentFactory, getIORTemplate, getORB, initializeTemplate, isNameService, makeInvocationInfo, makeObject, setCurrentFactory, setNameService, wrapperMethods inherited from class LocalObject
_create_request, _create_request, _duplicate, _get_domain_managers, _get_interface, _get_interface_def, _get_policy, _hash, _invoke, _is_a, _is_equivalent, _is_local, _non_existent, _orb, _release, _releaseReply, _request, _request, _servant_postinvoke, _servant_preinvoke, _set_policy_override, validate_connectionMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Object
_create_request, _create_request, _duplicate, _get_domain_managers, _get_interface_def, _get_policy, _hash, _is_a, _is_equivalent, _non_existent, _release, _request, _set_policy_override
-
Field Details
-
wrapper
-
omgWrapper
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
STATE_START
private static final int STATE_START- See Also:
-
STATE_INIT
private static final int STATE_INIT- See Also:
-
STATE_INIT_DONE
private static final int STATE_INIT_DONE- See Also:
-
STATE_RUN
private static final int STATE_RUN- See Also:
-
STATE_DESTROYING
private static final int STATE_DESTROYING- See Also:
-
STATE_DESTROYED
private static final int STATE_DESTROYED- See Also:
-
state
private int state -
mediator
-
numLevels
private final int numLevels -
poaId
-
poaName
-
manager
-
uniquePOAId
private final int uniquePOAId -
parent
-
children
-
activator
-
invocationCount
-
poaMutex
-
adapterActivatorCV
-
invokeCV
-
beingDestroyedCV
-
isDestroying
-
momLock
-
-
Constructor Details
-
POAImpl
-
-
Method Details
-
stateToString
-
toString
-
getDisplayState
@ManagedAttribute(id="POAState") @Description("The current state of the POA") private String getDisplayState() -
getMediator
-
getObjectAdapterId
@ManagedAttribute @Description("The ObjectAdapterId for this POA") private ObjectAdapterId getObjectAdapterId() -
getPOAFactory
-
registerMBean
-
makeRootPOA
-
getPOAId
@ManagedAttribute @Description("The unique ID for this POA") int getPOAId() -
thisPoa
-
acquireLockWaiting
@InfoMethod private void acquireLockWaiting(int count) -
acquireLock
-
lock
void lock() -
unlock
void unlock() -
readLock
void readLock() -
readUnlock
void readUnlock() -
makeCondition
-
getPolicies
Policies getPolicies() -
newPOACreated
-
getName
-
initializingPoa
@InfoMethod private void initializingPoa(int scid, int serverid, String orbid, ObjectAdapterId poaId) -
initialize
-
interruptedAwait
-
waitUntilRunning
private boolean waitUntilRunning() -
destroyIfNotInitDone
private boolean destroyIfNotInitDone() -
internalReferenceToId
- Throws:
WrongAdapter
-
etherealizeAll
void etherealizeAll() -
newPOA
-
create_POA
public POA create_POA(String name, POAManager theManager, Policy[] policies) throws AdapterAlreadyExists, InvalidPolicy create_POASection 3.3.8.2- Specified by:
create_POAin interfacePOAOperations- Parameters:
name- identifies the new POA with respect to other POAs with the same parent POA.theManager- specifies the POA Manager to be associated with the new POA.policies- specifies policy objects to be associated with the POA to control its behavior.- Returns:
- the new POA
- Throws:
AdapterAlreadyExists- specifies that the target POA already has a child POA with the specified name.InvalidPolicy- is raised if any of the policy objects are not valid for the ORB, or are in conflict, or require an administrative action that has not been performed.
-
foundPOA
-
createdPOA
-
noPOA
@InfoMethod private void noPOA() -
callingAdapterActivator
@InfoMethod private void callingAdapterActivator() -
adapterActivatorResult
@InfoMethod private void adapterActivatorResult(boolean result) -
find_POA
find_POASection 3.3.8.3- Specified by:
find_POAin interfacePOAOperations- Parameters:
name- POA name to be found.activate- if a POA with the specified name does not exist and the value of the activate_it parameter is TRUE, the target POA's AdapterActivator, if one exists, is invoked.- Returns:
- org.omg.PortableServer.POAPackage.POA if one exists or is activated by the AdapterActivator.
- Throws:
AdapterNonExistent- is raised if POA with a specified name cannot be found or activated using AdapaterActivator.
-
lockAndWaitUntilRunning
private void lockAndWaitUntilRunning() -
doActivate
- Throws:
AdapterNonExistent
-
locksWereHeld
@InfoMethod private void locksWereHeld() -
cleanUpLocks
private void cleanUpLocks(POAImpl child, boolean readLocked, boolean writeLocked, boolean childReadLocked) -
destroy
public void destroy(boolean etherealize, boolean wait_for_completion) destroySection 3.3.8.4- Specified by:
destroyin interfacePOAOperations- Parameters:
etherealize- flag to indicate whether etherealize operation on servant manager needs to be called.wait_for_completion- flag to indicate whether POA and its children need to wait for active requests and the etherealization to complete.
-
create_thread_policy
create_thread_policySection 3.3.8.5- Specified by:
create_thread_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- ThreadPolcy Object
-
create_lifespan_policy
create_lifespan_policySection 3.3.8.5- Specified by:
create_lifespan_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- LifespanPolicy Object.
-
create_id_uniqueness_policy
create_id_uniqueness_policySection 3.3.8.5- Specified by:
create_id_uniqueness_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- IdUniquenessPolicy Object.
-
create_id_assignment_policy
create_id_assignment_policySection 3.3.8.5- Specified by:
create_id_assignment_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- IdAssignmentPolicy Object.
-
create_implicit_activation_policy
public ImplicitActivationPolicy create_implicit_activation_policy(ImplicitActivationPolicyValue value) create_implicit_activation_policySection 3.3.8.5- Specified by:
create_implicit_activation_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- ImplicitActivationPolicy Object.
-
create_servant_retention_policy
create_servant_retention_policySection 3.3.8.5- Specified by:
create_servant_retention_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- ServantRetentionPolicy Object.
-
create_request_processing_policy
create_request_processing_policySection 3.3.8.5- Specified by:
create_request_processing_policyin interfacePOAOperations- Parameters:
value- policy type- Returns:
- RequestProcessingPolicy Object.
-
the_name
the_nameSection 3.3.8.6- Specified by:
the_namein interfacePOAOperations- Returns:
- name of the POA
-
the_parent
the_parentSection 3.3.8.7- Specified by:
the_parentin interfacePOAOperations- Returns:
- the parent of the POA
-
children
-
the_children
Description copied from interface:POAOperationsThis attribute identifies the current set of all child POAs of the POA. The set of child POAs includes only the POA's immediate children, and not their descendants.- Specified by:
the_childrenin interfacePOAOperations- Returns:
- the children of the POA
-
getPOAManager
@ManagedAttribute(id="POAManager") @Description("The POAManager of this POA") private POAManagerImpl getPOAManager() -
the_POAManager
the_POAManagerSection 3.3.8.8- Specified by:
the_POAManagerin interfacePOAOperations- Returns:
- the POA manager
-
the_activator
@ManagedAttribute(id="Activator") @Description("The AdapterActivator of this POA") public AdapterActivator the_activator()the_activatorSection 3.3.8.9- Specified by:
the_activatorin interfacePOAOperations
-
the_activator
the_activatorSection 3.3.8.9- Specified by:
the_activatorin interfacePOAOperations
-
get_servant_manager
get_servant_managerSection 3.3.8.10- Specified by:
get_servant_managerin interfacePOAOperations- Returns:
- org.omg.PortableServer.POAPackage.ServantManager associated with a POA or null if none exists.
- Throws:
WrongPolicy- raised if the USE_SERVANT_MANAGER policy is not specified.
-
servantManager
@ManagedAttribute @Description("The servant manager of this POA (may be null)") private ServantManager servantManager() -
set_servant_manager
set_servant_managerSection 3.3.8.10- Specified by:
set_servant_managerin interfacePOAOperations- Parameters:
servantManager- servant manager to be used as a default.- Throws:
WrongPolicy- raised if the USE_SERVANT_MANAGER policy is not specified.
-
get_servant
get_servantSection 3.3.8.12- Specified by:
get_servantin interfacePOAOperations- Returns:
- p_servant default servant associated with a POA.
- Throws:
NoServant- raised if no default servant is associated with the POA.WrongPolicy- raised if the USE_DEFAULT_SERVANT policy is not specified.
-
servant
@ManagedAttribute @Description("The default servant of this POA (may be null)") private Servant servant() -
set_servant
set_servantSection 3.3.8.13- Specified by:
set_servantin interfacePOAOperations- Parameters:
defaultServant- servant to be used as a default.- Throws:
WrongPolicy- raised if the USE_DEFAULT_SERVANT policy is not specified.
-
activate_object
activate_objectSection 3.3.8.14- Specified by:
activate_objectin interfacePOAOperations- Parameters:
servant- servant to be associated with an object to be activated.- Returns:
- POA generated object id.
- Throws:
ServantAlreadyActive- is raised if the POA has UNIQUE_ID policy and servant is is already in the Active Object Map.WrongPolicy- raised if the SYSTEM_ID and RETAIN policies are not specified.
-
activate_object_with_id
public void activate_object_with_id(byte[] id, Servant servant) throws ObjectAlreadyActive, ServantAlreadyActive, WrongPolicy activate_object_with_idSection 3.3.8.15- Specified by:
activate_object_with_idin interfacePOAOperations- Parameters:
id- object id for the object to be activated.servant- servant to be associated with the object.- Throws:
ObjectAlreadyActive- raised if the object is already active in the POA.ServantAlreadyActive- raised if the POA has the UNIQUE_ID policy and the servant is already in the Active Object Map.WrongPolicy- raised if the RETAIN policy is is not specified.
-
deactivate_object
deactivate_object3.3.8.16- Specified by:
deactivate_objectin interfacePOAOperations- Parameters:
id- Object Id for the object to be deactivated.- Throws:
ObjectNotActive- if the object with the specified oid is not in the Active Object Map.WrongPolicy- raised if the RETAIN policy is is not specified.
-
create_reference
create_reference3.3.8.17- Specified by:
create_referencein interfacePOAOperations- Parameters:
repId- rep id for creating an object reference.- Returns:
- object reference created using intf.
- Throws:
WrongPolicy- if SYSTEM_ID policy is not specified.
-
create_reference_with_id
create_reference_with_id3.3.8.18- Specified by:
create_reference_with_idin interfacePOAOperations- Parameters:
oid- object id for creating an objrefrepId- rep id for creating an objref- Returns:
- object reference created using oid and intf
-
servant_to_id
servant_to_id3.3.8.19- Specified by:
servant_to_idin interfacePOAOperations- Parameters:
servant- servant for which the object disi returned.- Returns:
- object id associated with the servant.
- Throws:
ServantNotActive- if the above rules and policy combination is not met.WrongPolicy- if the USE_DEFAULT_SERVANT policy or a combination of the RETAIN policy and either the UNIQUE_ID or IMPLICIT_ACTIVATION policies are not present.
-
servant_to_reference
servant_to_reference3.3.8.20- Specified by:
servant_to_referencein interfacePOAOperations- Parameters:
servant- servant for which the object reference needs to be obtained.- Returns:
- object reference associated with the servant.
- Throws:
ServantNotActive- if the above specified policies and rules are not met.WrongPolicy- if the operation is not invoked in the context of executing a request on the specified servant and the required policies are not present.
-
reference_to_servant
public Servant reference_to_servant(Object reference) throws ObjectNotActive, WrongPolicy, WrongAdapter reference_to_servant3.3.8.21- Specified by:
reference_to_servantin interfacePOAOperations- Parameters:
reference- object reference for which the servant is returned.- Returns:
- servant associated with the reference.
- Throws:
ObjectNotActive- if the servant is not present in the Active Object Map (for RETAIN) or no default servant is registered (for USE_DEFAULT_POLICY).WrongPolicy- if neither the RETAIN policy or the USE_DEFAULT_SERVANT policy is present.WrongAdapter- if reference was not created by this POA instance.
-
reference_to_id
reference_to_id3.3.8.22- Specified by:
reference_to_idin interfacePOAOperations- Parameters:
reference- the object reference from which the object id needs to be returned.- Returns:
- object id encapsulated in the reference.
- Throws:
WrongAdapter- if the reference was not created by the POA specified in the reference.WrongPolicy- declared to allow future extensions.
-
id_to_servant
id_to_servant3.3.8.23- Specified by:
id_to_servantin interfacePOAOperations- Parameters:
id- object id for the which the servant is returned.- Returns:
- servant associated with oid.
- Throws:
ObjectNotActive- is raised if ObjectId is is not in the Active Object Map (for RETAIN policy), or no default servant is registered (for USE_DEFAULT_SERVANT policy).WrongPolicy- is raised if the RETAIN policy or the USE_DEFAULT_SERVANT policy is not present.
-
id_to_reference
id_to_reference3.3.8.24- Specified by:
id_to_referencein interfacePOAOperations- Parameters:
id- id of the object for which the reference is returned.- Returns:
- the object reference
- Throws:
ObjectNotActive- if the Object Id value is not active in the POA.WrongPolicy- if the RETAIN policy is not present.
-
id
public byte[] id()id11.3.8.26 in ptc/00-08-06- Specified by:
idin interfacePOAOperations- Returns:
- the unique id
-
getEffectivePolicy
- Specified by:
getEffectivePolicyin interfaceObjectAdapter- Specified by:
getEffectivePolicyin classObjectAdapterBase
-
getManagerId
public int getManagerId()Description copied from interface:ObjectAdapterReturn the ID of the AdapterManager for this object adapter.- Specified by:
getManagerIdin interfaceObjectAdapter- Specified by:
getManagerIdin classObjectAdapterBase- Returns:
- the identifier
-
getState
public short getState()Description copied from interface:ObjectAdapterReturn the current state of this object adapter (seeorg.omg.PortableInterceptorfor states).- Specified by:
getStatein interfaceObjectAdapter- Specified by:
getStatein classObjectAdapterBase- Returns:
- the current state of this object adapter
- See Also:
-
getInterfaces
Description copied from interface:ObjectAdapterReturn the most derived interface for the given servant and objectId.- Specified by:
getInterfacesin interfaceObjectAdapter- Specified by:
getInterfacesin classObjectAdapterBase- Parameters:
servant- servant objectobjectId- byte array forming the objectId- Returns:
- list of derived interfaces
-
getObjectCopierFactory
protected org.glassfish.pfl.dynamic.copyobject.spi.ObjectCopierFactory getObjectCopierFactory()- Specified by:
getObjectCopierFactoryin classObjectAdapterBase
-
enter
Description copied from interface:ObjectAdapterenter must be called before each request is invoked on a servant.- Specified by:
enterin interfaceObjectAdapter- Specified by:
enterin classObjectAdapterBase- Throws:
OADestroyed- is thrown when an OA has been destroyed, which requires a retry in the case where an AdapterActivator is present.
-
exit
public void exit()Description copied from interface:ObjectAdapterexit must be called after each request has been completed. If enter is called and completes normally, there must always be a corresponding exit. If enter throw OADestroyed, exit must NOT be called.- Specified by:
exitin interfaceObjectAdapter- Specified by:
exitin classObjectAdapterBase
-
getInvocationCount
@ManagedAttribute @Description("The current invocation count of this POA") private int getInvocationCount() -
getInvocationServant
Description copied from interface:ObjectAdapterGet the servant for the request given by the parameters. info must contain a valid objectId in this call. The servant is set in the InvocationInfo argument that is passed into this call.- Specified by:
getInvocationServantin interfaceObjectAdapter- Specified by:
getInvocationServantin classObjectAdapterBase- Parameters:
info- is the InvocationInfo object for the object reference
-
getLocalServant
Description copied from interface:ObjectAdapterGet the servant corresponding to the given objectId, if this is supported. This method is only used for models where the servant is an ObjectImpl, which allows the servant to be used directly as the stub. This allows an object reference to be replaced by its servant when it is unmarshalled locally. Such objects are not ORB mediated.- Specified by:
getLocalServantin interfaceObjectAdapter- Specified by:
getLocalServantin classObjectAdapterBase- Parameters:
objectId- byte array representing the object ID- Returns:
- corresponding servant
-
returnServant
public void returnServant()Called from the subcontract to let this POA cleanup after an invocation. Note: If getServant was called, then returnServant MUST be called, even in the case of exceptions. This may be called multiple times for a single request.- Specified by:
returnServantin interfaceObjectAdapter- Specified by:
returnServantin classObjectAdapterBase
-