- All Implemented Interfaces:
- Serializable,- ActivationInstantiator,- Remote
public abstract class ActivationGroup extends UnicastRemoteObject implements 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: 
- as a side-effect of creating an ActivationDescwithout an explicitActivationGroupIDfor the first activatable object in the group, or
- via the ActivationGroup.createGroupmethod
- as a side-effect of activating the first object in a group
     whose ActivationGroupDescwas 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:
 
-  the group's ActivationGroupID, and
-  the group's initialization data (in a
      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.
- Since:
- 1.2
- See Also:
- ActivationInstantiator,- ActivationGroupDesc,- ActivationGroupID, Serialized Form
- 
Field Summary
- 
Constructor SummaryConstructors Modifier Constructor Description protectedActivationGroup(ActivationGroupID groupID)Constructs an activation group with the given activation group identifier.
- 
Method SummaryModifier and Type Method Description protected voidactiveObject(ActivationID id, MarshalledObject<? extends Remote> mobj)This protected method is necessary for subclasses to make theactiveObjectcallback to the group's monitor.abstract voidactiveObject(ActivationID id, Remote obj)The group'sactiveObjectmethod is called when an object is exported (either byActivatableobject construction or an explicit call toActivatable.exportObject.static ActivationGroupcreateGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation)Create and set the activation group for the current VM.static ActivationGroupIDcurrentGroupID()Returns the current activation group's identifier.static ActivationSystemgetSystem()Returns the activation system for the VM.protected voidinactiveGroup()This protected method is necessary for subclasses to make theinactiveGroupcallback to the group's monitor.booleaninactiveObject(ActivationID id)The group'sinactiveObjectmethod is called indirectly via a call to theActivatable.inactivemethod.static voidsetSystem(ActivationSystem system)Set the activation system for the VM.Methods declared in class java.rmi.server.UnicastRemoteObjectclone, exportObject, exportObject, exportObject, exportObject, exportObject, unexportObject
- 
Constructor Details- 
ActivationGroupConstructs an activation group with the given activation group identifier. The group is exported as ajava.rmi.server.UnicastRemoteObject.- Parameters:
- groupID- the group's identifier
- Throws:
- RemoteException- if this group could not be exported
- UnsupportedOperationException- if and only if activation is not supported by this implementation
- Since:
- 1.2
 
 
- 
- 
Method Details- 
inactiveObjectpublic boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, RemoteExceptionThe group'sinactiveObjectmethod is called indirectly via a call to theActivatable.inactivemethod. A remote object implementation must callActivatable'sinactivemethod when that object deactivates (the object deems that it is no longer active). If the object does not callActivatable.inactivewhen it deactivates, the object will never be garbage collected since the group keeps strong references to the objects it creates.The group's inactiveObjectmethod 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 ofActivationGroupmust override this method and unexport the object.After removing the object from the RMI runtime, the group must inform its ActivationMonitor(via the monitor'sinactiveObjectmethod) 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. - Parameters:
- id- the object's activation identifier
- Returns:
- true if the object was successfully deactivated; otherwise returns false.
- Throws:
- UnknownObjectException- if object is unknown (may already be inactive)
- RemoteException- if call informing monitor fails
- ActivationException- if group is inactive
- Since:
- 1.2
 
- 
activeObjectpublic abstract void activeObject(ActivationID id, Remote obj) throws ActivationException, UnknownObjectException, RemoteExceptionThe group'sactiveObjectmethod is called when an object is exported (either byActivatableobject construction or an explicit call toActivatable.exportObject. The group must inform itsActivationMonitorthat the object is active (via the monitor'sactiveObjectmethod) if the group hasn't already done so.- Parameters:
- id- the object's identifier
- obj- the remote object implementation
- Throws:
- UnknownObjectException- if object is not registered
- RemoteException- if call informing monitor fails
- ActivationException- if group is inactive
- Since:
- 1.2
 
