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;
+ }
}
}