/*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.rmi.activation;
import java.io.Serializable;
import java.rmi.MarshalledObject;
An activation descriptor contains the information necessary to
activate an object:
- the object's group identifier,
- the object's fully-qualified class name,
- the object's code location (the location of the class), a codebase URL
path,
- the object's restart "mode", and,
- a "marshalled" object that can contain object specific
initialization data.
A descriptor registered with the activation system can be used to
recreate/activate the object specified by the descriptor. The
MarshalledObject
in the object's descriptor is passed
as the second argument to the remote object's constructor for
object to use during reinitialization/activation.
Author: Ann Wollrath See Also: Since: 1.2
/**
* An activation descriptor contains the information necessary to
* activate an object: <ul>
* <li> the object's group identifier,
* <li> the object's fully-qualified class name,
* <li> the object's code location (the location of the class), a codebase URL
* path,
* <li> the object's restart "mode", and,
* <li> a "marshalled" object that can contain object specific
* initialization data. </ul>
*
* <p>A descriptor registered with the activation system can be used to
* recreate/activate the object specified by the descriptor. The
* <code>MarshalledObject</code> in the object's descriptor is passed
* as the second argument to the remote object's constructor for
* object to use during reinitialization/activation.
*
* @author Ann Wollrath
* @since 1.2
* @see java.rmi.activation.Activatable
*/
public final class ActivationDesc implements Serializable {
@serial the group's identifier
/**
* @serial the group's identifier
*/
private ActivationGroupID groupID;
@serial the object's class name
/**
* @serial the object's class name
*/
private String className;
@serial the object's code location
/**
* @serial the object's code location
*/
private String location;
@serial the object's initialization data
/**
* @serial the object's initialization data
*/
private MarshalledObject<?> data;
@serial indicates whether the object should be restarted
/**
* @serial indicates whether the object should be restarted
*/
private boolean restart;
indicate compatibility with the Java 2 SDK v1.2 version of class /** indicate compatibility with the Java 2 SDK v1.2 version of class */
private static final long serialVersionUID = 7455834104417690957L;
Constructs an object descriptor for an object whose class name
is className
, that can be loaded from the
code location
and whose initialization
information is data
. If this form of the constructor
is used, the groupID
defaults to the current id for
ActivationGroup
for this VM. All objects with the
same ActivationGroupID
are activated in the same VM.
Note that objects specified by a descriptor created with this
constructor will only be activated on demand (by default, the restart
mode is false
). If an activatable object requires restart
services, use one of the ActivationDesc
constructors that
takes a boolean parameter, restart
.
This constructor will throw ActivationException
if
there is no current activation group for this VM. To create an
ActivationGroup
use the
ActivationGroup.createGroup
method.
Params: - className – the object's fully package qualified class name
- location – the object's code location (from where the class is
loaded)
- data – the object's initialization (activation) data contained
in marshalled form.
Throws: - ActivationException – if the current group is nonexistent
- UnsupportedOperationException – if and only if activation is
not supported by this implementation
Since: 1.2
/**
* Constructs an object descriptor for an object whose class name
* is <code>className</code>, that can be loaded from the
* code <code>location</code> and whose initialization
* information is <code>data</code>. If this form of the constructor
* is used, the <code>groupID</code> defaults to the current id for
* <code>ActivationGroup</code> for this VM. All objects with the
* same <code>ActivationGroupID</code> are activated in the same VM.
*
* <p>Note that objects specified by a descriptor created with this
* constructor will only be activated on demand (by default, the restart
* mode is <code>false</code>). If an activatable object requires restart
* services, use one of the <code>ActivationDesc</code> constructors that
* takes a boolean parameter, <code>restart</code>.
*
* <p> This constructor will throw <code>ActivationException</code> if
* there is no current activation group for this VM. To create an
* <code>ActivationGroup</code> use the
* <code>ActivationGroup.createGroup</code> method.
*
* @param className the object's fully package qualified class name
* @param location the object's code location (from where the class is
* loaded)
* @param data the object's initialization (activation) data contained
* in marshalled form.
* @exception ActivationException if the current group is nonexistent
* @exception UnsupportedOperationException if and only if activation is
* not supported by this implementation
* @since 1.2
*/
public ActivationDesc(String className,
String location,
MarshalledObject<?> data)
throws ActivationException
{
this(ActivationGroup.internalCurrentGroupID(),
className, location, data, false);
}
Constructs an object descriptor for an object whose class name
is className
, that can be loaded from the
code location
and whose initialization
information is data
. If this form of the constructor
is used, the groupID
defaults to the current id for
ActivationGroup
for this VM. All objects with the
same ActivationGroupID
are activated in the same VM.
This constructor will throw ActivationException
if
there is no current activation group for this VM. To create an
ActivationGroup
use the
ActivationGroup.createGroup
method.
Params: - className – the object's fully package qualified class name
- location – the object's code location (from where the class is
loaded)
- data – the object's initialization (activation) data contained
in marshalled form.
- restart – if true, the object is restarted (reactivated) when
either the activator is restarted or the object's activation group
is restarted after an unexpected crash; if false, the object is only
activated on demand. Specifying
restart
to be
true
does not force an initial immediate activation of
a newly registered object; initial activation is lazy.
Throws: - ActivationException – if the current group is nonexistent
- UnsupportedOperationException – if and only if activation is
not supported by this implementation
Since: 1.2
/**
* Constructs an object descriptor for an object whose class name
* is <code>className</code>, that can be loaded from the
* code <code>location</code> and whose initialization
* information is <code>data</code>. If this form of the constructor
* is used, the <code>groupID</code> defaults to the current id for
* <code>ActivationGroup</code> for this VM. All objects with the
* same <code>ActivationGroupID</code> are activated in the same VM.
*
* <p>This constructor will throw <code>ActivationException</code> if
* there is no current activation group for this VM. To create an
* <code>ActivationGroup</code> use the
* <code>ActivationGroup.createGroup</code> method.
*
* @param className the object's fully package qualified class name
* @param location the object's code location (from where the class is
* loaded)
* @param data the object's initialization (activation) data contained
* in marshalled form.
* @param restart if true, the object is restarted (reactivated) when
* either the activator is restarted or the object's activation group
* is restarted after an unexpected crash; if false, the object is only
* activated on demand. Specifying <code>restart</code> to be
* <code>true</code> does not force an initial immediate activation of
* a newly registered object; initial activation is lazy.
* @exception ActivationException if the current group is nonexistent
* @exception UnsupportedOperationException if and only if activation is
* not supported by this implementation
* @since 1.2
*/
public ActivationDesc(String className,
String location,
MarshalledObject<?> data,
boolean restart)
throws ActivationException
{
this(ActivationGroup.internalCurrentGroupID(),
className, location, data, restart);
}
Constructs an object descriptor for an object whose class name
is className
that can be loaded from the
code location
and whose initialization
information is data
. All objects with the same
groupID
are activated in the same Java VM.
Note that objects specified by a descriptor created with this
constructor will only be activated on demand (by default, the restart
mode is false
). If an activatable object requires restart
services, use one of the ActivationDesc
constructors that
takes a boolean parameter, restart
.
Params: - groupID – the group's identifier (obtained from registering
ActivationSystem.registerGroup
method). The group
indicates the VM in which the object should be activated. - className – the object's fully package-qualified class name
- location – the object's code location (from where the class is
loaded)
- data – the object's initialization (activation) data contained
in marshalled form.
Throws: - IllegalArgumentException – if
groupID
is null - UnsupportedOperationException – if and only if activation is
not supported by this implementation
Since: 1.2
/**
* Constructs an object descriptor for an object whose class name
* is <code>className</code> that can be loaded from the
* code <code>location</code> and whose initialization
* information is <code>data</code>. All objects with the same
* <code>groupID</code> are activated in the same Java VM.
*
* <p>Note that objects specified by a descriptor created with this
* constructor will only be activated on demand (by default, the restart
* mode is <code>false</code>). If an activatable object requires restart
* services, use one of the <code>ActivationDesc</code> constructors that
* takes a boolean parameter, <code>restart</code>.
*
* @param groupID the group's identifier (obtained from registering
* <code>ActivationSystem.registerGroup</code> method). The group
* indicates the VM in which the object should be activated.
* @param className the object's fully package-qualified class name
* @param location the object's code location (from where the class is
* loaded)
* @param data the object's initialization (activation) data contained
* in marshalled form.
* @exception IllegalArgumentException if <code>groupID</code> is null
* @exception UnsupportedOperationException if and only if activation is
* not supported by this implementation
* @since 1.2
*/
public ActivationDesc(ActivationGroupID groupID,
String className,
String location,
MarshalledObject<?> data)
{
this(groupID, className, location, data, false);
}
Constructs an object descriptor for an object whose class name
is className
that can be loaded from the
code location
and whose initialization
information is data
. All objects with the same
groupID
are activated in the same Java VM.
Params: - groupID – the group's identifier (obtained from registering
ActivationSystem.registerGroup
method). The group
indicates the VM in which the object should be activated. - className – the object's fully package-qualified class name
- location – the object's code location (from where the class is
loaded)
- data – the object's initialization (activation) data contained
in marshalled form.
- restart – if true, the object is restarted (reactivated) when
either the activator is restarted or the object's activation group
is restarted after an unexpected crash; if false, the object is only
activated on demand. Specifying
restart
to be
true
does not force an initial immediate activation of
a newly registered object; initial activation is lazy.
Throws: - IllegalArgumentException – if
groupID
is null - UnsupportedOperationException – if and only if activation is
not supported by this implementation
Since: 1.2
/**
* Constructs an object descriptor for an object whose class name
* is <code>className</code> that can be loaded from the
* code <code>location</code> and whose initialization
* information is <code>data</code>. All objects with the same
* <code>groupID</code> are activated in the same Java VM.
*
* @param groupID the group's identifier (obtained from registering
* <code>ActivationSystem.registerGroup</code> method). The group
* indicates the VM in which the object should be activated.
* @param className the object's fully package-qualified class name
* @param location the object's code location (from where the class is
* loaded)
* @param data the object's initialization (activation) data contained
* in marshalled form.
* @param restart if true, the object is restarted (reactivated) when
* either the activator is restarted or the object's activation group
* is restarted after an unexpected crash; if false, the object is only
* activated on demand. Specifying <code>restart</code> to be
* <code>true</code> does not force an initial immediate activation of
* a newly registered object; initial activation is lazy.
* @exception IllegalArgumentException if <code>groupID</code> is null
* @exception UnsupportedOperationException if and only if activation is
* not supported by this implementation
* @since 1.2
*/
public ActivationDesc(ActivationGroupID groupID,
String className,
String location,
MarshalledObject<?> data,
boolean restart)
{
if (groupID == null)
throw new IllegalArgumentException("groupID can't be null");
this.groupID = groupID;
this.className = className;
this.location = location;
this.data = data;
this.restart = restart;
}
Returns the group identifier for the object specified by this
descriptor. A group provides a way to aggregate objects into a
single Java virtual machine. RMI creates/activates objects with
the same groupID
in the same virtual machine.
Returns: the group identifier Since: 1.2
/**
* Returns the group identifier for the object specified by this
* descriptor. A group provides a way to aggregate objects into a
* single Java virtual machine. RMI creates/activates objects with
* the same <code>groupID</code> in the same virtual machine.
*
* @return the group identifier
* @since 1.2
*/
public ActivationGroupID getGroupID() {
return groupID;
}
Returns the class name for the object specified by this
descriptor.
Returns: the class name Since: 1.2
/**
* Returns the class name for the object specified by this
* descriptor.
* @return the class name
* @since 1.2
*/
public String getClassName() {
return className;
}
Returns the code location for the object specified by
this descriptor.
Returns: the code location Since: 1.2
/**
* Returns the code location for the object specified by
* this descriptor.
* @return the code location
* @since 1.2
*/
public String getLocation() {
return location;
}
Returns a "marshalled object" containing intialization/activation
data for the object specified by this descriptor.
Returns: the object specific "initialization" data Since: 1.2
/**
* Returns a "marshalled object" containing intialization/activation
* data for the object specified by this descriptor.
* @return the object specific "initialization" data
* @since 1.2
*/
public MarshalledObject<?> getData() {
return data;
}
Returns the "restart" mode of the object associated with
this activation descriptor.
Returns: true if the activatable object associated with this
activation descriptor is restarted via the activation
daemon when either the daemon comes up or the object's group
is restarted after an unexpected crash; otherwise it returns false,
meaning that the object is only activated on demand via a
method call. Note that if the restart mode is true
, the
activator does not force an initial immediate activation of
a newly registered object; initial activation is lazy. Since: 1.2
/**
* Returns the "restart" mode of the object associated with
* this activation descriptor.
*
* @return true if the activatable object associated with this
* activation descriptor is restarted via the activation
* daemon when either the daemon comes up or the object's group
* is restarted after an unexpected crash; otherwise it returns false,
* meaning that the object is only activated on demand via a
* method call. Note that if the restart mode is <code>true</code>, the
* activator does not force an initial immediate activation of
* a newly registered object; initial activation is lazy.
* @since 1.2
*/
public boolean getRestartMode() {
return restart;
}
Compares two activation descriptors for content equality.
Params: - obj – the Object to compare with
See Also: Returns: true if these Objects are equal; false otherwise. Since: 1.2
/**
* Compares two activation descriptors for content equality.
*
* @param obj the Object to compare with
* @return true if these Objects are equal; false otherwise.
* @see java.util.Hashtable
* @since 1.2
*/
public boolean equals(Object obj) {
if (obj instanceof ActivationDesc) {
ActivationDesc desc = (ActivationDesc) obj;
return
((groupID == null ? desc.groupID == null :
groupID.equals(desc.groupID)) &&
(className == null ? desc.className == null :
className.equals(desc.className)) &&
(location == null ? desc.location == null:
location.equals(desc.location)) &&
(data == null ? desc.data == null :
data.equals(desc.data)) &&
(restart == desc.restart));
} else {
return false;
}
}
Return the same hashCode for similar ActivationDesc
s.
See Also: Returns: an integer
/**
* Return the same hashCode for similar <code>ActivationDesc</code>s.
* @return an integer
* @see java.util.Hashtable
*/
public int hashCode() {
return ((location == null
? 0
: location.hashCode() << 24) ^
(groupID == null
? 0
: groupID.hashCode() << 16) ^
(className == null
? 0
: className.hashCode() << 9) ^
(data == null
? 0
: data.hashCode() << 1) ^
(restart
? 1
: 0));
}
}