You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/08/11 23:19:37 UTC

svn commit: r984587 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/config/AnnotationDeployer.java main/java/org/apache/openejb/config/JndiEncInfoBuilder.java test/java/org/apache/openejb/config/XmlOverridesTest.java

Author: gawor
Date: Wed Aug 11 21:19:37 2010
New Revision: 984587

URL: http://svn.apache.org/viewvc?rev=984587&view=rev
Log:
Make Resource.lookup work for environment and other entries

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/XmlOverridesTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=984587&r1=984586&r2=984587&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Wed Aug 11 21:19:37 2010
@@ -116,6 +116,7 @@ import org.apache.openejb.jee.EjbRef;
 import org.apache.openejb.jee.EjbReference;
 import org.apache.openejb.jee.Empty;
 import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.ExcludeList;
 import org.apache.openejb.jee.FacesConfig;
 import org.apache.openejb.jee.FacesManagedBean;
@@ -2665,7 +2666,28 @@ public class AnnotationDeployer implemen
                         resourceEnvRef.setResourceEnvRefType(type.getName());
                     }
                     reference = resourceEnvRef;
-                } else if (!isKnownEnvironmentEntryType(type)) {
+                } else if (isKnownEnvironmentEntryType(type)) {
+                    /*
+                     * @Resource <env-entry>    
+                     * 
+                     * Add an env-entry via @Resource if 'lookup' attribute is set.
+                     */ 
+                    String lookupName = getLookupName(resource);
+                    if (!lookupName.equals("")) {
+                        EnvEntry envEntry = new EnvEntry();
+                        envEntry.setName(refName);
+                        consumer.getEnvEntry().add(envEntry);
+                        
+                        envEntry.setLookupName(lookupName);
+                        
+                        reference = envEntry;
+                    } else {
+                        /*
+                         * Can't add env-entry since @Resource.lookup is not set. 
+                         */
+                        return;
+                    }
+                } else {
                     /*
                      * @Resource <resource-ref>
                      */
@@ -2701,20 +2723,6 @@ public class AnnotationDeployer implemen
             }
 
             /*
-             * @Resource <env-entry>
-             *
-             * Can't add an env-entry via @Resource as there needs to
-             * be a corresponding value specified in the ejb-jar.xml.
-             *
-             * If we didn't find a reference (env-entry) in the ejb-jar.xml
-             * and this is not a resource-env-ref or a resource-ref then
-             * this is not a valid @Resource reference.
-             */
-            if (reference == null) {
-                return;
-            }
-
-            /*
              * Fill in the injection information <injection-target>
              */
             if (member != null) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java?rev=984587&r1=984586&r2=984587&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/JndiEncInfoBuilder.java Wed Aug 11 21:19:37 2010
