public abstract class ActivationGroup extends UnicastRemoteObjectimplements ActivationInstantiator
ActivationGroup is responsible for creating new instances of "activatable" objects in its group, informing its
ActivationMonitor when either: its object's become active or inactive, or the group as a whole becomes inactive.
An ActivationGroup is initially created in one of several ways:
ActivationDesc without an explicit ActivationGroupID for the first activatable object in the group, or ActivationGroup.createGroup method ActivationGroupDesc was only registered. Only the activator can recreate an ActivationGroup. The activator spawns, as needed, a separate VM (as a child process, for example) for each registered activation group and directs activation requests to the appropriate group. It is implementation specific how VMs are spawned. An activation group is created via the ActivationGroup.createGroup static method. The createGroup method has two requirements on the group to be created: 1) the group must be a concrete subclass of ActivationGroup, and 2) the group must have a constructor that takes two arguments:
ActivationGroupID, and java.rmi.MarshalledObject) When created, the default implementation of ActivationGroup will override the system properties with the properties requested when its ActivationGroupDesc was created, and will set a SecurityManager as the default system security manager. If your application requires specific properties to be set when objects are activated in the group, the application should create a special Properties object containing these properties, then create an ActivationGroupDesc with the Properties object, and use ActivationGroup.createGroup before creating any ActivationDescs (before the default ActivationGroupDesc is created). If your application requires the use of a security manager other than SecurityManager, in the ActivativationGroupDescriptor properties list you can set java.security.manager property to the name of the security manager you would like to install.
ActivationInstantiator,
ActivationGroupDesc,
ActivationGroupID,
Serialized Form
ref| Modifier | Constructor and Description |
|---|---|
protected |
ActivationGroup(ActivationGroupID
Constructs an activation group with the given activation group identifier.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
activeObject(ActivationID
This protected method is necessary for subclasses to make the
activeObject callback to the group's monitor.
|
abstract void |
activeObject(ActivationID
The group's
activeObject method is called when an object is exported (either by
Activatable object construction or an explicit call to
Activatable.exportObject.
|
static ActivationGroup |
createGroup(ActivationGroupID
Create and set the activation group for the current VM.
|
static ActivationGroupID |
currentGroupID()
Returns the current activation group's identifier.
|
static ActivationSystem |
getSystem()
Returns the activation system for the VM.
|
protected void |
inactiveGroup()
This protected method is necessary for subclasses to make the
inactiveGroup callback to the group's monitor.
|
boolean |
inactiveObject(ActivationID
The group's
inactiveObject method is called indirectly via a call to the
Activatable.inactive method.
|
static void |
setSystem(ActivationSystem
Set the activation system for the VM.
|
clone, exportObject, exportObject, exportObject, unexportObjectgetClientHost, getLog, setLogfinalize, getClass, notify, notifyAll, wait, wait, waitnewInstanceprotected ActivationGroup(ActivationGroupIDgroupID) throws RemoteException
java.rmi.server.UnicastRemoteObject.
groupID - the group's identifier
RemoteException - if this group could not be exported
UnsupportedOperationException - if and only if activation is not supported by this implementation
public boolean inactiveObject(ActivationIDid) throws ActivationException , UnknownObjectException , RemoteException
inactiveObject method is called indirectly via a call to the
Activatable.inactive method. A remote object implementation must call
Activatable's
inactive method when that object deactivates (the object deems that it is no longer active). If the object does not call
Activatable.inactive when it deactivates, the object will never be garbage collected since the group keeps strong references to the objects it creates.
The group's inactiveObject method unexports the remote object from the RMI runtime so that the object can no longer receive incoming RMI calls. An object will only be unexported if the object has no pending or executing calls. The subclass of ActivationGroup must override this method and unexport the object.
After removing the object from the RMI runtime, the group must inform its ActivationMonitor (via the monitor's inactiveObject method) that the remote object is not currently active so that the remote object will be re-activated by the activator upon a subsequent activation request.
This method simply informs the group's monitor that the object is inactive. It is up to the concrete subclass of ActivationGroup to fulfill the additional requirement of unexporting the object.
id - the object's activation identifier
UnknownObjectException - if object is unknown (may already be inactive)
RemoteException - if call informing monitor fails
ActivationException - if group is inactive
public abstract void activeObject(ActivationIDid, Remote obj) throws ActivationException , UnknownObjectException , RemoteException
activeObject method is called when an object is exported (either by
Activatable object construction or an explicit call to
Activatable.exportObject. The group must inform its
ActivationMonitor that the object is active (via the monitor's
activeObject method) if the group hasn't already done so.
id - the object's identifier
obj - the remote object implementation
UnknownObjectException - if object is not registered
RemoteException - if call informing monitor fails
ActivationException - if group is inactive
public static ActivationGroupcreateGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException
createGroup method when the
Activator initiates the re-creation of an activation group in order to carry out incoming
activate requests. A group must first be registered with the
ActivationSystem before it can be created via this method.
The group class specified by the ActivationGroupDesc must be a concrete subclass of ActivationGroup and have a public constructor that takes two arguments: the ActivationGroupID for the group and the MarshalledObject containing the group's initialization data (obtained from the ActivationGroupDesc.
If the group class name specified in the ActivationGroupDesc is null, then this method will behave as if the group descriptor contained the name of the default activation group implementation class.
Note that if your application creates its own custom activation group, a security manager must be set for that group. Otherwise objects cannot be activated in the group. SecurityManager is set by default.
If a security manager is already set in the group VM, this method first calls the security manager's checkSetFactory method. This could result in a SecurityException. If your application needs to set a different security manager, you must ensure that the policy file specified by the group's ActivationGroupDesc grants the group the necessary permissions to set a new security manager. (Note: This will be necessary if your group downloads and sets a security manager).
After the group is created, the ActivationSystem is informed that the group is active by calling the activeGroup method which returns the ActivationMonitor for the group. The application need not call activeGroup independently since it is taken care of by this method.
Once a group is created, subsequent calls to the currentGroupID method will return the identifier for this group until the group becomes inactive.
id - the activation group's identifier
desc - the activation group's descriptor
incarnation - the group's incarnation number (zero on group's initial creation)
ActivationException - if group already exists or if error occurs during group creation
SecurityException - if permission to create group is denied. (Note: The default implementation of the security manager
checkSetFactory method requires the RuntimePermission "setFactory")
UnsupportedOperationException - if and only if activation is not supported by this implementation
SecurityManager.checkSetFactory()
public static ActivationGroupIDcurrentGroupID()
UnsupportedOperationException - if and only if activation is not supported by this implementation
public static void setSystem(ActivationSystemsystem) throws ActivationException
getSystem method attempts to obtain a reference to the
ActivationSystem by looking up the name "java.rmi.activation.ActivationSystem" in the Activator's registry. By default, the port number used to look up the activation system is defined by
ActivationSystem.SYSTEM_PORT. This port can be overridden by setting the property
java.rmi.activation.port.
If there is a security manager, this method first calls the security manager's checkSetFactory method. This could result in a SecurityException.
system - remote reference to the
ActivationSystem
ActivationException - if activation system is already set
SecurityException - if permission to set the activation system is denied. (Note: The default implementation of the security manager
checkSetFactory method requires the RuntimePermission "setFactory")
UnsupportedOperationException - if and only if activation is not supported by this implementation
getSystem(),
SecurityManager.checkSetFactory()
public static ActivationSystemgetSystem() throws ActivationException
setSystem method. If the activation system is not set via the
setSystem method, then the
getSystem method attempts to obtain a reference to the
ActivationSystem by looking up the name "java.rmi.activation.ActivationSystem" in the Activator's registry. By default, the port number used to look up the activation system is defined by
ActivationSystem.SYSTEM_PORT. This port can be overridden by setting the property
java.rmi.activation.port.
ActivationException - if activation system cannot be obtained or is not bound (means that it is not running)
UnsupportedOperationException - if and only if activation is not supported by this implementation
setSystem(java.rmi.activation.ActivationSystem)
protected void activeObject(ActivationIDid, MarshalledObject <? extends Remote > mobj) throws ActivationException , UnknownObjectException , RemoteException
activeObject callback to the group's monitor. The call is simply forwarded to the group's
ActivationMonitor.
id - the object's identifier
mobj - a marshalled object containing the remote object's stub
UnknownObjectException - if object is not registered
RemoteException - if call informing monitor fails
ActivationException - if an activation error occurs
protected void inactiveGroup()
throws UnknownGroupException,
RemoteException
inactiveGroup callback to the group's monitor. The call is simply forwarded to the group's
ActivationMonitor. Also, the current group for the VM is set to null.
UnknownGroupException - if group is not registered
RemoteException - if call informing monitor fails