Author: xuhaihong
Date: Tue Jun 28 02:27:45 2011
New Revision: 1140403

URL: http://svn.apache.org/viewvc?rev=1140403&view=rev
Log:
OPENEJB-1615 Support use the @Resource(name="java:global/env/abc") for 
environment entry injection
a. Support the use in DD
b. Avoid create an extra JNDI entry in the last change

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
    
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

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1140403&r1=1140402&r2=1140403&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
 Tue Jun 28 02:27:45 2011
@@ -206,6 +206,11 @@ public class JndiEncBuilder {
                 continue;
             }
 
+            //It is possible that the value and location are both null, as it 
is allowed to use @Resource(name="java:global/env/abc") with no value is 
specified in DD            
+            if(entry.value == null) {
+                continue;
+            }
+
             try {
                 Class type = Classes.deprimitivize(getType(entry.type, entry));
                 Object obj = null;

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=1140403&r1=1140402&r2=1140403&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
 Tue Jun 28 02:27:45 2011
@@ -3358,9 +3358,7 @@ public class AnnotationDeployer implemen
                         reference = envEntry;
                     } else if(isShareableJNDINamespace(refName)){
                         EnvEntry envEntry = new EnvEntry();
-                        envEntry.setName(member.getDeclaringClass().getName() 
+ "/" + member.getName());
-                        envEntry.setLookupName(refName);
-
+                        envEntry.setName(refName);
                         consumer.getEnvEntry().add(envEntry);                  
      
                         reference = envEntry;
                     } else {

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=1140403&r1=1140402&r2=1140403&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
 Tue Jun 28 02:27:45 2011
@@ -16,7 +16,6 @@
  */
 package org.apache.openejb.config;
 
-import static java.lang.String.format;
 import static org.apache.openejb.assembler.classic.EjbResolver.Scope.EJBJAR;
 import static org.apache.openejb.assembler.classic.EjbResolver.Scope.EAR;
 import org.apache.openejb.OpenEJBException;
@@ -325,10 +324,11 @@ public class JndiEncInfoBuilder {
     private void buildEnvEntryInfos(JndiConsumer item, JndiEncInfo 
moduleJndiEnc, JndiEncInfo compJndiEnc) {
         for (EnvEntry env : item.getEnvEntry()) {
             // ignore env entries without a value and lookup name
-            if (env.getEnvEntryValue() == null && env.getLookupName() == null) 
{
+            //If the the reference name of the environment entry is belong to 
those shareable JNDI name space, it somewhat is a valid one            
+            if (env.getEnvEntryValue() == null && env.getLookupName() == null 
&& !isShareableJNDINamespace(env.getEnvEntryName())) {
                 continue;
             }
-            
+
             EnvEntryInfo info = new EnvEntryInfo();
 
             info.referenceName = env.getEnvEntryName();
@@ -340,6 +340,10 @@ public class JndiEncInfoBuilder {
         }
     }
 
+    private boolean isShareableJNDINamespace(String jndiName) {
+        return jndiName.startsWith("java:global/") || 
jndiName.startsWith("java:app/") || jndiName.startsWith("java:module/");
+    }
+
     public ReferenceLocationInfo buildLocationInfo(JndiReference reference) {
         String lookupName = reference.getLookupName();
         if (lookupName != null) {


Reply via email to