Activatablepublic abstract class Activatable extends RemoteServer The Activatable class provides support for remote
objects that require persistent access over time and that
can be activated by the system.
For the constructors and static exportObject methods,
the stub for a remote object being exported is obtained as described in
{@link java.rmi.server.UnicastRemoteObject}.
An attempt to serialize explicitly an instance of this class will
fail. |
Fields Summary |
---|
private ActivationID | id | private static final long | serialVersionUIDindicate compatibility with the Java 2 SDK v1.2 version of class |
Constructors Summary |
---|
protected Activatable(String location, MarshalledObject data, boolean restart, int port)Constructs an activatable remote object by registering
an activation descriptor (with the specified location, data, and
restart mode) for this object, and exporting the object with the
specified port.
Note: Using the Activatable
constructors that both register and export an activatable remote
object is strongly discouraged because the actions of registering
and exporting the remote object are not guaranteed to be
atomic. Instead, an application should register an activation
descriptor and export a remote object separately, so that exceptions
can be handled properly.
This method invokes the {@link
exportObject(Remote,String,MarshalledObject,boolean,port)
exportObject} method with this object, and the specified location,
data, restart mode, and port. Subsequent calls to {@link #getID}
will return the activation identifier returned from the call to
exportObject .
super();
id = exportObject(this, location, data, restart, port);
| protected Activatable(String location, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)Constructs an activatable remote object by registering
an activation descriptor (with the specified location, data, and
restart mode) for this object, and exporting the object with the
specified port, and specified client and server socket factories.
Note: Using the Activatable
constructors that both register and export an activatable remote
object is strongly discouraged because the actions of registering
and exporting the remote object are not guaranteed to be
atomic. Instead, an application should register an activation
descriptor and export a remote object separately, so that exceptions
can be handled properly.
This method invokes the {@link
exportObject(Remote,String,MarshalledObject,boolean,port,RMIClientSocketFactory,RMIServerSocketFactory)
exportObject} method with this object, and the specified location,
data, restart mode, port, and client and server socket factories.
Subsequent calls to {@link #getID} will return the activation
identifier returned from the call to exportObject .
super();
id = exportObject(this, location, data, restart, port, csf, ssf);
| protected Activatable(ActivationID id, int port)Constructor used to activate/export the object on a specified
port. An "activatable" remote object must have a constructor that
takes two arguments:
- the object's activation identifier (
ActivationID ), and
- the object's initialization data (a
MarshalledObject ).
A concrete subclass of this class must call this constructor when it is
activated via the two parameter constructor described above. As
a side-effect of construction, the remote object is "exported"
to the RMI runtime (on the specified port ) and is
available to accept incoming calls from clients.
super();
this.id = id;
exportObject(this, id, port);
| protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)Constructor used to activate/export the object on a specified
port. An "activatable" remote object must have a constructor that
takes two arguments:
- the object's activation identifier (
ActivationID ), and
- the object's initialization data (a
MarshalledObject ).
A concrete subclass of this class must call this constructor when it is
activated via the two parameter constructor described above. As
a side-effect of construction, the remote object is "exported"
to the RMI runtime (on the specified port ) and is
available to accept incoming calls from clients.
super();
this.id = id;
exportObject(this, id, port, csf, ssf);
|
Methods Summary |
---|
public static ActivationID | exportObject(java.rmi.Remote obj, java.lang.String location, java.rmi.MarshalledObject data, boolean restart, int port, java.rmi.server.RMIClientSocketFactory csf, java.rmi.server.RMIServerSocketFactory ssf)Registers an activation descriptor (with the specified location,
data, and restart mode) for the specified object, and exports that
object with the specified port, and the specified client and server
socket factories.
Note: Using this method (as well as the
Activatable constructors that both register and export
an activatable remote object) is strongly discouraged because the
actions of registering and exporting the remote object are
not guaranteed to be atomic. Instead, an application should
register an activation descriptor and export a remote object
separately, so that exceptions can be handled properly.
This method first registers an activation descriptor for the
specified object as follows. It obtains the activation system by
invoking the method {@link ActivationGroup#getSystem
ActivationGroup.getSystem}. This method then obtains an {@link
ActivationID} for the object by invoking the activation system's
{@link ActivationSystem#registerObject registerObject} method with
an {@link ActivationDesc} constructed with the specified object's
class name, and the specified location, data, and restart mode. If
an exception occurs obtaining the activation system or registering
the activation descriptor, that exception is thrown to the caller.
Next, this method exports the object by invoking the {@link
#exportObject(Remote,ActivationID,int,RMIClientSocketFactory,RMIServerSocketFactory)
exportObject} method with the specified remote object, the
activation identifier obtained from registration, the specified
port, and the specified client and server socket factories. If an
exception occurs exporting the object, this method attempts to
unregister the activation identifier (obtained from registration) by
invoking the activation system's {@link
ActivationSystem#unregisterObject unregisterObject} method with the
activation identifier. If an exception occurs unregistering the
identifier, that exception is ignored, and the original exception
that occurred exporting the object is thrown to the caller.
Finally, this method invokes the {@link
ActivationGroup#activeObject activeObject} method on the activation
group in this VM with the activation identifier and the specified
remote object, and returns the activation identifier to the caller.
ActivationDesc desc = new ActivationDesc(obj.getClass().getName(),
location, data, restart);
/*
* Register descriptor.
*/
ActivationSystem system = ActivationGroup.getSystem();
ActivationID id = system.registerObject(desc);
/*
* Export object.
*/
try {
exportObject(obj, id, port, csf, ssf);
} catch (RemoteException e) {
/*
* Attempt to unregister activation descriptor because export
* failed and register/export should be atomic (see 4323621).
*/
try {
system.unregisterObject(id);
} catch (Exception ex) {
}
/*
* Report original exception.
*/
throw e;
}
/*
* This call can't fail (it is a local call, and the only possible
* exception, thrown if the group is inactive, will not be thrown
* because the group is not inactive).
*/
ActivationGroup.currentGroup().activeObject(id, obj);
return id;
| public static java.rmi.Remote | exportObject(java.rmi.Remote obj, ActivationID id, int port)Export the activatable remote object to the RMI runtime to make
the object available to receive incoming calls. The object is
exported on an anonymous port, if port is zero.
During activation, this exportObject method should
be invoked explicitly by an "activatable" object, that does not
extend the Activatable class. There is no need for objects
that do extend the Activatable class to invoke this
method directly because the object is exported during construction.
return exportObject(obj, new ActivatableServerRef(id, port));
| public static java.rmi.Remote | exportObject(java.rmi.Remote obj, ActivationID id, int port, java.rmi.server.RMIClientSocketFactory csf, java.rmi.server.RMIServerSocketFactory ssf)Export the activatable remote object to the RMI runtime to make
the object available to receive incoming calls. The object is
exported on an anonymous port, if port is zero.
During activation, this exportObject method should
be invoked explicitly by an "activatable" object, that does not
extend the Activatable class. There is no need for objects
that do extend the Activatable class to invoke this
method directly because the object is exported during construction.
return exportObject(obj, new ActivatableServerRef(id, port, csf, ssf));
| private static java.rmi.Remote | exportObject(java.rmi.Remote obj, sun.rmi.server.ActivatableServerRef sref)Exports the specified object using the specified server ref.
// if obj extends Activatable, set its ref.
if (obj instanceof Activatable) {
((Activatable) obj).ref = sref;
}
return sref.exportObject(obj, null, false);
| public static ActivationID | exportObject(java.rmi.Remote obj, java.lang.String location, java.rmi.MarshalledObject data, boolean restart, int port)Registers an activation descriptor (with the specified location,
data, and restart mode) for the specified object, and exports that
object with the specified port.
Note: Using this method (as well as the
Activatable constructors that both register and export
an activatable remote object) is strongly discouraged because the
actions of registering and exporting the remote object are
not guaranteed to be atomic. Instead, an application should
register an activation descriptor and export a remote object
separately, so that exceptions can be handled properly.
This method invokes the {@link
exportObject(Remote,String,MarshalledObject,boolean,port,RMIClientSocketFactory,RMIServerSocketFactory)
exportObject} method with the specified object, location, data,
restart mode, and port, and null for both client and
server socket factories, and then returns the resulting activation
identifier.
return exportObject(obj, location, data, restart, port, null, null);
| protected ActivationID | getID()Returns the object's activation identifier. The method is
protected so that only subclasses can obtain an object's
identifier.
return id;
| public static boolean | inactive(ActivationID id)Informs the system that the object with the corresponding activation
id is currently inactive. If the object is currently
active, the object is "unexported" from the RMI runtime (only if
there are no pending or in-progress calls)
so the that it can no longer receive incoming calls. This call
informs this VM's ActivationGroup that the object is inactive,
that, in turn, informs its ActivationMonitor. If this call
completes successfully, a subsequent activate request to the activator
will cause the object to reactivate. The operation may still
succeed if the object is considered active but has already
unexported itself.
return ActivationGroup.currentGroup().inactiveObject(id);
| public static java.rmi.Remote | register(ActivationDesc desc)Register an object descriptor for an activatable remote
object so that is can be activated on demand.
// register object with activator.
ActivationID id =
ActivationGroup.getSystem().registerObject(desc);
return sun.rmi.server.ActivatableRef.getStub(desc, id);
| public static boolean | unexportObject(java.rmi.Remote obj, boolean force)Remove the remote object, obj, from the RMI runtime. If
successful, the object can no longer accept incoming RMI calls.
If the force parameter is true, the object is forcibly unexported
even if there are pending calls to the remote object or the
remote object still has calls in progress. If the force
parameter is false, the object is only unexported if there are
no pending or in progress calls to the object.
return sun.rmi.transport.ObjectTable.unexportObject(obj, force);
| public static void | unregister(ActivationID id)Revokes previous registration for the activation descriptor
associated with id . An object can no longer be
activated via that id .
ActivationGroup.getSystem().unregisterObject(id);
|
|