@@ -329,8 +329,8 @@ public class JndiEncInfoBuilder {
 
     private void buildEnvEntryInfos(JndiConsumer item, JndiEncInfo moduleJndiEnc, JndiEncInfo compJndiEnc) {
         for (EnvEntry env : item.getEnvEntry()) {
-            // ignore env entries without a value
-            if (env.getEnvEntryValue() == null) {
+            // ignore env entries without a value and lookup name
+            if (env.getEnvEntryValue() == null && env.getLookupName() == null) {
                 continue;
             }
               //TODO this is wrong, need to infer type from injections.
@@ -354,13 +354,19 @@ public class JndiEncInfoBuilder {
     }
 
     public ReferenceLocationInfo buildLocationInfo(JndiReference reference) {
+        String lookupName = reference.getLookupName();
+        if (lookupName != null) {
+            ReferenceLocationInfo location = new ReferenceLocationInfo();
+            location.jndiName = lookupName;
+            return location;
+        }
         String mappedName = reference.getMappedName();
-        if (mappedName == null || !mappedName.startsWith("jndi:")) {
-            return null;
+        if (mappedName != null && mappedName.startsWith("jndi:")) {
+            ReferenceLocationInfo location = new ReferenceLocationInfo();
+            location.jndiName = mappedName.substring(5);
+            return location;
         }
-        ReferenceLocationInfo location = new ReferenceLocationInfo();
-        location.jndiName = mappedName.replaceFirst("^jndi:", "");
-        return location;
+        return null;
     }
 
     public Collection<? extends InjectionInfo> buildInjectionInfos(Injectable injectable) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/XmlOverridesTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/XmlOverridesTest.java?rev=984587&r1=984586&r2=984587&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/XmlOverridesTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/XmlOverridesTest.java Wed Aug 11 21:19:37 2010
@@ -83,6 +83,10 @@ public class XmlOverridesTest extends Te
         bean.getEnvEntry().add(new EnvEntry(name("booolean"), "java.lang.String", "seven"));
         bean.getEnvEntry().add(new EnvEntry(name("byyte"), "java.lang.String", "eight"));
         bean.getEnvEntry().add(new EnvEntry(name("chaaracter"), "java.lang.String", "nine"));
+        
+        EnvEntry lookupEntry = new EnvEntry(name("lookup"), "java.lang.String", null);
+        lookupEntry.setLookupName("java:app/AppName");
+        bean.getEnvEntry().add(lookupEntry);
 
         bean.getResourceRef().add(new ResourceRef(name("daataSource"), DataSource.class.getName(), ResAuth.CONTAINER, ResSharingScope.SHAREABLE));
 
@@ -106,7 +110,7 @@ public class XmlOverridesTest extends Te
         assertEquals("Enc.ejbLocalReferences.get(0).link", "BarBean", enc.ejbLocalReferences.get(0).link);
         assertEquals("Enc.ejbReferences.size()", 0, enc.ejbReferences.size());
 
-        assertEquals("Enc.envEntries.size()", 9, enc.envEntries.size());
+        assertEquals("Enc.envEntries.size()", 10, enc.envEntries.size());
         Map<String, EnvEntryInfo> entries = map(enc.envEntries);
 
         assertEnvEntry(entries, name("striing"), "java.lang.Integer", "2");
@@ -118,6 +122,7 @@ public class XmlOverridesTest extends Te
         assertEnvEntry(entries, name("booolean"), "java.lang.String", "seven");
         assertEnvEntry(entries, name("byyte"), "java.lang.String", "eight");
         assertEnvEntry(entries, name("chaaracter"), "java.lang.String", "nine");
+        assertEnvEntryLookup(entries, name("lookup"), "java.lang.String", "java:app/AppName");
 
         assertEquals("Enc.persistenceContextRefs.size()", 1, enc.persistenceContextRefs.size());
         PersistenceContextReferenceInfo context = enc.persistenceContextRefs.get(0);
@@ -142,6 +147,15 @@ public class XmlOverridesTest extends Te
         assertEquals(name + ".type", type, entryInfo.type);
         assertEquals(name + ".value", value, entryInfo.value);
     }
+    
+    private void assertEnvEntryLookup(Map<String, EnvEntryInfo> entries, String name, String type, String lookup) {
+        EnvEntryInfo entryInfo = entries.get(name);
+        assertNotNull(name, entryInfo);
+        assertEquals(name + ".type", type, entryInfo.type);
+        assertNull(name + ".value", entryInfo.value);
+        assertNotNull(name + ".location", entryInfo.location);
+        assertEquals(name + ".location.jndiName", lookup, entryInfo.location.jndiName);        
+    }
 
     private <T extends InjectableInfo> Map<String, T> map(List<T> list) {
         try {
@@ -197,6 +211,9 @@ public class XmlOverridesTest extends Te
 
         @Resource
         private Character chaaracter = 'D';
+        
+        @Resource
+        private String lookup;
 
         @Resource(authenticationType = Resource.AuthenticationType.APPLICATION, shareable = false)
         private DataSource daataSource;