You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2010/04/12 21:24:40 UTC

svn commit: r933374 - in /geronimo/server/trunk: framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ plugins/j2ee/geronim...

Author: gawor
Date: Mon Apr 12 19:24:39 2010
New Revision: 933374

URL: http://svn.apache.org/viewvc?rev=933374&view=rev
Log:
GERONIMO-5251: Support environment entires of type Class or Enum

Added:
    geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java   (with props)
    geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java   (with props)
Modified:
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ResourceAnnotationHelper.java
    geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/pom.xml
    geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java

Added: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java?rev=933374&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java (added)
+++ geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java Mon Apr 12 19:24:39 2010
@@ -0,0 +1,44 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.naming.reference;
+
+import javax.naming.NamingException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ClassReference extends SimpleAwareReference {
+
+    private String className;
+    
+    public ClassReference(String className) {
+        this.className = className;
+    }
+
+    @Override
+    public Object getContent() throws NamingException {
+        ClassLoader loader = getClassLoader();
+        try {
+            return loader.loadClass(className);
+        } catch (ClassNotFoundException e) {
+            NamingException ex = new NamingException("Unable to load class " + className);
+            ex.initCause(e);
+            throw ex;
+        }
+    }    
+        
+}

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/ClassReference.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java?rev=933374&view=auto
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java (added)
+++ geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java Mon Apr 12 19:24:39 2010
@@ -0,0 +1,39 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.naming.reference;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JndiReference extends SimpleAwareReference {
+
+    private String jndiName;
+    
+    public JndiReference(String jndiName) {
+        this.jndiName = jndiName;
+    }
+
+    @Override
+    public Object getContent() throws NamingException {
+        InitialContext ctx = new InitialContext();
+        return ctx.lookup(jndiName);
+    }    
+        
+}

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/server/trunk/framework/modules/geronimo-naming/src/main/java/org/apache/geronimo/naming/reference/JndiReference.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ResourceAnnotationHelper.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ResourceAnnotationHelper.java?rev=933374&r1=933373&r2=933374&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ResourceAnnotationHelper.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/annotation/ResourceAnnotationHelper.java Mon Apr 12 19:24:39 2010
@@ -179,7 +179,7 @@ public final class ResourceAnnotationHel
             return getName(annotation.name(), method, field);
         }
 
-        protected static String getResourceType(Resource annotation, Method method, Field field) {
+        protected static Class getResourceTypeClass(Resource annotation, Method method, Field field) {
             //------------------------------------------------------------------------------------------
             // Resource type:
             // -- When annotation is applied on a class:    Type must be provided (cannot be inferred)
@@ -188,16 +188,20 @@ public final class ResourceAnnotationHel
             // -- When annotation is applied on a field:    Type is the field type (or as provided on
             //                                              the annotation)
             //------------------------------------------------------------------------------------------
-            String resourceType = annotation.type().getCanonicalName();
-            if (resourceType.equals("") || resourceType.equals(Object.class.getName())) {
+            Class resourceType = annotation.type();
+            if (resourceType.equals(Object.class)) {
                 if (method != null) {
-                    resourceType = method.getParameterTypes()[0].getCanonicalName();
+                    resourceType = method.getParameterTypes()[0];
                 } else if (field != null) {
-                    resourceType = field.getType().getName();
+                    resourceType = field.getType();
                 }
             }
             return resourceType;
         }
+        
+        protected static String getResourceType(Resource annotation, Method method, Field field) {
+            return getResourceTypeClass(annotation, method, field).getCanonicalName();
+        }
     }
 
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/pom.xml?rev=933374&r1=933373&r2=933374&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/pom.xml (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/pom.xml Mon Apr 12 19:24:39 2010
@@ -58,6 +58,14 @@
             <artifactId>geronimo-jta_1.1_spec</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.geronimo.framework</groupId>
+            <artifactId>geronimo-kernel</artifactId>
+            <version>${version}</version>
+            <classifier>tests</classifier>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
     <build>

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java?rev=933374&r1=933373&r2=933374&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java Mon Apr 12 19:24:39 2010
@@ -35,6 +35,8 @@ import org.apache.geronimo.j2ee.deployme
 import org.apache.geronimo.j2ee.deployment.annotation.AnnotatedApp;
 import org.apache.geronimo.j2ee.deployment.annotation.ResourceAnnotationHelper;
 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.naming.reference.ClassReference;
+import org.apache.geronimo.naming.reference.JndiReference;
 import org.apache.geronimo.naming.reference.KernelReference;
 import org.apache.geronimo.xbeans.geronimo.naming.GerEnvEntryDocument;
 import org.apache.geronimo.xbeans.geronimo.naming.GerEnvEntryType;
@@ -46,6 +48,7 @@ import org.apache.geronimo.xbeans.javaee
 import org.apache.geronimo.xbeans.javaee6.XsdStringType;
 import org.apache.xmlbeans.QNameSet;
 import org.apache.xmlbeans.XmlObject;
+import org.osgi.framework.Bundle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -95,55 +98,80 @@ public class EnvironmentEntryBuilder ext
             }
         }
 
