diff options
| author | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-03-13 16:33:14 +0000 |
|---|---|---|
| committer | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-03-13 16:33:14 +0000 |
| commit | 17c12cf0fb79e03f4c47ad5360d8490ea0143fcb (patch) | |
| tree | adf70343e377ca824524f28917e348f56a820bb8 /java/rmi | |
| parent | b71797e5182e8a8741e3a6e7d7fc530445d4fbb5 (diff) | |
| download | classpath-17c12cf0fb79e03f4c47ad5360d8490ea0143fcb.tar.gz | |
2006-03-13 Audrius Meskauskas <AudriusA@Bioinformatics.org>
* java/rmi/activation/ActivationGroupDesc.java: Implemented.
java/rmi/activation/ActivationDesc.java.java,
java/rmi/activation/ActivationGroup.java,
java/rmi/activation/ActivationID.java,
java/rmi/activation/ActivationMonitor.java,
java/rmi/activation/ActivationSystem.java,
java/rmi/activation/package.html: Documenting.
Diffstat (limited to 'java/rmi')
| -rw-r--r-- | java/rmi/activation/ActivationDesc.java | 2 | ||||
| -rw-r--r-- | java/rmi/activation/ActivationGroup.java | 4 | ||||
| -rw-r--r-- | java/rmi/activation/ActivationGroupDesc.java | 361 | ||||
| -rw-r--r-- | java/rmi/activation/ActivationID.java | 4 | ||||
| -rw-r--r-- | java/rmi/activation/ActivationMonitor.java | 42 | ||||
| -rw-r--r-- | java/rmi/activation/ActivationSystem.java | 2 | ||||
| -rw-r--r-- | java/rmi/activation/package.html | 2 |
7 files changed, 350 insertions, 67 deletions
diff --git a/java/rmi/activation/ActivationDesc.java b/java/rmi/activation/ActivationDesc.java index 07e119bfb..c36b54192 100644 --- a/java/rmi/activation/ActivationDesc.java +++ b/java/rmi/activation/ActivationDesc.java @@ -1,4 +1,4 @@ -/* ActivationDecc.java -- +/* ActivationDesc.java -- record with info to activate an object Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of GNU Classpath. diff --git a/java/rmi/activation/ActivationGroup.java b/java/rmi/activation/ActivationGroup.java index 34fad19e0..bb4c1582f 100644 --- a/java/rmi/activation/ActivationGroup.java +++ b/java/rmi/activation/ActivationGroup.java @@ -1,5 +1,5 @@ -/* ActivationGroup.java -- - Copyright (c) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. +/* ActivationGroup.java -- the RMI activation group. + Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. diff --git a/java/rmi/activation/ActivationGroupDesc.java b/java/rmi/activation/ActivationGroupDesc.java index ea8ca8f7f..4f308c6d2 100644 --- a/java/rmi/activation/ActivationGroupDesc.java +++ b/java/rmi/activation/ActivationGroupDesc.java @@ -41,7 +41,12 @@ package java.rmi.activation; import java.io.Serializable; import java.rmi.MarshalledObject; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.Iterator; import java.util.Properties; +import java.util.TreeSet; +import java.util.zip.Adler32; /** * Contains information, necessary to create of recreate the activation objects. @@ -57,15 +62,19 @@ import java.util.Properties; * expectes the group class to have the two parameter constructor, the first * parameter being the {@link ActivationGroupID} and the second the * {@link MarshalledObject}. + * + * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub) */ public final class ActivationGroupDesc implements Serializable { /** - * Use the SVUID for interoperability. + * Contains the startup options for the {@link ActivationGroup} + * implementations. Allows to override system properties and specify other + * options for the implementation groups. + * + * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub) */ - static final long serialVersionUID = - 4936225423168276595L; - public static class CommandEnvironment implements Serializable { @@ -74,108 +83,346 @@ public final class ActivationGroupDesc * Use the SVUID for interoperability. */ static final long serialVersionUID = 6165754737887770191L; + + /** + * The zero size string array used as argv value when null is passed. + */ + private static final String[] NO_ARGS = new String[0]; - private String cmdpath; - - private String[] argv; - + /** + * The path to the java executable (or null for using default jre). + */ + final String command; + + /** + * The extra parameters (may be empty array but never null). + */ + final String[] options; + + /** + * Create the new command environment. + * + * @param commandPatch the full path (and name) to the java executable of + * null for using the default executable. + * @param args extra options that will be used when creating the activation + * group. Null has the same effect as the empty list. + */ public CommandEnvironment(String commandPatch, String[] args) { - cmdpath = commandPatch; - argv = args; + command = commandPatch; + if (args != null) + options = args; + else + options = NO_ARGS; } - + + /** + * Get the path to the java executable. + * + * @return the path to the java executable or null for using the default + * jre. + */ public String getCommandPath() { - return cmdpath; + return command; } - + + /** + * Get the additional command options. + * + * @return the command options array, may be empty string + */ public String[] getCommandOptions() { - return argv; + return options; } - + + /** + * Compare for content equality. + */ public boolean equals(Object obj) { - if (! (obj instanceof CommandEnvironment)) + if (obj instanceof CommandEnvironment) { - return (false); - } - CommandEnvironment that = (CommandEnvironment) obj; + CommandEnvironment that = (CommandEnvironment) obj; - if (! this.cmdpath.equals(that.cmdpath)) - { - return (false); - } - - int len = this.argv.length; - if (len != that.argv.length) - { - return (false); - } - for (int i = 0; i < len; i++) - { - if (! this.argv[i].equals(that.argv[i])) + if (command == null || that.command == null) { - return (false); + // Use direct comparison if null is involved. + if (command != that.command) + return false; } + else + { + // Use .equals if null is not involved. + if (! this.command.equals(that.command)) + return false; + } + + return Arrays.equals(options, that.options); } - return (true); + else + return false; } + /** + * Get the hash code. + */ public int hashCode() { - return cmdpath.hashCode(); // Not a very good hash code. - } + int h = command == null ? 0 : command.hashCode(); + for (int i = 0; i < options.length; i++) + h ^= options[i].hashCode(); + return h; + } } - - public ActivationGroupDesc(Properties overrides, - ActivationGroupDesc.CommandEnvironment cmd) + + /** + * Use the SVUID for interoperability. + */ + static final long serialVersionUID = - 4936225423168276595L; + + /** + * The group class name or null for the default group class implementation. + */ + final String className; + + /** + * The group class download location URL (codebase), ignored by the + * default implementation. + */ + final String location; + + /** + * The group initialization data. + */ + final MarshalledObject data; + + /** + * The path to the group jre and the parameters of this jre, may be + * null for the default jre. + */ + final ActivationGroupDesc.CommandEnvironment env; + + /** + * The properties that override the system properties. + */ + final Properties props; + + /** + * The cached hash code. + */ + transient long hash; + + /** + * Create the new activation group descriptor. + * + * @param aProperties the properties that override the system properties + * @param environment the command line (and parameters), indicating, where to + * find the jre executable and with that parameters to call it. May + * be null if the default executable should be used. In this case, + * the activation group with the null name (the system default group) + * will be created. + */ + public ActivationGroupDesc(Properties aProperties, + ActivationGroupDesc.CommandEnvironment environment) { - throw new Error("Not implemented"); + this(null, null, null, aProperties, environment); } - - public ActivationGroupDesc(String className, String location, - MarshalledObject data, Properties overrides, - ActivationGroupDesc.CommandEnvironment cmd) + + /** + * Create the new activation group descriptor. + * + * @param aClassName the name of the group implementation class. The null + * value indicates the default implementation. + * @param aLocation the location, from where the group implementation class + * should be loaded (ignored for the system default implementation). + * @param aData the group intialization data + * @param aProperties the properties that will override the system properties + * of the new group. These properties will be translated into -D + * options. + * @param environment the record, containing path to the jre executable and + * start options for the jre or null for using the default jre and + * options. + */ + public ActivationGroupDesc(String aClassName, String aLocation, + MarshalledObject aData, Properties aProperties, + ActivationGroupDesc.CommandEnvironment environment) { - throw new Error("Not implemented"); + className = aClassName; + location = aLocation; + data = aData; + props = aProperties; + env = environment; } - + + /** + * Get the activation group class name. + * + * @return the activation group class name (null for default implementation) + */ public String getClassName() { - throw new Error("Not implemented"); + return className; } - + + /** + * Get the location, from where the group class will be loaded + * + * @return the location, from where the implementation should be loaded (null + * for the default implementation) + */ public String getLocation() { - throw new Error("Not implemented"); + return location; } - + + /** + * Get the group intialization data. + * + * @return the group intialization data in the marshalled form. + */ public MarshalledObject getData() { - throw new Error("Not implemented"); + return data; } + /** + * Get the overridded system properties. + * + * @return the overridden group system properties. + */ public Properties getPropertyOverrides() { - throw new Error("Not implemented"); + return props; } - + + /** + * Get the group command environment, containing path to the jre executable + * and startup options. + * + * @return the command environment or null if the default environment should + * be used. + */ public ActivationGroupDesc.CommandEnvironment getCommandEnvironment() { - throw new Error("Not implemented"); + return env; } - + + /** + * Compare for the content equality. + */ public boolean equals(Object obj) { - throw new Error("Not implemented"); - } + if (obj instanceof ActivationGroupDesc) + { + ActivationGroupDesc that = (ActivationGroupDesc) obj; + + // Ensure the hashcodes are computed. + if (hash == 0) + hashCode(); + if (that.hash == 0) + that.hashCode(); + + // We compare the hash fields as they are type long rather than int. + if (hash != that.hash) + return false; + + if (! eq(className, that.className)) + return false; + if (! eq(data, that.data)) + return false; + if (! eq(env, that.env)) + return false; + if (! eq(location, that.location)) + return false; + // Compare the properties. + if (eq(props, that.props)) + return true; + + if (props.size() != that.props.size()) + return false; + + Enumeration en = props.propertyNames(); + Object key, value; + + while (en.hasMoreElements()) + { + key = en.nextElement(); + if (! that.props.containsKey(key)) + return false; + if (! eq(props.get(key), that.props.get(key))) + return false; + } + return true; + } + else + return false; + } + + /** + * Compare for direct equality if one or both parameters are null, otherwise + * call .equals. + */ + static boolean eq(Object a, Object b) + { + if (a == null || b == null) + return a == b; + else + return a.equals(b); + } + + /** + * Return the hashcode. + */ public int hashCode() { - throw new Error("Not implemented"); + if (hash==0) + { + // Using Adler32 - the hashcode is cached, will be computed only + // once and due need to scan properties is the expensive operation + // anyway. Reliability is more important. + Adler32 adler = new Adler32(); + if (className!=null) + adler.update(className.getBytes()); + if (data!=null) + adler.update(data.hashCode()); + if (env!=null) + adler.update(env.hashCode()); + if (location!=null) + adler.update(location.getBytes()); + if (props!=null) + { + Enumeration en = props.propertyNames(); + + // Using the intermediate sorted set to ensure that the + // properties are sorted. + TreeSet pr = new TreeSet(); + + Object key; + Object value; + while (en.hasMoreElements()) + { + key = en.nextElement(); + if (key!=null) + pr.add(key); + } + + Iterator it = pr.iterator(); + while (it.hasNext()) + { + key = it.next(); + value = props.get(key); + adler.update(key.hashCode()); + if (value!=null) + adler.update(value.hashCode()); + } + } + hash = adler.getValue(); + } + return (int) hash; } } diff --git a/java/rmi/activation/ActivationID.java b/java/rmi/activation/ActivationID.java index 52ef15fab..458b3c091 100644 --- a/java/rmi/activation/ActivationID.java +++ b/java/rmi/activation/ActivationID.java @@ -1,4 +1,4 @@ -/* ActivationID.java -- +/* ActivationID.java -- the object activation identifier Copyright (c) 1996, 1997, 1998, 1999, 2006 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -57,6 +57,8 @@ import java.rmi.server.UID; * </ul> * An instance of the ActivationID has the {@link UID} as its component and * hence is globally unique. + * + * @author Audrius Meskauskas (audriusa@bioinformatics.org) (from stub) */ public class ActivationID implements Serializable diff --git a/java/rmi/activation/ActivationMonitor.java b/java/rmi/activation/ActivationMonitor.java index 1e64257ed..e9f43ae1a 100644 --- a/java/rmi/activation/ActivationMonitor.java +++ b/java/rmi/activation/ActivationMonitor.java @@ -1,5 +1,6 @@ -/* ActivationMonitor.java -- - Copyright (c) 1996, 1997, 1998, 1999, 2004 Free Software Foundation, Inc. +/* ActivationMonitor.java -- the RMI activation/inactivation event listener + Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -42,14 +43,45 @@ import java.rmi.MarshalledObject; import java.rmi.Remote; import java.rmi.RemoteException; +/** + * The activation and inactivation event listener. The group obtains this + * listener via {@link ActivationSystem#activeGroup} and must notify it + * when the group objects are activated or inactivated and also when the + * whole group becomes inactive. + * @author root. + */ public interface ActivationMonitor extends Remote { - void inactiveObject (ActivationID id) + /** + * Informs that the object is now active. + * + * @param id the activation id of the object that is now active + * @throws UnknownObjectException is such object is not known in this group + * @throws RemoteException if remote call fails + */ + void activeObject (ActivationID id, MarshalledObject obj) throws UnknownObjectException, RemoteException; - void activeObject (ActivationID id, MarshalledObject obj) + /** + * Informs that the object is not inactive. + * + * @param id the activation id of the object that is now inactive + * @throws UnknownObjectException is such object is not known in this group + * @throws RemoteException if remote call fails + */ + void inactiveObject (ActivationID id) throws UnknownObjectException, RemoteException; - void inactiveGroup (ActivationGroupID id, long incarnation) + /** + * Informs that the whole group is now inactive because all group objects are + * inactive. The group will be recreated upon the later request to activate + * any object, belonging to the group. + * + * @param groupId the group id + * @param incarnation the group incarnation number + * @throws UnknownGroupException if the group id is not known + * @throws RemoteException if the remote call fails + */ + void inactiveGroup (ActivationGroupID groupId, long incarnation) throws UnknownGroupException, RemoteException; } diff --git a/java/rmi/activation/ActivationSystem.java b/java/rmi/activation/ActivationSystem.java index 67d03ba97..c46ac755c 100644 --- a/java/rmi/activation/ActivationSystem.java +++ b/java/rmi/activation/ActivationSystem.java @@ -1,4 +1,4 @@ -/* ActivationSystem.java -- Registers groups and objects to be activated. +/* ActivationSystem.java -- registers groups and objects to be activated. Copyright (c) 1996, 1997, 1998, 1999, 2004, 2006 Free Software Foundation, Inc. diff --git a/java/rmi/activation/package.html b/java/rmi/activation/package.html index 24e02f88b..161e820ce 100644 --- a/java/rmi/activation/package.html +++ b/java/rmi/activation/package.html @@ -62,5 +62,7 @@ this special constructor. The remote object implementation may use the activation data to initialize itself in a needed manner. The remote object may also retain its activation identifier, so that it can inform the activation group when it becomes inactive (via a call to the Activatable.inactive method). + +@author Audrius Meskauskas (audriusa@bioinformatics.org) (from empty) </body> </html> |
