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/18 19:03:20 UTC

svn commit: r986788 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/config/AutoConfig.java test/java/org/apache/openejb/config/InjectionTest.java

Author: gawor
Date: Wed Aug 18 17:03:19 2010
New Revision: 986788

URL: http://svn.apache.org/viewvc?rev=986788&view=rev
Log:
More infer type fixes

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=986788&r1=986787&r2=986788&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Wed Aug 18 17:03:19 2010
@@ -19,6 +19,7 @@ package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
 import org.apache.openejb.assembler.classic.ContainerInfo;
+import org.apache.openejb.assembler.classic.InjectionInfo;
 import org.apache.openejb.assembler.classic.ResourceInfo;
 import org.apache.openejb.config.sys.Resource;
 import org.apache.openejb.jee.ActivationConfig;
@@ -29,6 +30,7 @@ import org.apache.openejb.jee.Connection
 import org.apache.openejb.jee.Connector;
 import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.jee.InboundResourceadapter;
+import org.apache.openejb.jee.InjectionTarget;
 import org.apache.openejb.jee.JndiConsumer;
 import org.apache.openejb.jee.JndiReference;
 import org.apache.openejb.jee.MessageDestination;
@@ -48,6 +50,7 @@ import org.apache.openejb.jee.oejb3.EjbD
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.openejb.jee.oejb3.ResourceLink;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.IntrospectionSupport;
 import org.apache.openejb.util.LinkResolver;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
@@ -742,17 +745,17 @@ public class AutoConfig implements Dynam
 
             // Resource reference
             for (ResourceRef ref : bean.getResourceRef()) {
-                processResourceRef(ref, ejbDeployment, appResources);
+                processResourceRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
             }
 
             // Resource env reference
             for (JndiReference ref : bean.getResourceEnvRef()) {
-                processResourceEnvRef(ref, ejbDeployment, appResources);
+                processResourceEnvRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
             }
 
             // Message destination reference
             for (MessageDestinationRef ref : bean.getMessageDestinationRef()) {
-                processResourceEnvRef(ref, ejbDeployment, appResources);
+                processResourceEnvRef(ref, ejbDeployment, appResources, ejbModule.getClassLoader());
             }
 
 
@@ -798,7 +801,10 @@ public class AutoConfig implements Dynam
         return containerInfo.id;
     }
 
-    private void processResourceRef(ResourceRef ref, EjbDeployment ejbDeployment, AppResources appResources) throws OpenEJBException {
+    private void processResourceRef(ResourceRef ref, 
+                                    EjbDeployment ejbDeployment, 
+                                    AppResources appResources,
+                                    ClassLoader classLoader) throws OpenEJBException {
         // skip destinations with lookup name
         if (ref.getLookupName() != null) {
             return;
@@ -810,7 +816,7 @@ public class AutoConfig implements Dynam
         }
 
         String refName = ref.getName();
-        String refType = ref.getType();
+        String refType = getType(ref, classLoader); 
 
         // skip references such as URLs which are automatically handled by the server
         if (ignoredReferenceTypes.contains(refType)) {
@@ -834,7 +840,10 @@ public class AutoConfig implements Dynam
         }
     }
 
-    private void processResourceEnvRef(JndiReference ref, EjbDeployment ejbDeployment, AppResources appResources) throws OpenEJBException {
+    private void processResourceEnvRef(JndiReference ref, 
+                                       EjbDeployment ejbDeployment, 
+                                       AppResources appResources, 
+                                       ClassLoader classLoader) throws OpenEJBException {
         // skip destinations with lookup name
         if (ref.getLookupName() != null) {
             return;
@@ -846,7 +855,7 @@ public class AutoConfig implements Dynam
         }
 
         String refName = ref.getName();
-        String refType = ref.getType();
+        String refType = getType(ref, classLoader); 
 
         // skip references such as SessionContext which are automatically handled by the server
         if (ignoredReferenceTypes.contains(refType)) {
@@ -875,6 +884,27 @@ public class AutoConfig implements Dynam
         }
     }
 
+    private String getType(JndiReference ref, ClassLoader classLoader) throws OpenEJBException {
+        if (ref.getType() != null) {
+            return ref.getType();
+        }
+        if (classLoader != null) {
+            List<InjectionTarget> injections = ref.getInjectionTarget();
+            for (InjectionTarget injection : injections) {
+                try {
+                    Class target = classLoader.loadClass(injection.getInjectionTargetClass().trim());
+                    Class type = IntrospectionSupport.getPropertyType(target, injection.getInjectionTargetName().trim());
+                    return type.getName();
+                } catch (ClassNotFoundException e) {
+                    // ignore
+                } catch (NoSuchFieldException e) {
+                    // ignore
+                }
+            }
+        }
+        throw new OpenEJBException("Unable to infer type for " + ref.getKey());
+    }
+    
     private static boolean skipMdb(Object bean) {
         return bean instanceof MessageDrivenBean && SystemInstance.get().hasProperty("openejb.geronimo");
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java?rev=986788&r1=986787&r2=986788&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java Wed Aug 18 17:03:19 2010
@@ -20,6 +20,7 @@ package org.apache.openejb.config;
 import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Resource;
+import javax.ejb.EJBContext;
 import javax.ejb.SessionContext;
 import javax.ejb.Stateless;
 import javax.naming.InitialContext;
@@ -36,6 +37,7 @@ import org.apache.openejb.core.ivm.namin
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.ResourceEnvRef;
 import org.apache.openejb.jee.StatelessBean;
 
 /**
@@ -43,7 +45,7 @@ import org.apache.openejb.jee.StatelessB
  */
 public class InjectionTest extends TestCase {
 
-    public void testEnvEntryInjections() throws Exception {       
+    public void testInjections() throws Exception {       
         InitialContext ctx = new InitialContext();
 
         Object object = ctx.lookup("WidgetBeanLocal");
@@ -67,6 +69,7 @@ public class InjectionTest extends TestC
         // injected via DD
         assertEquals(true, widget.getInjectedBoolean());
         assertEquals(true, widget.lookup("injectedBoolean"));
+        assertNotNull(widget.getInjectedContext());
     }
 
     protected void setUp() throws Exception {
@@ -112,6 +115,10 @@ public class InjectionTest extends TestC
         EnvEntry entry = new EnvEntry("injectedBoolean", (String) null, "true");
         entry.getInjectionTarget().add((new InjectionTarget(WidgetBean.class.getName(), "injectedBoolean")));
         bean.getEnvEntry().add(entry);
+        
+        ResourceEnvRef resourceEnvRef = new ResourceEnvRef("injectedContext", (String) null);
+        resourceEnvRef.getInjectionTarget().add((new InjectionTarget(WidgetBean.class.getName(), "injectedContext")));
+        bean.getResourceEnvRef().add(resourceEnvRef);
 
         assembler.createApplication(config.configureApplication(ejbJar));
     }
@@ -136,6 +143,7 @@ public class InjectionTest extends TestC
         Object lookup(String name) throws NamingException;
         
         boolean getInjectedBoolean();
+        EJBContext getInjectedContext();
     }
 
     public static interface RemoteWidget extends Widget {
@@ -182,6 +190,9 @@ public class InjectionTest extends TestC
         // injected via DD
         private boolean injectedBoolean = false;
         
+        // injected via DD
+        private EJBContext injectedContext;
+        
         public WidgetBean() {           
         }
 
@@ -241,5 +252,9 @@ public class InjectionTest extends TestC
         public boolean getInjectedBoolean() {
             return injectedBoolean;
         }
+        
+        public EJBContext getInjectedContext() {
+            return injectedContext;
+        }
     }
 }