+        Bundle bundle = module.getEarContext().getDeploymentBundle();
         List<EnvEntryType> envEntriesUntyped = convert(specDD.selectChildren(envEntryQNameSet), JEE_CONVERTER, EnvEntryType.class, EnvEntryType.type);
         XmlObject[] gerEnvEntryUntyped = plan == null ? NO_REFS : plan.selectChildren(GER_ENV_ENTRY_QNAME_SET);
         Map<String, String> envEntryMap = mapEnvEntries(gerEnvEntryUntyped);
         for (EnvEntryType envEntry: envEntriesUntyped) {
             String name = getStringValue(envEntry.getEnvEntryName());
             String type = getStringValue(envEntry.getEnvEntryType());
-            String text = envEntryMap.remove(name);
-            if (text == null) {
-                text = getStringValue(envEntry.getEnvEntryValue());
-            }
+            
+            Class typeClass;
             try {
-                Object value;
-                if (text == null) {
+                typeClass = bundle.loadClass(type);
+            } catch (ClassNotFoundException e) {
+                throw new DeploymentException("Could not env-entry type class " + type, e);
+            }
+            
+            Object value = null;
+            
+            String strValue = envEntryMap.remove(name);
+            if (strValue == null) {
+                strValue = getStringValue(envEntry.getEnvEntryValue());
+                if (strValue == null) {
+                    String lookupName = getStringValue(envEntry.getLookupName());
+                    if (lookupName != null) {
+                        value = new JndiReference(lookupName);
+                    }
+                }
+            }
+            
+            if (value == null) {
+                if (strValue == null) {
                     if ("org.apache.geronimo.kernel.Kernel".equals(type)) {
                         value = new KernelReference();
-                    } else {
-                        value = null;
                     }
-                } else if ("java.lang.String".equals(type)) {
-                    value = text;
-                } else if ("java.lang.Character".equals(type)) {
-                    value = text.charAt(0);
-                } else if ("java.lang.Boolean".equals(type)) {
-                    value = Boolean.valueOf(text);
-                } else if ("java.lang.Byte".equals(type)) {
-                    value = Byte.valueOf(text);
-                } else if ("java.lang.Short".equals(type)) {
-                    value = Short.valueOf(text);
-                } else if ("java.lang.Integer".equals(type)) {
-                    value = Integer.valueOf(text);
-                } else if ("java.lang.Long".equals(type)) {
-                    value = Long.valueOf(text);
-                } else if ("java.lang.Float".equals(type)) {
-                    value = Float.valueOf(text);
-                } else if ("java.lang.Double".equals(type)) {
-                    value = Double.valueOf(text);
                 } else {
-                    throw new DeploymentException("unrecognized type: " + type);
-                }
-                // perform resource injection only if there is a value specified
-                // see Java EE 5 spec, section EE.5.4.1.3
-                if (value != null) {
-                    addInjections(name, envEntry.getInjectionTargetArray(), sharedContext);
-                    put(name, value, getJndiContextMap(sharedContext));
+                    try {
+                        if (String.class.equals(typeClass)) {
+                            value = strValue;
+                        } else if (Character.class.equals(typeClass)) {
+                            value = strValue.charAt(0);
+                        } else if (Boolean.class.equals(typeClass)) {
+                            value = Boolean.valueOf(strValue);
+                        } else if (Byte.class.equals(typeClass)) {
+                            value = Byte.valueOf(strValue);
+                        } else if (Short.class.equals(typeClass)) {
+                            value = Short.valueOf(strValue);
+                        } else if (Integer.class.equals(typeClass)) {
+                            value = Integer.valueOf(strValue);
+                        } else if (Long.class.equals(typeClass)) {
+                            value = Long.valueOf(strValue);
+                        } else if (Float.class.equals(typeClass)) {
+                            value = Float.valueOf(strValue);
+                        } else if (Double.class.equals(typeClass)) {
+                            value = Double.valueOf(strValue);
+                        } else if (Class.class.equals(typeClass)) {
+                            value = new ClassReference(strValue);
+                        } else if (typeClass.isEnum()) {
+                            value = Enum.valueOf(typeClass, strValue);
+                        } else {
+                            throw new DeploymentException("Unrecognized env-entry type: " + type);
+                        }
+                    } catch (NumberFormatException e) {
+                        throw new DeploymentException("Invalid env-entry value for name: " + name, e);
+                    }
                 }
-            } catch (NumberFormatException e) {
-                throw new DeploymentException("Invalid env-entry value for name: " + name, e);
+            }
+            
+            // perform resource injection only if there is a value specified
+            // see Java EE 5 spec, section EE.5.4.1.3
+            if (value != null) {
+                addInjections(name, envEntry.getInjectionTargetArray(), sharedContext);
+                put(name, value, getJndiContextMap(sharedContext));
             }
         }
+        
         if (!envEntryMap.isEmpty()) {
             throw new DeploymentException("Unknown env-entry elements in geronimo plan: " + envEntryMap);
         }
@@ -177,16 +205,18 @@ public class EnvironmentEntryBuilder ext
 
         public boolean processResource(AnnotatedApp annotatedApp, Resource annotation, Class cls, Method method, Field field) {
             String resourceName = getResourceName(annotation, method, field);
-            String resourceType = getResourceType(annotation, method, field);
-            if (resourceType.equals("java.lang.String") ||
-                    resourceType.equals("java.lang.Character") ||
-                    resourceType.equals("java.lang.Integer") ||
-                    resourceType.equals("java.lang.Boolean") ||
-                    resourceType.equals("java.lang.Double") ||
-                    resourceType.equals("java.lang.Byte") ||
-                    resourceType.equals("java.lang.Short") ||
-                    resourceType.equals("java.lang.Long") ||
-                    resourceType.equals("java.lang.Float")) {
+            Class resourceType = getResourceTypeClass(annotation, method, field);
+            if (resourceType.equals(String.class) ||
+                    resourceType.equals(Character.class) ||
+                    resourceType.equals(Integer.class) ||
+                    resourceType.equals(Boolean.class) ||
+                    resourceType.equals(Double.class) ||
+                    resourceType.equals(Byte.class) ||
+                    resourceType.equals(Short.class) ||
+                    resourceType.equals(Long.class) ||
+                    resourceType.equals(Float.class) ||
+                    resourceType.equals(Class.class) ||
+                    resourceType.isEnum()) {
 
                 log.debug("addResource(): <env-entry> found");
 
@@ -220,10 +250,10 @@ public class EnvironmentEntryBuilder ext
                         JndiNameType envEntryName = envEntry.addNewEnvEntryName();
                         envEntryName.setStringValue(resourceName);
 
-                        if (!resourceType.equals("")) {
+                        if (!resourceType.equals(Object.class)) {
                             // env-entry-type
                             EnvEntryTypeValuesType envEntryType = envEntry.addNewEnvEntryType();
-                            envEntryType.setStringValue(resourceType);
+                            envEntryType.setStringValue(resourceType.getCanonicalName());
                         }                         
                         if (method != null || field != null) {
                             // injectionTarget

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java?rev=933374&r1=933373&r2=933374&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java Mon Apr 12 19:24:39 2010
@@ -17,11 +17,16 @@
 
 package org.apache.geronimo.naming.deployment;
 
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 import javax.naming.Context;
 import javax.naming.NameClassPair;
@@ -29,11 +34,24 @@ import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 
 import junit.framework.TestCase;
+
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.j2ee.deployment.ConnectorModule;
+import org.apache.geronimo.j2ee.deployment.EARContext;
+import org.apache.geronimo.j2ee.deployment.Module;
+import org.apache.geronimo.j2ee.deployment.NamingBuilder;
 import org.apache.geronimo.j2ee.jndi.JndiScope;
+import org.apache.geronimo.kernel.Jsr77Naming;
+import org.apache.geronimo.kernel.config.ConfigurationManager;
+import org.apache.geronimo.kernel.config.ConfigurationModuleType;
+import org.apache.geronimo.kernel.mock.MockConfigurationManager;
+import org.apache.geronimo.kernel.osgi.MockBundleContext;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.kernel.repository.Environment;
 import org.apache.geronimo.naming.enc.EnterpriseNamingContext;
-import org.apache.geronimo.j2ee.deployment.NamingBuilder;
-import org.apache.xmlbeans.XmlObject;
 import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.osgi.framework.BundleContext;
 
 /**
  * @version $Rev$ $Date$
@@ -96,7 +114,20 @@ public class EnvironmentEntryBuilderTest
             "<env-entry-type>java.lang.Boolean</env-entry-type>" +
             "<env-entry-value>TRUE</env-entry-value>" +
             "</env-entry>" +
+            
+            "<env-entry>" +
+            "<env-entry-name>class</env-entry-name>" +
+            "<env-entry-type>java.lang.Class</env-entry-type>" +
+            "<env-entry-value>java.net.URI</env-entry-value>" +
+            "</env-entry>" +
+            
+            "<env-entry>" +
+            "<env-entry-name>enum</env-entry-name>" +
+            "<env-entry-type>java.util.concurrent.TimeUnit</env-entry-type>" +
+            "<env-entry-value>NANOSECONDS</env-entry-value>" +
+            "</env-entry>" +
             "</tmp>";
+    
     private static final String TEST_PLAN = "<tmp xmlns=\"http://geronimo.apache.org/xml/ns/naming-1.2\">" +
             "<env-entry>" +
             "<env-entry-name>string</env-entry-name>" +
@@ -142,8 +173,47 @@ public class EnvironmentEntryBuilderTest
             "<env-entry-name>boolean</env-entry-name>" +
             "<env-entry-value>FALSE</env-entry-value>" +
             "</env-entry>" +
+            
+            "<env-entry>" +
+            "<env-entry-name>class</env-entry-name>" +
+            "<env-entry-type>java.lang.Class</env-entry-type>" +
+            "<env-entry-value>java.net.URL</env-entry-value>" +
+            "</env-entry>" +
+            
+            "<env-entry>" +
+            "<env-entry-name>enum</env-entry-name>" +
+            "<env-entry-type>java.util.concurrent.TimeUnit</env-entry-type>" +
+            "<env-entry-value>SECONDS</env-entry-value>" +
+            "</env-entry>" +
             "</tmp>";
 
+    private Module module;
+    
+    protected void setUp() throws Exception {
+        Artifact artifact = new Artifact("foo", "bar", "1.0", "car");
+        Map<String, Artifact> locations = new HashMap<String, Artifact>();
+        locations.put(null, artifact);
+        BundleContext bundleContext = new MockBundleContext(getClass().getClassLoader(), "", null, locations);
+        Artifact id = new Artifact("test", "test", "", "car");
+        module  = new ConnectorModule(false, new AbstractName(id, Collections.singletonMap("name", "test")), null, null, "foo", null, null, null, null);
+        ConfigurationManager configurationManager = new MockConfigurationManager();
+        EARContext earContext = new EARContext(new File("foo"),
+            null,
+            new Environment(artifact),
+            ConfigurationModuleType.EAR,
+            new Jsr77Naming(),
+            configurationManager,
+            bundleContext,
+            null,
+            null,
+            null,
+            null,
+            null);
+        earContext.initializeConfiguration();
+        module.setEarContext(earContext);
+        module.setRootEarContext(earContext);
+    }
+            
     public void testEnvEntries() throws Exception {
 
         String stringVal = "Hello World";
@@ -164,14 +234,14 @@ public class EnvironmentEntryBuilderTest
         } finally {
             cursor.dispose();
         }
-        environmentEntryBuilder.buildNaming(doc, null, null, componentContext);
-        Context context = EnterpriseNamingContext.livenReferences(NamingBuilder.JNDI_KEY.get(componentContext).get(JndiScope.comp), null, null, null, "comp/");
+        environmentEntryBuilder.buildNaming(doc, null, module, componentContext);
+        Context context = EnterpriseNamingContext.livenReferences(NamingBuilder.JNDI_KEY.get(componentContext).get(JndiScope.comp), null, null, getClass().getClassLoader(), "comp/");
         Set actual = new HashSet();
         for (NamingEnumeration e = context.listBindings("comp/env"); e.hasMore();) {
             NameClassPair pair = (NameClassPair) e.next();
             actual.add(pair.getName());
         }
-        Set expected = new HashSet(Arrays.asList(new String[]{"string", "char", "byte", "short", "int", "long", "float", "double", "boolean"}));
+        Set expected = new HashSet(Arrays.asList(new String[]{"string", "char", "byte", "short", "int", "long", "float", "double", "boolean", "class", "enum"}));
         assertEquals(expected, actual);
         assertEquals(stringVal, context.lookup("comp/env/string"));
         assertEquals(charVal, context.lookup("comp/env/char"));
@@ -182,6 +252,8 @@ public class EnvironmentEntryBuilderTest
         assertEquals(floatVal, context.lookup("comp/env/float"));
         assertEquals(doubleVal, context.lookup("comp/env/double"));
         assertEquals(booleanVal, context.lookup("comp/env/boolean"));
+        assertEquals(URI.class, context.lookup("comp/env/class"));
+        assertEquals(TimeUnit.NANOSECONDS, context.lookup("comp/env/enum"));
     }
 
     public void testEnvEntriesOverride() throws Exception {
@@ -212,14 +284,14 @@ public class EnvironmentEntryBuilderTest
         } finally {
             cursor.dispose();
         }
-        environmentEntryBuilder.buildNaming(doc, plan, null, componentContext);
-        Context context = EnterpriseNamingContext.livenReferences(NamingBuilder.JNDI_KEY.get(componentContext).get(JndiScope.comp), null, null, null, "comp/");
+        environmentEntryBuilder.buildNaming(doc, plan, module, componentContext);
+        Context context = EnterpriseNamingContext.livenReferences(NamingBuilder.JNDI_KEY.get(componentContext).get(JndiScope.comp), null, null, getClass().getClassLoader(), "comp/");
         Set actual = new HashSet();
         for (NamingEnumeration e = context.listBindings("comp/env"); e.hasMore();) {
             NameClassPair pair = (NameClassPair) e.next();
             actual.add(pair.getName());
         }
-        Set expected = new HashSet(Arrays.asList(new String[]{"string", "char", "byte", "short", "int", "long", "float", "double", "boolean"}));
+        Set expected = new HashSet(Arrays.asList(new String[]{"string", "char", "byte", "short", "int", "long", "float", "double", "boolean", "class", "enum"}));
         assertEquals(expected, actual);
         assertEquals(stringVal, context.lookup("comp/env/string"));
         assertEquals(charVal, context.lookup("comp/env/char"));
@@ -230,6 +302,8 @@ public class EnvironmentEntryBuilderTest
         assertEquals(floatVal, context.lookup("comp/env/float"));
         assertEquals(doubleVal, context.lookup("comp/env/double"));
         assertEquals(booleanVal, context.lookup("comp/env/boolean"));
+        assertEquals(URL.class, context.lookup("comp/env/class"));
+        assertEquals(TimeUnit.SECONDS, context.lookup("comp/env/enum"));
     }
 
     public void testEmptyEnvironment() throws NamingException {
@@ -237,5 +311,4 @@ public class EnvironmentEntryBuilderTest
         Context env = (Context) context.lookup("comp/env");
         assertNotNull(env);
     }
-
 }