You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jb...@apache.org on 2003/09/03 18:02:06 UTC

cvs commit: incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/j2ee JNDIEnvironmentRefs.java

jboynes     2003/09/03 09:02:06

  Modified:    modules/core/src/java/org/apache/geronimo/client
                        AppClientContainer.java Launcher.java
                        MainInvokerInterceptor.java
               modules/core/src/java/org/apache/geronimo/deployment/model/appclient
                        ApplicationClient.java
  Added:       modules/core/src/java/org/apache/geronimo/naming/java
                        ComponentContextBuilder.java
               modules/core/src/test/org/apache/geronimo/naming/java
                        ContextBuilderTest.java
               modules/core/src/java/org/apache/geronimo/deployment/model/j2ee
                        JNDIEnvironmentRefs.java
  Log:
  Add component JNDI context support for Application Clients
  Only env-entry values are supported at this time
  
  Revision  Changes    Path
  1.3       +19 -2     incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/AppClientContainer.java
  
  Index: AppClientContainer.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/AppClientContainer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AppClientContainer.java	1 Sep 2003 20:38:48 -0000	1.2
  +++ AppClientContainer.java	3 Sep 2003 16:02:05 -0000	1.3
  @@ -59,6 +59,8 @@
   import java.net.URL;
   import java.net.URLClassLoader;
   
  +import javax.naming.Context;
  +
   import org.apache.geronimo.common.AbstractRPCContainer;
   import org.apache.geronimo.deployment.DeploymentException;
   import org.apache.geronimo.naming.java.ComponentContextInterceptor;
  @@ -75,6 +77,7 @@
   
       private String mainClassName;
       private URL clientURL;
  +    private Context compContext;
   
       public AppClientContainer() throws DeploymentException {
       }
  @@ -107,6 +110,20 @@
           this.clientURL = clientURL;
       }
   
  +    /**
  +     * @jmx:managed-attribute
  +     */
  +    public Context getComponentContext() {
  +        return compContext;
  +    }
  +
  +    /**
  +     * @jmx:managed-attribute
  +     */
  +    public void setComponentContext(Context compContext) {
  +        this.compContext = compContext;
  +    }
  +
       protected void doStart() throws Exception {
           ClassLoader clientCL = new URLClassLoader(new URL[] { clientURL }, Thread.currentThread().getContextClassLoader());
           Method mainMethod;
  @@ -118,7 +135,7 @@
           } catch (NoSuchMethodException e) {
               throw new DeploymentException("Main-Class " + mainClassName + " does not have a main method", e);
           }
  -        addInterceptor(new ComponentContextInterceptor(null));
  +        addInterceptor(new ComponentContextInterceptor(compContext));
           addInterceptor(new MainInvokerInterceptor(mainMethod));
       }
   
  
  
  
  1.3       +78 -24    incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/Launcher.java
  
  Index: Launcher.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/Launcher.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Launcher.java	23 Aug 2003 22:14:20 -0000	1.2
  +++ Launcher.java	3 Sep 2003 16:02:05 -0000	1.3
  @@ -77,14 +77,21 @@
   import javax.management.ObjectName;
   import javax.management.ReflectionException;
   import javax.management.ServiceNotFoundException;
  +import javax.naming.Context;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   import org.apache.commons.logging.impl.LogFactoryImpl;
   import org.apache.geronimo.deployment.DeploymentException;
  +import org.apache.geronimo.deployment.model.appclient.ApplicationClient;
   import org.apache.geronimo.jmx.JMXKernel;
   import org.apache.geronimo.jmx.JMXUtil;
   import org.apache.geronimo.proxy.ProxyInvocation;
  +import org.apache.geronimo.naming.java.ComponentContextBuilder;
  +import org.apache.geronimo.xml.deployment.AppClientLoader;
  +import org.apache.geronimo.common.InvocationResult;
  +import org.apache.xerces.parsers.DOMParser;
  +import org.xml.sax.SAXException;
   
   /**
    * Launcher for J2EE Application Clients.
  @@ -95,7 +102,7 @@
       static {
           // Add our default Commons Logger that support the trace level
           if (System.getProperty(LogFactoryImpl.LOG_PROPERTY) == null) {
  -            System.setProperty(LogFactoryImpl.LOG_PROPERTY, "org.apache.geronimo.core.log.Log4jLog");
  +            System.setProperty(LogFactoryImpl.LOG_PROPERTY, "org.apache.geronimo.common.log.log4j.Log4jLog");
           }
       }
   
  @@ -106,16 +113,29 @@
       private JMXKernel kernel;
       private MBeanServer mbServer;
       private URL clientURL;
  +    private URL deploymentURL;
       private String[] appArgs;
       private ObjectName controllerName;
       private ObjectName clientName;
  +    private ShutdownThread shutdownHook;
   
       private Launcher(String[] args) throws IllegalArgumentException {
           parseCommandLine(args);
       }
   
       private void deploy() throws DeploymentException {
  -        Runtime.getRuntime().addShutdownHook(new ShutdownThread("Geronimo-Shutdown", this));
  +        shutdownHook = new ShutdownThread("Geronimo-Shutdown", this);
  +        Runtime.getRuntime().addShutdownHook(shutdownHook);
  +
  +        if (clientURL.toString().endsWith("/")) {
  +            deploymentURL = clientURL;
  +        } else {
  +            try {
  +                deploymentURL = new URL("jar:" + clientURL + "!/");
  +            } catch (MalformedURLException e) {
  +                throw new DeploymentException("Unable to create deploymentURL", e);
  +            }
  +        }
   
           kernel = new JMXKernel("Geronimo Client");
           mbServer = kernel.getMBeanServer();
  @@ -192,19 +212,42 @@
               throw new DeploymentException(e);
           }
   
  +        String mainClassName = getMainClassName();
  +        ApplicationClient appClient = loadAppClientDescriptor();
  +
  +        Context compContext = ComponentContextBuilder.buildContext(appClient);
  +
  +        try {
  +            AttributeList attrs = new AttributeList(2);
  +            attrs.add(new Attribute("MainClassName", mainClassName));
  +            attrs.add(new Attribute("ClientURL", clientURL));
  +            attrs.add(new Attribute("ComponentContext", compContext));
  +            AttributeList setAttrs = mbServer.setAttributes(clientName, attrs);
  +            assert (attrs.size() == setAttrs.size());
  +        } catch (Exception e) {
  +            throw new DeploymentException(e);
  +        }
  +
  +        try {
  +            mbServer.invoke(clientName, "start", null, null);
  +        } catch (Exception e) {
  +            throw new DeploymentException(e);
  +        }
  +    }
  +
  +    private String getMainClassName() throws DeploymentException {
           String mainClassName;
           try {
               Manifest manifest;
  -            if (clientURL.toString().endsWith("/")) {
  +            if ("jar".equals(deploymentURL.getProtocol())) {
  +                JarURLConnection jarConn = (JarURLConnection) deploymentURL.openConnection();
  +                manifest = jarConn.getManifest();
  +            } else {
                   // unpacked
  -                URL manifestURL = new URL(clientURL, "META-INF/MANIFEST.MF");
  +                URL manifestURL = new URL(deploymentURL, "META-INF/MANIFEST.MF");
                   InputStream is = manifestURL.openStream();
                   manifest = new Manifest(is);
                   is.close();
  -            } else {
  -                URL jarURL = new URL("jar:" + clientURL + "!/");
  -                JarURLConnection jarConn = (JarURLConnection) jarURL.openConnection();
  -                manifest = jarConn.getManifest();
               }
               Attributes attrs = manifest.getMainAttributes();
               mainClassName = (String) attrs.get(Attributes.Name.MAIN_CLASS);
  @@ -214,20 +257,18 @@
           } catch (IOException e) {
               throw new DeploymentException("Unable to get Main-Class from manifest for " + clientURL, e);
           }
  +        return mainClassName;
  +    }
   
  +    private ApplicationClient loadAppClientDescriptor() throws DeploymentException {
           try {
  -            AttributeList attrs = new AttributeList(2);
  -            attrs.add(new Attribute("MainClassName", mainClassName));
  -            attrs.add(new Attribute("ClientURL", clientURL));
  -            mbServer.setAttributes(clientName, attrs);
  -        } catch (Exception e) {
  -            throw new DeploymentException(e);
  -        }
  -
  -        try {
  -            mbServer.invoke(clientName, "start", null, null);
  +            URL appClientURL = new URL(deploymentURL, "META-INF/application-client.xml");
  +            DOMParser parser = new DOMParser();
  +            parser.parse(appClientURL.toString());
  +            AppClientLoader loader = new AppClientLoader();
  +            return loader.load(parser.getDocument());
           } catch (Exception e) {
  -            throw new DeploymentException(e);
  +            throw new DeploymentException("Unable to load application-client.xml", e);
           }
       }
   
  @@ -253,13 +294,19 @@
               }
               kernel.release();
           }
  +        try {
  +            Runtime.getRuntime().removeShutdownHook(shutdownHook);
  +        } catch (Exception e) {
  +            // ignore
  +        }
       }
   
  -    public void run() {
  +    public void run() throws Exception {
  +        InvocationResult result;
           try {
               ProxyInvocation invocation = new ProxyInvocation();
               ProxyInvocation.putArguments(invocation, new Object[] { appArgs });
  -            mbServer.invoke(clientName, "invoke", new Object[]{invocation}, new String[]{"org.apache.geronimo.common.Invocation"});
  +            result = (InvocationResult) mbServer.invoke(clientName, "invoke", new Object[]{invocation}, new String[]{"org.apache.geronimo.common.Invocation"});
           } catch (InstanceNotFoundException e) {
               IllegalStateException ex = new IllegalStateException("Unable to invoke app client");
               ex.initCause(e);
  @@ -272,9 +319,12 @@
               ex.initCause(e);
               throw ex;
           }
  +        if (result.isException()) {
  +            throw result.getException();
  +        }
       }
   
  -    public static void main(String[] args) {
  +    public static void main(String[] args) throws Exception {
           Launcher launcher;
           try {
               launcher = new Launcher(args);
  @@ -292,7 +342,11 @@
               return;
           }
   
  -        launcher.run();
  +        try {
  +            launcher.run();
  +        } finally {
  +            launcher.undeploy();
  +        }
       }
   
       private void parseCommandLine(String[] args) throws IllegalArgumentException {
  
  
  
  1.3       +2 -3      incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/MainInvokerInterceptor.java
  
  Index: MainInvokerInterceptor.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/client/MainInvokerInterceptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MainInvokerInterceptor.java	26 Aug 2003 22:11:23 -0000	1.2
  +++ MainInvokerInterceptor.java	3 Sep 2003 16:02:05 -0000	1.3
  @@ -80,7 +80,7 @@
           assert (mainMethod.equals(ProxyInvocation.getMethod(invocation)));
           Object[] args = ProxyInvocation.getArguments(invocation);
           try {
  -            mainMethod.invoke(null, args);
  +            return new SimpleInvocationResult(mainMethod.invoke(null, args));
           } catch (InvocationTargetException e) {
               Throwable cause = e.getCause();
               if (cause instanceof Exception && cause instanceof RuntimeException == false) {
  @@ -88,6 +88,5 @@
               }
               throw cause;
           }
  -        return new SimpleInvocationResult(null);
       }
   }
  
  
  
  1.2       +8 -2      incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/appclient/ApplicationClient.java
  
  Index: ApplicationClient.java
  ===================================================================
  RCS file: /home/cvs/incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/appclient/ApplicationClient.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ApplicationClient.java	1 Sep 2003 22:12:17 -0000	1.1
  +++ ApplicationClient.java	3 Sep 2003 16:02:05 -0000	1.2
  @@ -63,13 +63,15 @@
   import org.apache.geronimo.deployment.model.j2ee.ResourceEnvRef;
   import org.apache.geronimo.deployment.model.j2ee.ResourceRef;
   import org.apache.geronimo.deployment.model.j2ee.ServiceRef;
  +import org.apache.geronimo.deployment.model.j2ee.JNDIEnvironmentRefs;
  +import org.apache.geronimo.deployment.model.j2ee.EJBLocalRef;
   
   /**
    *
    *
    * @version $Revision$ $Date$
    */
  -public class ApplicationClient extends Displayable {
  +public class ApplicationClient extends Displayable implements JNDIEnvironmentRefs {
       private String version;
       private EnvEntry[] envEntry;
       private EJBRef[] ejbRef;
  @@ -102,6 +104,10 @@
   
       public void setEJBRef(EJBRef[] ejbRef) {
           this.ejbRef = ejbRef;
  +    }
  +
  +    public EJBLocalRef[] getEJBLocalRef() {
  +        return new EJBLocalRef[0];
       }
   
       public EnvEntry[] getEnvEntry() {
  
  
  
  1.1                  incubator-geronimo/modules/core/src/java/org/apache/geronimo/naming/java/ComponentContextBuilder.java
  
  Index: ComponentContextBuilder.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  package org.apache.geronimo.naming.java;
  
  import java.util.HashMap;
  import java.util.Map;
  import javax.naming.Context;
  
  import org.apache.geronimo.deployment.DeploymentException;
  import org.apache.geronimo.deployment.model.j2ee.EnvEntry;
  import org.apache.geronimo.deployment.model.j2ee.JNDIEnvironmentRefs;
  
  /**
   * 
   * 
   * @version $Revision: 1.1 $ $Date: 2003/09/03 16:02:05 $
   */
  public class ComponentContextBuilder {
      /**
       * Build a component context from definitions contained in POJOs read from
       * a deployment descriptor.
       * @param refs the source reference definitions
       * @return a Context that can be bound to java:comp
       */
      public static Context buildContext(JNDIEnvironmentRefs refs) throws DeploymentException {
          Map envMap = new HashMap();
          buildEnvEntries(envMap, refs.getEnvEntry());
  
          Map compMap = new HashMap();
          compMap.put("env", new ReadOnlyContext(envMap));
          return new ReadOnlyContext(compMap);
      }
  
      private static void buildEnvEntries(Map envMap, EnvEntry[] envEntries) throws DeploymentException {
          for (int i=0; i < envEntries.length; i++) {
              EnvEntry entry = envEntries[i];
              String name = entry.getEnvEntryName();
              String type = entry.getEnvEntryType();
              String value = entry.getEnvEntryValue();
              Object mapEntry;
              try {
                  if (value == null) {
                      mapEntry = null;
                  } else if ("java.lang.String".equals(type)) {
                      mapEntry = value;
                  } else if ("java.lang.Character".equals(type)) {
                      mapEntry = new Character(value.charAt(0));
                  } else if ("java.lang.Boolean".equals(type)) {
                      mapEntry = Boolean.valueOf(value);
                  } else if ("java.lang.Byte".equals(type)) {
                      mapEntry = Byte.valueOf(value);
                  } else if ("java.lang.Short".equals(type)) {
                      mapEntry = Short.valueOf(value);
                  } else if ("java.lang.Integer".equals(type)) {
                      mapEntry = Integer.valueOf(value);
                  } else if ("java.lang.Long".equals(type)) {
                      mapEntry = Long.valueOf(value);
                  } else if ("java.lang.Float".equals(type)) {
                      mapEntry = Float.valueOf(value);
                  } else if ("java.lang.Double".equals(type)) {
                      mapEntry = Double.valueOf(value);
                  } else {
                      throw new AssertionError("Invalid class for env-entry "+name+", "+type);
                  }
              } catch (NumberFormatException e) {
                  throw new DeploymentException("Invalid numeric value for env-entry "+name+", value="+value);
              }
              if (envMap.put(name, mapEntry) != null) {
                  throw new AssertionError("Duplicate entry for env-entry "+name);
              }
          }
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/core/src/test/org/apache/geronimo/naming/java/ContextBuilderTest.java
  
  Index: ContextBuilderTest.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  package org.apache.geronimo.naming.java;
  
  import javax.naming.Context;
  
  import junit.framework.TestCase;
  import org.apache.geronimo.deployment.model.appclient.ApplicationClient;
  import org.apache.geronimo.deployment.model.j2ee.EnvEntry;
  
  /**
   * 
   * 
   * @version $Revision: 1.1 $ $Date: 2003/09/03 16:02:06 $
   */
  public class ContextBuilderTest extends TestCase {
      private ApplicationClient client;
  
      protected void setUp() throws Exception {
          client = new ApplicationClient();
          EnvEntry stringEntry = new EnvEntry();
          stringEntry.setEnvEntryName("string");
          stringEntry.setEnvEntryType("java.lang.String");
          stringEntry.setEnvEntryValue("Hello World");
          EnvEntry intEntry = new EnvEntry();
          intEntry.setEnvEntryName("int");
          intEntry.setEnvEntryType("java.lang.Integer");
          intEntry.setEnvEntryValue("12345");
          client.setEnvEntry(new EnvEntry[] { stringEntry, intEntry });
      }
  
      public void testEnvEntries() throws Exception {
          Context compCtx = ComponentContextBuilder.buildContext(client);
          assertEquals("Hello World", compCtx.lookup("env/string"));
          assertEquals(new Integer(12345), compCtx.lookup("env/int"));
      }
  }
  
  
  
  1.1                  incubator-geronimo/modules/core/src/java/org/apache/geronimo/deployment/model/j2ee/JNDIEnvironmentRefs.java
  
  Index: JNDIEnvironmentRefs.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Apache" and "Apache Software Foundation" and
   *    "Apache Geronimo" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    "Apache Geronimo", nor may "Apache" appear in their name, without
   *    prior written permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * ====================================================================
   */
  package org.apache.geronimo.deployment.model.j2ee;
  
  /**
   * Interface for accessing the objects for a components JNDI context.
   * 
   * @version $Revision: 1.1 $ $Date: 2003/09/03 16:02:06 $
   */
  public interface JNDIEnvironmentRefs {
      EnvEntry[] getEnvEntry();
  
      EJBRef[] getEJBRef();
  
      EJBLocalRef[] getEJBLocalRef();
  
      ServiceRef[] getServiceRef();
  
      ResourceRef[] getResourceRef();
  
      ResourceEnvRef[] getResourceEnvRef();
  
      MessageDestinationRef[] getMessageDestinationRef();
  }