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");
           }
  
  
  

Reply via email to