- 
createGrouppublic static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationExceptionCreate and set the activation group for the current VM. The activation group can only be set if it is not currently set. An activation group is set using thecreateGroupmethod when theActivatorinitiates the re-creation of an activation group in order to carry out incomingactivaterequests. A group must first be registered with theActivationSystembefore it can be created via this method.The group class specified by the ActivationGroupDescmust be a concrete subclass ofActivationGroupand have a public constructor that takes two arguments: theActivationGroupIDfor the group and theMarshalledObjectcontaining the group's initialization data (obtained from theActivationGroupDesc.If the group class name specified in the ActivationGroupDescisnull, 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. SecurityManageris set by default.If a security manager is already set in the group VM, this method first calls the security manager's checkSetFactorymethod. This could result in aSecurityException. If your application needs to set a different security manager, you must ensure that the policy file specified by the group'sActivationGroupDescgrants 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 ActivationSystemis informed that the group is active by calling theactiveGroupmethod which returns theActivationMonitorfor the group. The application need not callactiveGroupindependently since it is taken care of by this method.Once a group is created, subsequent calls to the currentGroupIDmethod will return the identifier for this group until the group becomes inactive.- Parameters:
- id- the activation group's identifier
- desc- the activation group's descriptor
- incarnation- the group's incarnation number (zero on group's initial creation)
- Returns:
- the activation group for the VM
- Throws:
- 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- checkSetFactorymethod requires the RuntimePermission "setFactory")
- UnsupportedOperationException- if and only if activation is not supported by this implementation
- Since:
- 1.2
- See Also:
- SecurityManager.checkSetFactory()
 
- 
currentGroupIDReturns the current activation group's identifier. Returns null if no group is currently active for this VM.- Returns:
- the activation group's identifier
- Throws:
- UnsupportedOperationException- if and only if activation is not supported by this implementation
- Since:
- 1.2
 
- 
setSystemSet the activation system for the VM. The activation system can only be set it if no group is currently active. If the activation system is not set via this call, then thegetSystemmethod attempts to obtain a reference to theActivationSystemby 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 byActivationSystem.SYSTEM_PORT. This port can be overridden by setting the propertyjava.rmi.activation.port.If there is a security manager, this method first calls the security manager's checkSetFactorymethod. This could result in a SecurityException.- Parameters:
- system- remote reference to the- ActivationSystem
- Throws:
- 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- checkSetFactorymethod requires the RuntimePermission "setFactory")
- UnsupportedOperationException- if and only if activation is not supported by this implementation
- Since:
- 1.2
- See Also:
- getSystem(),- SecurityManager.checkSetFactory()
 
- 
getSystemReturns the activation system for the VM. The activation system may be set by thesetSystemmethod. If the activation system is not set via thesetSystemmethod, then thegetSystemmethod attempts to obtain a reference to theActivationSystemby 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 byActivationSystem.SYSTEM_PORT. This port can be overridden by setting the propertyjava.rmi.activation.port.- Returns:
- the activation system for the VM/group
- Throws:
- 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
- Since:
- 1.2
- See Also:
- setSystem(java.rmi.activation.ActivationSystem)
 
- 
activeObjectprotected void activeObject(ActivationID id, MarshalledObject<? extends Remote> mobj) throws ActivationException, UnknownObjectException, RemoteExceptionThis protected method is necessary for subclasses to make theactiveObjectcallback to the group's monitor. The call is simply forwarded to the group'sActivationMonitor.- Parameters:
- id- the object's identifier
- mobj- a marshalled object containing the remote object's stub
- Throws:
- UnknownObjectException- if object is not registered
- RemoteException- if call informing monitor fails
- ActivationException- if an activation error occurs
- Since:
- 1.2
 
- 
inactiveGroupThis protected method is necessary for subclasses to make theinactiveGroupcallback to the group's monitor. The call is simply forwarded to the group'sActivationMonitor. Also, the current group for the VM is set to null.- Throws:
- UnknownGroupException- if group is not registered
- RemoteException- if call informing monitor fails
- Since:
- 1.2
 
 
-