Our POA implementation.
_get_policy
public Policy _get_policy(int a_policy_type)
throws BAD_PARAM
Get the policy of the given type, associated with this POA.
- _get_policy in interface Object
- _get_policy in interface LocalObject
a_policy_type
- a type of the requested policy.
- a policy of the given type, applyting to this POA.
BAD_PARAM
- if the policy of this type has not
been specified for this POA.
activate_object
public byte[] activate_object(Servant a_servant)
throws ServantAlreadyActive,
WrongPolicy
Generate the Object Id for the given servant and add the servant to the
Active Object Map using this Id a a key. If the servant activator is set,
its incarnate method will be called.
- activate_object in interface POAOperations
a_servant
- a servant that would serve the object with the returned
Object Id. If null is passed, under apporoprate policies the servant
activator is invoked.
- the generated objert Id for the given servant.
ServantAlreadyActive
- if this servant is already in the Active
Object Map and the UNIQUE_ID policy applies.WrongPolicy
- if the required policies SYSTEM_ID and RETAIN do not
apply to this POA.
activate_object_with_id
public void activate_object_with_id(byte[] an_Object_Id,
Servant a_servant)
throws ServantAlreadyActive,
ObjectAlreadyActive,
WrongPolicy
Add the given servant to the Active Object Map as a servant for the object
with the provided Object Id. If the servant activator is set, its incarnate
method will be called.
- activate_object_with_id in interface POAOperations
an_Object_Id
- an object id for the given object.a_servant
- a servant that will serve the object with the given Object
Id. If null is passed, under apporoprate policies the servant activator is
invoked.
ObjectAlreadyActive
- if the given object id is already in the Active
Object Map.ServantAlreadyActive
- if the UNIQUE_ID policy applies and this
servant is already in use.WrongPolicy
- if the required RETAIN policy does not apply to this
POA.BAD_PARAM
- if the passed object id is invalid due any reason.
activate_object_with_id
public void activate_object_with_id(byte[] an_Object_Id,
Servant a_servant,
boolean use_forwarding)
throws ServantAlreadyActive,
ObjectAlreadyActive,
WrongPolicy
Same as activate_object_with_id, but permits gnuForwardRequest forwarding
exception. This is used when the activation is called from the remote
invocation context and we have possibility to return the forwarding
message.
applies
public final boolean applies(Object policy_value)
Check if the given policy value applies to this POA.
policy_value
- a policy value to check. The policy values are
singletons and unique between the different policies, so the policy
type is not passed.
- true if the policy value applies, false otherwise.
connect_to_orb
protected void connect_to_orb(byte[] an_Object_Id,
Object object)
Connect the given delegate object to orb.
createPoaInstance
protected POA createPoaInstance(String child_name,
POAManager a_manager,
Policy[] policies,
ORB_1_4 an_orb)
throws InvalidPolicy
Create an instance of the POA with the given features.
This method is not responsible for duplicate checking
or adding the returned instance to any possible table.
child_name
- the name of the poa being created.a_manager
- the poa manager (never null).policies
- the array of policies.an_orb
- the ORB for this POA.
create_POA
public POA create_POA(String child_name,
POAManager manager,
Policy[] policies)
throws AdapterAlreadyExists,
InvalidPolicy
Creates a new POA as a child of the target POA.
- create_POA in interface POAOperations
child_name
- the name of the child POA being created.manager
- the manager that will control the new POA. If this parameter
is null, a new POA manager is created and associated with the new POA.policies
- the policies, applicable for the parent POA. Policies
are not inherited from the parent POA.
- an newly created POA. The POA will be intially in the holding
state and must be activated to start processing requests.
AdapterAlreadyExists
- if the child with the given child_name
already exists for the current POA.InvalidPolicy
- if the policies conflict with each other or are
otherwise inappropriate.
create_reference
public Object create_reference(String a_repository_id)
throws WrongPolicy
Create the object reference, encapsulating the given repository Id and
the Object Id, generated by this POA. The returned object will not be
activated by default and may be activated on the first invocation by
the servant manager (if it is set and if policies are applicable).
- create_reference in interface POAOperations
a_repository_id
- the repository id for the given object, can
be null if to be requested from the servant later.
WrongPolicy
- if the required SYSTEM_ID policy does not apply to
this POA.
create_reference_with_id
public Object create_reference_with_id(byte[] an_object_id,
String a_repository_id)
Create the object reference, encapsulating the given repository Id and
the given Object Id. The returned object will not be
activated by default and may be activated on the first invocation by
the servant manager (if the IMPLICIT_ACTIVATION policy applies).
- create_reference_with_id in interface POAOperations
an_object_id
- the object id for the object being created. If this
POA uses the SYSTEM_ID policy, the portable application should only
pass the ids, generated by this POA.a_repository_id
- the repository id for the object being created,
can be null if this information should be later requested from the
servant.
deactivate_object
public void deactivate_object(byte[] the_Object_Id)
throws ObjectNotActive,
WrongPolicy
Deactivate object with the given id.
The deactivated object will continue to process requests that arrived
before decativation. If this POA has the associated
servant manager, a ServantActivatorOperations.etherealize
is
immediately invoked on the passed id.
- deactivate_object in interface POAOperations
WrongPolicy
- if the required RETAIN policy does not apply to
this POA.
destroy
public void destroy(boolean etherealize_objects,
boolean wait_for_completion)
Destroy this POA and all descendant POAs. The destroyed POAs can be later
re-created via
AdapterActivator
or by invoking
create_POA(String,POAManager,Policy[])
.
This differs from
PoaManagerOperations.deactivate
that does not
allow recreation of the deactivated POAs. After deactivation, recreation is
only possible if the POAs were later destroyed.
The remote invocation on the target, belonging to the POA that is currently
destroyed return the remote exception (
TRANSIENT
, minor code 4).
- destroy in interface POAOperations
etherealize_objects
- if true, and POA has RETAIN policy, and the
servant manager is available, the servant manager method
ServantActivatorOperations.etherealize
is called for each active
object in the Active Object Map. This method should not try to access POA
being destroyed. If destroy
is called multiple times before
the destruction completes, the etherialization should be invoked only once.wait_for_completion
- if true, the method waits till the POA being
destroyed completes all current requests and etherialization. If false, the
method returns immediately.
etherealizeAll
protected void etherealizeAll()
Etherealize all objects, associated with this POA. Invoked from the
gnuPOAManager
only if it is known that the servant_activator
holds non-null value.
excluding
public final void excluding(Object policy_value)
throws WrongPolicy
Check for the absence of the given policy.
policy_value
- a policy value to check.
WrongPolicy
- if the passed policy value is applicable.
findIorKey
public AOM.Obj findIorKey(byte[] ior_key)
Parses the given key, extracts poa and object id and searches
for such reference.
findKey
public AOM.Obj findKey(byte[] object_id,
byte[] poa_id)
Recursively searches for the given key in the POA tree.
find_POA
public POA find_POA(String poa_name,
boolean activate_it)
throws AdapterNonExistent
Find and optionally activate the child POA with the given name.
- find_POA in interface POAOperations
poa_name
- the name of the POA to find.activate_it
- if the child with the specified name is not found
or inactive and this parameter is true, the target POA activator is
invoked to activate that child. If this succeeds, that child POA
is returned.
AdapterNonExistent
- if no active child with the given name
is found and one of the following is true:
a) the target POA has no associated
AdapterActivator
. b) that activator fails to activate the
child POA. c) activate_id
= false.
id
public byte[] id()
Get the unique Id of the POA in the process in which it is created.
This Id is needed by portable interceptors. The id is unique
for the life span of the POA in the process. For persistent
POAs, if a POA is created in the same path with the same name as
another POA, these POAs are identical have the same id. All transient
POAs are assumed unique.
- id in interface POAOperations
idFormIor
public byte[] idFormIor(byte[] ior_key)
Extracts the object id from the ior key.
- the encapsulated object ior key or null if
this ior key either refers a different POA or encoding signature
mismatch.
orb
public ORB orb()
Get the ORB, where this POA is connected.
required
public final void required(Object policy_value)
throws WrongPolicy
Check for the presence of the required policy.
policy_value
- a policy value to check.
WrongPolicy
- if the required policy value is not applicable.
servant_to_id
public byte[] servant_to_id(Servant the_Servant)
throws ServantNotActive,
WrongPolicy
Returns the id of the object, served by the given servant (assuming that
the servant serves only one object). The id is found in one of the
following ways.
- If the POA has both the RETAIN and the UNIQUE_ID policy and the
specified servant is active, the method return the Object Id associated
with that servant.
- If the POA has both the RETAIN and the IMPLICIT_ACTIVATION policy and
either the POA has the MULTIPLE_ID policy or the specified servant is
inactive, the method activates the servant using a POA-generated Object Id
and the Interface Id associated with the servant, and returns that Object
Id.
- If the POA has the USE_DEFAULT_SERVANT policy, the servant specified
is the default servant, and the method is being invoked in the context of
executing a request on the default servant, the method returns the ObjectId
associated with the current invocation.
- servant_to_id in interface POAOperations
ServantNotActive
- in all cases, not listed in the list above.WrongPolicy
- The method requres USE_DEFAULT_SERVANT policy or a
combination of the RETAIN policy and either the UNIQUE_ID or
IMPLICIT_ACTIVATION policies and throws the WrongPolicy if these conditions
are not satisfied.
servant_to_reference
public Object servant_to_reference(Servant the_Servant)
throws ServantNotActive,
WrongPolicy
Converts the given servant to the object reference. The servant will serve
all methods, invoked on the returned object. The returned object reference
can be passed to the remote client, enabling remote invocations.
If the specified servant is active, it is returned. Otherwise, if the POA
has the IMPLICIT_ACTIVATION policy the method activates the servant. In
this case, if the servant activator is set, the
ServantActivatorOperations.incarnate
method will be called.
- servant_to_reference in interface POAOperations
- the object, exposing the given servant in the context of this POA.
ServantNotActive
- if the servant is inactive and no
IMPLICIT_ACTIVATION policy applies.WrongPolicy
- This method needs the RETAIN policy and either the
UNIQUE_ID or IMPLICIT_ACTIVATION policies.
set_servant
public void set_servant(Servant a_servant)
throws WrongPolicy
Sets the default servant for this POA.
- set_servant in interface POAOperations
a_servant
- a servant that will be used for requests for
which no servant is found in the Active Object Map.
WrongPolicy
- if the USE_DEFAULT_SERVANT policy is not active.
the_activator
public AdapterActivator the_activator()
Returns the adapter activator, associated with this POA.
The newly created POA has no activator (null would be
returned). The ORB root POA also initially has no activator.
- the_activator in interface POAOperations
- tha adapter activator or null if this POA has no
associated adapter activator.
toIORKey
public byte[] toIORKey(byte[] object_id)
Converts the object Id into the IOR key. IOR key must be
unique in the scope of the ORB, and Ids only in the scope of POA.
Hence the IOR key includes the POA identifiers.
waitWhileRunning
public void waitWhileRunning()
Wait while at least one of the threads in this POA is actively
processing one of requests.
gnuAbstractPOA.java --
Copyright (C) 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version.