adc 2004/02/04 16:41:30
Modified: modules/kernel/src/java/org/apache/geronimo/kernel Kernel.java Log: Added constructors for times when people won't want to lookup the Kernel by a name. Revision Changes Path 1.14 +43 -5 incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java Index: Kernel.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- Kernel.java 4 Feb 2004 05:42:57 -0000 1.13 +++ Kernel.java 5 Feb 2004 00:41:30 -0000 1.14 @@ -73,6 +73,7 @@ import java.io.File; import java.io.IOException; import java.io.Serializable; +import java.lang.ref.WeakReference; import java.net.URI; import java.net.URL; import java.util.Hashtable; @@ -88,6 +89,7 @@ import org.apache.geronimo.kernel.config.NoSuchConfigException; import org.apache.geronimo.kernel.jmx.JMXUtil; + /** * The core of a Geronimo instance. * A Kernel is responsible for managing the Configurations that comprise a @@ -151,7 +153,22 @@ this.storeInfo = storeInfo; this.configStore = configStore; - kernels.put(kernelName, this); + kernels.put(kernelName, new WeakReference(this)); + } + + /** + * Construct a Kernel using the specified JMX domain and supply the + * information needed to create the ConfigurationStore. + * @param domainName the domain name to be used for the JMX MBeanServer + * @param storeInfo the info for the GBeanMBean to be used for the ConfigurationStore + * @param configStore a local directory to be used by the ConfigurationStore; + * this must be present and writable when the kernel is booted + */ + public Kernel(String domainName, GBeanInfo storeInfo, File configStore) { + this.kernelName = null; + this.domainName = domainName; + this.storeInfo = storeInfo; + this.configStore = configStore; } /** @@ -164,6 +181,14 @@ } /** + * Construct a Kernel which does not have a config store. + * @param domainName the domain name to be used for the JMX MBeanServer + */ + public Kernel(String domainName) { + this(domainName, null, null); + } + + /** * Get the MBeanServer used by this kernel * @return the MBeanServer used by this kernel */ @@ -185,7 +210,15 @@ * @return the kernel that was registered with that name */ public static Kernel getKernel(String name) { - return (Kernel) kernels.get(name); + WeakReference reference = (WeakReference) kernels.get(name); + + if (reference == null) return null; + + Kernel result = (Kernel) reference.get(); + if (result == null) { + kernels.remove(name); + } + return result; } /** @@ -200,7 +233,12 @@ int size = kernels.size(); if (size > 1) throw new IllegalStateException("More than one kernel has been registered."); if (size < 1) return null; - return (Kernel) kernels.values().iterator().next(); + + Kernel result = (Kernel) ((WeakReference) kernels.values().iterator().next()).get(); + if (result == null) { + kernels.clear(); + } + return result; } public static ObjectName getConfigObjectName(URI configID) throws MalformedObjectNameException { @@ -213,7 +251,7 @@ * @throws java.io.IOException if the CAR could not be read * @throws org.apache.geronimo.kernel.config.InvalidConfigException if there is a configuration problem with the CAR */ - public void install(URL source) throws IOException, InvalidConfigException { + public void install(URL source) throws IOException, InvalidConfigException { if (store == null) { throw new UnsupportedOperationException("Kernel does not have a ConfigurationStore"); }