You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/09/18 02:58:11 UTC
svn commit: r1172164 - in /openejb/trunk/openejb3:
assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/
assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/
container...
Author: dblevins
Date: Sun Sep 18 00:58:10 2011
New Revision: 1172164
URL: http://svn.apache.org/viewvc?rev=1172164&view=rev
Log:
OPENEJB-1680 Remove <env-entry> items that have no configured value and no 'lookup'
OPENEJB-1679 Guess type for any <env-entry> items with a value and injection points, but no type
OPENEJB-1678 Missing <env-entry> more easily matched
OPENEJB-1677 Tomcat support for @Resource "java:comp/TransactionSynchronizationRegistry" injection/lookup
OPENEJB-1676 Tomcat support for @Resource "java:comp/TransactionManager" injection/lookup
OPENEJB-1675 Tomcat support for @Resource "java:app/AppName" injection/lookup
OPENEJB-1674 Tomcat support for @Resource "java:module/ModuleName" injection/lookup
OPENEJB-1673 Tomcat support for @Resource BeanManger injection/lookup
OPENEJB-1672 Tomcat support for new 'lookup' reference style
OPENEJB-1671 Tomcat support for new Enum EnvEntry type
OPENEJB-1670 Tomcat support for new Class EnvEntry type
Added:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/EnumFactory.java
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/LookupFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CleanEnvEntries.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BuiltInEnvironmentEntriesTest.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/CleanEnvEntriesTest.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/VagueEnvEntriesMatchTest.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingResource.java
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/ResourceFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectableInfo.java
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/assembler/classic/PersistenceContextReferenceInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.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/AutoConfig.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
openejb/trunk/openejb3/tck/cdi-tomee/pom.xml
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingResource.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingResource.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingResource.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/OpenEJBNamingResource.java Sun Sep 18 00:58:10 2011
@@ -15,7 +15,9 @@ public class OpenEJBNamingResource exten
@Override
public void addEnvironment(ContextEnvironment environment) {
- normalize(environment);
+ if (environment.getType() == null) {
+ normalize(environment);
+ }
super.addEnvironment(environment);
}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-catalina/src/main/java/org/apache/openejb/tomcat/catalina/TomcatJndiBuilder.java Sun Sep 18 00:58:10 2011
@@ -36,6 +36,7 @@ import org.apache.openejb.OpenEJBExcepti
import org.apache.openejb.assembler.classic.EjbLocalReferenceInfo;
import org.apache.openejb.assembler.classic.EjbReferenceInfo;
import org.apache.openejb.assembler.classic.EnvEntryInfo;
+import org.apache.openejb.assembler.classic.InjectableInfo;
import org.apache.openejb.assembler.classic.PersistenceContextReferenceInfo;
import org.apache.openejb.assembler.classic.PersistenceUnitReferenceInfo;
import org.apache.openejb.assembler.classic.PortRefInfo;
@@ -51,6 +52,8 @@ import org.apache.openejb.persistence.Jt
import org.apache.openejb.persistence.JtaEntityManagerRegistry;
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.tomcat.common.EjbFactory;
+import org.apache.openejb.tomcat.common.EnumFactory;
+import org.apache.openejb.tomcat.common.LookupFactory;
import org.apache.openejb.tomcat.common.NamingUtil;
import org.apache.openejb.tomcat.common.PersistenceContextFactory;
import org.apache.openejb.tomcat.common.PersistenceUnitFactory;
@@ -86,6 +89,7 @@ import static org.apache.openejb.tomcat.
import static org.apache.openejb.tomcat.common.NamingUtil.NAME;
import static org.apache.openejb.tomcat.common.NamingUtil.RESOURCE_ID;
import static org.apache.openejb.tomcat.common.NamingUtil.UNIT;
+import static org.apache.openejb.tomcat.common.EnumFactory.ENUM_VALUE;
import static org.apache.openejb.tomcat.common.NamingUtil.WSDL_URL;
import static org.apache.openejb.tomcat.common.NamingUtil.WS_CLASS;
import static org.apache.openejb.tomcat.common.NamingUtil.WS_ID;
@@ -157,11 +161,10 @@ public class TomcatJndiBuilder {
for (ServiceReferenceInfo ref : webAppInfo.jndiEnc.serviceRefs) {
mergeRef(naming, ref);
}
+
ContextTransaction contextTransaction = new ContextTransaction();
contextTransaction.setProperty(Constants.FACTORY, UserTransactionFactory.class.getName());
naming.setTransaction(contextTransaction);
-
-
}
public static void mergeJava(StandardContext standardContext) {
@@ -279,6 +282,40 @@ public class TomcatJndiBuilder {
}
public void mergeRef(NamingResources naming, EnvEntryInfo ref) {
+
+ if ("java.lang.Class".equals(ref.type)) {
+ ContextResourceEnvRef resourceEnv = new ContextResourceEnvRef();
+ resourceEnv.setName(ref.referenceName.replaceAll("^comp/env/", ""));
+ resourceEnv.setProperty(Constants.FACTORY, ResourceFactory.class.getName());
+ resourceEnv.setType(ref.type);
+ resourceEnv.setProperty(RESOURCE_ID, ref.value);
+ resourceEnv.setOverride(false);
+ naming.addResourceEnvRef(resourceEnv);
+
+ return;
+ }
+
+
+ try {
+ final ClassLoader loader = this.standardContext.getLoader().getClassLoader();
+ final Class<?> type = loader.loadClass(ref.type);
+ if (Enum.class.isAssignableFrom(type)) {
+
+ final ContextResourceEnvRef enumRef = new ContextResourceEnvRef();
+ enumRef.setName(ref.referenceName.replaceAll("^comp/env/", ""));
+ enumRef.setProperty(Constants.FACTORY, EnumFactory.class.getName());
+ enumRef.setProperty(ENUM_VALUE, ref.value);
+ enumRef.setType(ref.type);
+ enumRef.setOverride(false);
+ naming.addResourceEnvRef(enumRef);
+
+ return;
+ }
+ } catch (Throwable e) {
+ }
+
+ if (isLookupRef(naming, ref)) return;
+
ContextEnvironment environment = naming.findEnvironment(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (environment == null) {
@@ -289,6 +326,7 @@ public class TomcatJndiBuilder {
environment.setType(ref.type);
environment.setValue(ref.value);
+ environment.setOverride(false);
if (addEntry) {
naming.addEnvironment(environment);
@@ -302,7 +340,27 @@ public class TomcatJndiBuilder {
}
}
+ private boolean isLookupRef(NamingResources naming, InjectableInfo ref) {
+ if (ref.location == null) return false;
+ if (ref.location.jndiName == null) return false;
+ if (!ref.location.jndiName.startsWith("java:")) return false;
+
+ final ContextResourceEnvRef lookup = new ContextResourceEnvRef();
+
+ lookup.setName(ref.referenceName.replaceAll("^comp/env/", ""));
+ lookup.setProperty(Constants.FACTORY, LookupFactory.class.getName());
+ lookup.setProperty(JNDI_NAME, ref.location.jndiName);
+ lookup.setType(Object.class.getName());
+ lookup.setOverride(false);
+
+ naming.addResourceEnvRef(lookup);
+
+ return true;
+ }
+
public void mergeRef(NamingResources naming, EjbReferenceInfo ref) {
+ if (isLookupRef(naming, ref)) return;
+
ContextEjb ejb = naming.findEjb(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (ejb == null) {
@@ -343,6 +401,8 @@ public class TomcatJndiBuilder {
}
public void mergeRef(NamingResources naming, EjbLocalReferenceInfo ref) {
+ if (isLookupRef(naming, ref)) return;
+
// NamingContextListener.addLocalEjb is empty so we'll just use an ejb ref
ContextEjb ejb = naming.findEjb(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
@@ -383,6 +443,8 @@ public class TomcatJndiBuilder {
@SuppressWarnings({"UnusedDeclaration"})
public void mergeRef(NamingResources naming, PersistenceContextReferenceInfo ref, URI moduleUri) {
+ if (isLookupRef(naming, ref)) return;
+
ContextResource resource = naming.findResource(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (resource == null) {
@@ -435,6 +497,8 @@ public class TomcatJndiBuilder {
@SuppressWarnings({"UnusedDeclaration"})
public void mergeRef(NamingResources naming, PersistenceUnitReferenceInfo ref, URI moduleUri) {
+ if (isLookupRef(naming, ref)) return;
+
ContextResource resource = naming.findResource(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (resource == null) {
@@ -479,6 +543,8 @@ public class TomcatJndiBuilder {
}
public void mergeRef(NamingResources naming, ResourceReferenceInfo ref) {
+ if (isLookupRef(naming, ref)) return;
+
ContextResource resource = naming.findResource(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (resource == null) {
@@ -518,6 +584,8 @@ public class TomcatJndiBuilder {
}
public void mergeRef(NamingResources naming, ResourceEnvReferenceInfo ref) {
+ if (isLookupRef(naming, ref)) return;
+
ContextResourceEnvRef resourceEnv = naming.findResourceEnvRef(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (resourceEnv == null) {
@@ -557,6 +625,8 @@ public class TomcatJndiBuilder {
}
public void mergeRef(NamingResources naming, ServiceReferenceInfo ref) {
+ if (isLookupRef(naming, ref)) return;
+
ContextResource resource = naming.findResource(ref.referenceName.replaceAll("^comp/env/", ""));
boolean addEntry = false;
if (resource == null) {
Added: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/EnumFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/EnumFactory.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/EnumFactory.java (added)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/EnumFactory.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,50 @@
+/**
+ * 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.openejb.tomcat.common;
+
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.Reference;
+import javax.naming.spi.ObjectFactory;
+import java.util.Hashtable;
+
+import static org.apache.openejb.tomcat.common.NamingUtil.getProperty;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EnumFactory implements ObjectFactory {
+
+ public static final String ENUM_VALUE = "enumValue";
+
+ public Object getObjectInstance(Object object, Name name, Context context, Hashtable environment) throws Exception {
+ if (!(object instanceof Reference)) return null;
+
+ final Reference reference = ((Reference) object);
+
+ final String typeName = reference.getClassName();
+
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+ final Class<?> type = loader.loadClass(typeName);
+
+ final String value = getProperty(reference, ENUM_VALUE);
+
+ return Enum.valueOf((Class<Enum>) type, value);
+ }
+
+}
Added: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/LookupFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/LookupFactory.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/LookupFactory.java (added)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/LookupFactory.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,47 @@
+/**
+ * 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.openejb.tomcat.common;
+
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.Reference;
+import javax.naming.spi.ObjectFactory;
+import java.util.Hashtable;
+
+import static org.apache.openejb.tomcat.common.NamingUtil.JNDI_NAME;
+import static org.apache.openejb.tomcat.common.NamingUtil.getProperty;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class LookupFactory implements ObjectFactory {
+
+ public Object getObjectInstance(Object object, Name name, Context context, Hashtable environment) throws Exception {
+ if (!(object instanceof Reference)) return null;
+
+ final Reference reference = ((Reference) object);
+
+ String jndiName = getProperty(reference, JNDI_NAME);
+
+ if (jndiName == null) return null;
+
+ jndiName = jndiName.replaceFirst("^java:","");
+
+ return context.lookup(jndiName);
+ }
+
+}
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/ResourceFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/ResourceFactory.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/ResourceFactory.java (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-common/src/main/java/org/apache/openejb/tomcat/common/ResourceFactory.java Sun Sep 18 00:58:10 2011
@@ -30,11 +30,22 @@ import java.util.Hashtable;
public class ResourceFactory extends AbstractObjectFactory {
public Object getObjectInstance(Object object, Name name, Context context, Hashtable environment) throws Exception {
- Reference reference = ((Reference) object);
- if (reference.getClassName().equals("java.net.URL")) {
- String resourceId = getProperty(reference, RESOURCE_ID);
+
+ final Reference reference = ((Reference) object);
+
+ final String type = reference.getClassName();
+
+ if ("java.net.URL".equals(type)) {
+ final String resourceId = getProperty(reference, RESOURCE_ID);
return new URL(resourceId);
}
+
+ if ("java.lang.Class".equals(type)) {
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ final String resourceId = getProperty(reference, RESOURCE_ID);
+ return loader.loadClass(resourceId);
+ }
+
return super.getObjectInstance(object, name, context, environment);
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Sun Sep 18 00:58:10 2011
@@ -722,6 +722,8 @@ public class Assembler extends Assembler
ensureWebBeansContext(appContext);
+ appJndiContext.bind("app/BeanManager", appContext.getBeanManager());
+
// now that everything is configured, deploy to the container
if (start) {
// deploy
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -25,6 +25,5 @@ public class EjbReferenceInfo extends In
public boolean externalReference;
public String link;
- public ReferenceLocationInfo location;
public boolean localbean;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnvEntryInfo.java Sun Sep 18 00:58:10 2011
@@ -21,5 +21,4 @@ public class EnvEntryInfo extends Inject
public String type;
public String value;
- public ReferenceLocationInfo location;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectableInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectableInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectableInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/InjectableInfo.java Sun Sep 18 00:58:10 2011
@@ -25,4 +25,6 @@ import java.util.ArrayList;
public class InjectableInfo extends InfoObject {
public final List<InjectionInfo> targets = new ArrayList<InjectionInfo>();
public String referenceName;
+
+ public ReferenceLocationInfo location;
}
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=1172164&r1=1172163&r2=1172164&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 Sun Sep 18 00:58:10 2011
@@ -51,6 +51,7 @@ import javax.annotation.ManagedBean;
import javax.ejb.EJBContext;
import javax.ejb.TimerService;
import javax.ejb.spi.HandleDelegate;
+import javax.enterprise.inject.spi.BeanManager;
import javax.naming.Context;
import javax.naming.LinkRef;
import javax.naming.Name;
@@ -302,12 +303,15 @@ public class JndiEncBuilder {
continue;
}
- Class<?> type = getType(referenceInfo.resourceEnvRefType, referenceInfo);
+ final Class<?> type = getType(referenceInfo.resourceEnvRefType, referenceInfo);
+ final Object reference;
- Object reference;
if (EJBContext.class.isAssignableFrom(type)) {
String jndiName = "comp/EJBContext";
reference = new LinkRef(jndiName);
+
+ // Let the container bind this into JNDI
+ if (jndiName.equals(referenceInfo.referenceName)) continue;
} else if (Validator.class.equals(type)) {
String jndiName = "comp/Validator";
reference = new LinkRef(jndiName);
@@ -320,6 +324,12 @@ public class JndiEncBuilder {
} else if (TimerService.class.equals(type)) {
String jndiName = "comp/TimerService";
reference = new LinkRef(jndiName);
+
+ // TODO Bind the BeanManager
+ } else if (BeanManager.class.equals(type)) {
+ String jndiName = "app/BeanManager";
+ reference = new LinkRef(jndiName);
+
} else if (UserTransaction.class.equals(type)) {
reference = new IntraVmJndiReference("comp/UserTransaction");
} else if (referenceInfo.resourceID != null) {
@@ -491,9 +501,9 @@ public class JndiEncBuilder {
}
private void addSpecialModuleBindings(Map<String, Object> bindings) {
- if (moduleId != null) {
- bindings.put("module/ModuleName", moduleId);
- }
+// if (moduleId != null) {
+// bindings.put("module/ModuleName", moduleId);
+// }
// ensure the bindings will be non-empty
if (bindings.isEmpty()) {
bindings.put("module/dummy", "dummy");
@@ -501,9 +511,9 @@ public class JndiEncBuilder {
}
private void addSpecialAppBindings(Map<String, Object> bindings) {
- if (moduleId != null) {
- bindings.put("app/AppName", moduleId);
- }
+// if (moduleId != null) {
+// bindings.put("app/AppName", moduleId);
+// }
// ensure the bindings will be non-empty
if (bindings.isEmpty()) {
bindings.put("app/dummy", "dummy");
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceContextReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -27,5 +27,4 @@ public class PersistenceContextReference
public boolean extended;
public final Properties properties = new Properties();
- public ReferenceLocationInfo location;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/PersistenceUnitReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -23,5 +23,4 @@ public class PersistenceUnitReferenceInf
public String persistenceUnitName;
public String unitId;
- public ReferenceLocationInfo location;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceEnvReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -21,5 +21,4 @@ public class ResourceEnvReferenceInfo ex
public String mappedName;
public String resourceID;
- public ReferenceLocationInfo location;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -23,5 +23,4 @@ public class ResourceReferenceInfo exten
public String resourceID;
public java.util.Properties properties;
- public ReferenceLocationInfo location;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ServiceReferenceInfo.java Sun Sep 18 00:58:10 2011
@@ -38,5 +38,4 @@ public class ServiceReferenceInfo extend
public final List<HandlerChainInfo> handlerChains = new ArrayList<HandlerChainInfo>();
public final List<PortRefInfo> portRefs =new ArrayList<PortRefInfo>();
- public ReferenceLocationInfo location;
}
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=1172164&r1=1172163&r2=1172164&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 Sun Sep 18 00:58:10 2011
@@ -170,6 +170,7 @@ import javax.ejb.TransactionAttributeTyp
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.enterprise.inject.Specializes;
+import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Extension;
import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.ExcludeDefaultInterceptors;
@@ -243,6 +244,7 @@ public class AnnotationDeployer implemen
"javax.jms.Topic",
"javax.xml.ws.WebServiceContext",
"javax.ejb.TimerService",
+ "javax.enterprise.inject.spi.BeanManager",
"javax.validation.Validator",
"javax.validation.ValidatorFactory"
));
@@ -264,12 +266,16 @@ public class AnnotationDeployer implemen
private final ProcessAnnotatedBeans processAnnotatedBeans;
private final EnvEntriesPropertiesDeployer envEntriesPropertiesDeployer;
private final MBeanDeployer mBeanDeployer;
+ private final BuiltInEnvironmentEntries builtInEnvironmentEntries;
+ private final MergeWebappJndiContext mergeWebappJndiContext;
public AnnotationDeployer() {
discoverAnnotatedBeans = new DiscoverAnnotatedBeans();
processAnnotatedBeans = new ProcessAnnotatedBeans();
+ builtInEnvironmentEntries = new BuiltInEnvironmentEntries();
envEntriesPropertiesDeployer = new EnvEntriesPropertiesDeployer();
mBeanDeployer = new MBeanDeployer();
+ mergeWebappJndiContext = new MergeWebappJndiContext();
}
public AppModule deploy(AppModule appModule) throws OpenEJBException {
@@ -277,7 +283,10 @@ public class AnnotationDeployer implemen
try {
appModule = discoverAnnotatedBeans.deploy(appModule);
appModule = envEntriesPropertiesDeployer.deploy(appModule);
+ appModule = mergeWebappJndiContext.deploy(appModule);
+ appModule = builtInEnvironmentEntries.deploy(appModule);
appModule = processAnnotatedBeans.deploy(appModule);
+ appModule = mergeWebappJndiContext.deploy(appModule);
appModule = mBeanDeployer.deploy(appModule);
return appModule;
} finally {
@@ -3613,10 +3622,17 @@ public class AnnotationDeployer implemen
consumer.getEnvEntry().add(envEntry);
reference = envEntry;
} else {
- EnvEntry envEntry = new EnvEntry();
- envEntry.setName(refName);
- consumer.getEnvEntry().add(envEntry);
- reference = envEntry;
+
+ final String shortName = normalize(member.getName());
+ reference = consumer.getEnvEntryMap().get(shortName);
+
+ if (reference == null) {
+ EnvEntry envEntry = new EnvEntry();
+ envEntry.setName(refName);
+ consumer.getEnvEntry().add(envEntry);
+ reference = envEntry;
+ }
+
// /*
// * Can't add env-entry since @Resource.lookup is not set and it is NOT in a shareable JNDI name space
// */
@@ -3657,6 +3673,10 @@ public class AnnotationDeployer implemen
}
}
+ if (reference.getType() == null && member != null) {
+ reference.setType(member.getType().getName());
+ }
+
/*
* Fill in the injection information <injection-target>
*/
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=1172164&r1=1172163&r2=1172164&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 Sun Sep 18 00:58:10 2011
@@ -16,7 +16,12 @@
*/
package org.apache.openejb.config;
+import javax.ejb.TimerService;
+import javax.enterprise.inject.spi.BeanManager;
import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.UserTransaction;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Request;
@@ -102,11 +107,15 @@ public class AutoConfig implements Dynam
// URLs are automatically handled
ignoredReferenceTypes.add("java.net.URL");
// User transaction is automatically handled
- ignoredReferenceTypes.add("javax.transaction.UserTransaction");
- ignoredReferenceTypes.add("javax.ejb.TimerService");
+ ignoredReferenceTypes.add(UserTransaction.class.getName());
+ ignoredReferenceTypes.add(TransactionManager.class.getName());
+ ignoredReferenceTypes.add(TransactionSynchronizationRegistry.class.getName());
+ ignoredReferenceTypes.add(TimerService.class.getName());
// Bean Validation is automatically handled
ignoredReferenceTypes.add(Validator.class.getName());
ignoredReferenceTypes.add(ValidatorFactory.class.getName());
+ // CDI BeanManager is handled
+ ignoredReferenceTypes.add(BeanManager.class.getName());
// REST injections done via @Context and bound into a resource env...
ignoredReferenceTypes.add(Request.class.getName());
ignoredReferenceTypes.add(UriInfo.class.getName());
Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/BuiltInEnvironmentEntries.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,90 @@
+/*
+ * 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.openejb.config;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.JndiReference;
+import org.apache.openejb.jee.ResourceEnvRef;
+
+import javax.enterprise.inject.spi.BeanManager;
+import java.util.Map;
+
+/**
+ */
+public class BuiltInEnvironmentEntries implements DynamicDeployer {
+
+ public AppModule deploy(AppModule appModule) throws OpenEJBException {
+
+ for (ClientModule module : appModule.getClientModules()) {
+ final JndiConsumer consumer = module.getApplicationClient();
+ if (consumer == null) continue;
+
+ add(consumer, module, appModule);
+ }
+
+ for (WebModule module : appModule.getWebModules()) {
+ final JndiConsumer consumer = module.getWebApp();
+ if (consumer == null) continue;
+
+ add(consumer, module, appModule);
+ }
+
+ for (EjbModule module : appModule.getEjbModules()) {
+ final EjbJar ejbJar = module.getEjbJar();
+ if (ejbJar == null) continue;
+
+ for (EnterpriseBean consumer : ejbJar.getEnterpriseBeans()) {
+ add(consumer, module, appModule);
+ }
+ }
+
+ return appModule;
+ }
+
+ private void add(JndiConsumer jndi, DeploymentModule module, DeploymentModule app) {
+
+ // Standard names
+ add(jndi.getEnvEntryMap(), new EnvEntry().name("java:module/ModuleName").value(module.getModuleId()).type(String.class));
+ add(jndi.getEnvEntryMap(), new EnvEntry().name("java:app/AppName").value(app.getModuleId()).type(String.class));
+
+ // Standard References to built-in objects
+ add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/BeanManager").type(BeanManager.class));
+ add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/Validator").type(javax.validation.Validator.class));
+ add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/ValidatorFactory").type(javax.validation.ValidatorFactory.class));
+ add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/TransactionManager").type(javax.transaction.TransactionManager.class));
+ add(jndi.getResourceEnvRefMap(), new ResourceEnvRef().name("java:comp/TransactionSynchronizationRegistry").type(javax.transaction.TransactionSynchronizationRegistry.class));
+
+
+ // OpenEJB specific feature
+ add(jndi.getEnvEntryMap(), new EnvEntry().name("java:comp/ComponentName").value(jndi.getJndiConsumerName()).type(String.class));
+
+ }
+
+ private <E extends JndiReference> void add(Map<String, E> map, E entry) {
+ final E existing = map.get(entry.getKey());
+
+ map.put(entry.getKey(), entry);
+
+ if (existing != null) {
+ entry.getInjectionTarget().addAll(existing.getInjectionTarget());
+ }
+ }
+}
Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CleanEnvEntries.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CleanEnvEntries.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CleanEnvEntries.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/CleanEnvEntries.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,222 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.JndiConsumer;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class CleanEnvEntries implements DynamicDeployer {
+
+ @Override
+ public AppModule deploy(AppModule appModule) throws OpenEJBException {
+
+ // Any EnvEntry types missing the <value> and having no <lookup> should be removed
+ appModule = removeUnsetEnvEntries(appModule);
+
+ // Any EnvEntry types having the <value> but missing the type should have the type implied
+ // based on the injection points
+ appModule = fillInMissingType(appModule);
+
+ return appModule;
+ }
+
+ public AppModule removeUnsetEnvEntries(AppModule appModule) throws OpenEJBException {
+
+ for (ClientModule module : appModule.getClientModules()) {
+ final JndiConsumer consumer = module.getApplicationClient();
+ if (consumer == null) continue;
+
+ removeUnsetEnvEntries(consumer);
+ }
+
+ for (WebModule module : appModule.getWebModules()) {
+ final JndiConsumer consumer = module.getWebApp();
+ if (consumer == null) continue;
+
+ removeUnsetEnvEntries(consumer);
+ }
+
+ for (EjbModule module : appModule.getEjbModules()) {
+ final EjbJar ejbJar = module.getEjbJar();
+ if (ejbJar == null) continue;
+
+ for (EnterpriseBean consumer : ejbJar.getEnterpriseBeans()) {
+ removeUnsetEnvEntries(consumer);
+ }
+ }
+
+ return appModule;
+ }
+
+ private void removeUnsetEnvEntries(JndiConsumer consumer) {
+ final Iterator<EnvEntry> entries = consumer.getEnvEntry().iterator();
+ while (entries.hasNext()) {
+ final EnvEntry entry = entries.next();
+ if (entry.getEnvEntryValue() != null) continue;
+ if (entry.getLookupName() != null) continue;
+
+ entries.remove();
+ }
+ }
+
+
+ public AppModule fillInMissingType(AppModule appModule) throws OpenEJBException {
+
+ for (ClientModule module : appModule.getClientModules()) {
+ final JndiConsumer consumer = module.getApplicationClient();
+ if (consumer == null) continue;
+
+ fillInMissingType(consumer, module);
+ }
+
+ for (WebModule module : appModule.getWebModules()) {
+ final JndiConsumer consumer = module.getWebApp();
+ if (consumer == null) continue;
+
+ fillInMissingType(consumer, module);
+ }
+
+ for (EjbModule module : appModule.getEjbModules()) {
+ final EjbJar ejbJar = module.getEjbJar();
+ if (ejbJar == null) continue;
+
+ for (EnterpriseBean consumer : ejbJar.getEnterpriseBeans()) {
+ fillInMissingType(consumer, module);
+ }
+ }
+
+ return appModule;
+ }
+
+ private void fillInMissingType(JndiConsumer consumer, DeploymentModule module) {
+ final ClassLoader loader = module.getClassLoader();
+
+ for (EnvEntry entry : consumer.getEnvEntry()) {
+ fillInMissingType(loader, entry);
+ }
+
+ }
+
+ private void fillInMissingType(ClassLoader loader, EnvEntry entry) {
+ if (entry.getType() != null) return;
+
+ // If it has the lookup supplied we don't care if there is no type
+ if (entry.getLookupName() != null) return;
+
+ // We can't imply type without at least one injection point
+ if (entry.getInjectionTarget().size() == 0) return;
+
+ final Set<Class> types = new HashSet<Class>();
+
+ for (InjectionTarget target : entry.getInjectionTarget()) {
+ if (target.getInjectionTargetClass() == null) continue;
+ if (target.getInjectionTargetName() == null) continue;
+
+ types.add(getType(loader, target));
+ }
+
+ normalize(types);
+
+ final Class<?> type = (types.size() == 1) ? types.iterator().next() : String.class;
+
+ entry.setType(type.getName());
+ }
+
+ private void normalize(Set<Class> types) {
+ types.remove(Object.class);
+
+ if (types.contains(int.class)) {
+ types.remove(int.class);
+ types.add(Integer.class);
+ }
+
+ if (types.contains(char.class)) {
+ types.remove(char.class);
+ types.add(Character.class);
+ }
+
+ if (types.contains(short.class)) {
+ types.remove(short.class);
+ types.add(Short.class);
+ }
+
+ if (types.contains(long.class)) {
+ types.remove(long.class);
+ types.add(Long.class);
+ }
+
+ if (types.contains(float.class)) {
+ types.remove(float.class);
+ types.add(Float.class);
+ }
+
+ if (types.contains(double.class)) {
+ types.remove(double.class);
+ types.add(Double.class);
+ }
+
+ if (types.contains(boolean.class)) {
+ types.remove(boolean.class);
+ types.add(Boolean.class);
+ }
+
+ if (types.contains(byte.class)) {
+ types.remove(byte.class);
+ types.add(Byte.class);
+ }
+
+ }
+
+ private Class<?> getType(ClassLoader loader, InjectionTarget target) {
+ try {
+ final Class<?> clazz = loader.loadClass(target.getInjectionTargetClass());
+
+ try {
+ final Field field = clazz.getDeclaredField(target.getInjectionTargetName());
+ return field.getType();
+ } catch (NoSuchFieldException e) {
+ }
+
+ // TODO Technically we should match by case
+ final String name = "set" + target.getInjectionTargetName().toLowerCase();
+ for (Method method : clazz.getDeclaredMethods()) {
+ if (method.getParameterTypes().length == 1 && method.getName().toLowerCase().equals(name)) {
+ return method.getParameterTypes()[0];
+ }
+ }
+
+ } catch (Throwable e) {
+ }
+
+ return Object.class;
+ }
+
+
+}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Sun Sep 18 00:58:10 2011
@@ -187,6 +187,7 @@ public class ConfigurationFactory implem
}
chain.add(new ConvertDataSourceDefinitions());
+ chain.add(new CleanEnvEntries());
if (offline) {
AutoConfig autoConfig = new AutoConfig(this);
@@ -202,7 +203,7 @@ public class ConfigurationFactory implem
chain.add(new ActivationConfigPropertyOverride());
chain.add(new OutputGeneratedDescriptors());
- chain.add(new MergeWebappJndiContext());
+// chain.add(new MergeWebappJndiContext());
this.deployer = chain;
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java Sun Sep 18 00:58:10 2011
@@ -20,6 +20,7 @@ import org.apache.openejb.OpenEJBExcepti
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.EnterpriseBean;
import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.InjectionTarget;
import org.apache.openejb.jee.JndiConsumer;
import org.apache.openejb.jee.JndiReference;
import org.apache.openejb.jee.ResourceEnvRef;
@@ -27,10 +28,17 @@ import org.apache.openejb.jee.ResourceEn
import javax.ejb.EJBContext;
import javax.ejb.MessageDrivenContext;
import javax.ejb.SessionContext;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;
/**
+ * In a webapp all ejbs will share the JNDI namespace of the servlets
+ * This means no private namespace for each EJB.
+ *
+ * To make this happen we merge the JNDI entries of each ejb into
+ *
* @version $Rev$ $Date$
*/
public class MergeWebappJndiContext implements DynamicDeployer {
@@ -128,6 +136,10 @@ public class MergeWebappJndiContext impl
if (eb.getEnvEntryValue() == null) {
eb.setEnvEntryValue(ea.getEnvEntryValue());
}
+
+ if (eb.getEnvEntryType() == null) {
+ eb.setEnvEntryType(ea.getEnvEntryType());
+ }
}
}
}
@@ -151,8 +163,4 @@ public class MergeWebappJndiContext impl
}
return invalid;
}
-
- private void yank(ResourceEnvRef ref, Class<EJBContext> ejbContextClass, Class<SessionContext> sessionContextClass, Class<MessageDrivenContext> messageDrivenContextClass) {
- }
-
}
Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BuiltInEnvironmentEntriesTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BuiltInEnvironmentEntriesTest.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BuiltInEnvironmentEntriesTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BuiltInEnvironmentEntriesTest.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,109 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Module;
+import org.apache.openejb.util.SetAccessible;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.EJBContext;
+import javax.ejb.Singleton;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.UserTransaction;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.lang.reflect.Field;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@RunWith(ApplicationComposer.class)
+public class BuiltInEnvironmentEntriesTest {
+
+ @EJB
+ private Blue blue;
+
+ @Module
+ public SingletonBean fantastic() {
+ return new SingletonBean(Blue.class);
+ }
+
+ @Test
+ public void test() throws Exception {
+ blue.test();
+ }
+
+ @Singleton
+ @TransactionManagement(value = TransactionManagementType.BEAN)
+ public static class Blue {
+
+ @Resource(name = "java:comp/EJBContext")
+ private EJBContext ejbContext;
+
+ @Resource(name = "java:comp/Validator")
+ private Validator validator;
+
+ @Resource(name = "java:comp/ValidatorFactory")
+ private ValidatorFactory validatorFactory;
+
+ @Resource(name = "java:comp/TransactionManager")
+ private TransactionManager transactionManager;
+
+ @Resource(name = "java:comp/TransactionSynchronizationRegistry")
+ private TransactionSynchronizationRegistry transactionSynchronizationRegistry;
+
+ @Resource(name = "java:comp/UserTransaction")
+ private UserTransaction userTransaction;
+
+ @Resource(name = "java:comp/BeanManager")
+ private BeanManager beanManager;
+
+ @Resource(name = "java:app/AppName")
+ private String app;
+
+ @Resource(name = "java:module/ModuleName")
+ private String module;
+
+ @Resource(name = "java:comp/ComponentName")
+ private String component;
+
+ public void test() throws Exception {
+
+ final Field[] fields = this.getClass().getDeclaredFields();
+
+ for (Field field : fields) {
+ SetAccessible.on(field);
+ Assert.assertNotNull(field.getName(), field.get(this));
+ }
+
+ Assert.assertEquals("app", "BuiltInEnvironmentEntriesTest", app);
+ Assert.assertEquals("module", module, "fantastic");
+ Assert.assertEquals("component", component, "Blue");
+ }
+
+ }
+}
Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/CleanEnvEntriesTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/CleanEnvEntriesTest.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/CleanEnvEntriesTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/CleanEnvEntriesTest.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,132 @@
+/**
+ * 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.openejb.config;
+
+import junit.framework.TestCase;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.EnvEntryInfo;
+import org.apache.openejb.assembler.classic.JndiEncInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.util.SetAccessible;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.annotation.Resource;
+import javax.ejb.EJBContext;
+import javax.ejb.Singleton;
+import javax.ejb.TransactionManagement;
+import javax.ejb.TransactionManagementType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.UserTransaction;
+import javax.validation.Validator;
+import javax.validation.ValidatorFactory;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class CleanEnvEntriesTest extends TestCase {
+
+ @Test
+ public void test() throws Exception {
+
+ final Assembler assembler = new Assembler();
+ final ConfigurationFactory factory = new ConfigurationFactory();
+
+ final SingletonBean singletonBean = new SingletonBean(Blue.class);
+ // keep
+
+ singletonBean.getEnvEntry().add(new EnvEntry()
+ .name("message")
+ .type(String.class)
+ .value("hello")
+ .injectionTarget(Blue.class, "message")
+ );
+
+ // remove
+ singletonBean.getEnvEntry().add(new EnvEntry().name("novalue1").type(String.class));
+ singletonBean.getEnvEntry().add(new EnvEntry().name("novalue2"));
+
+ // fill in type
+ singletonBean.getEnvEntry().add(new EnvEntry().name("value-but-no-type1").value("10")
+ .injectionTarget(Blue.class, "number")
+ .injectionTarget(Orange.class, "number") // attempt to confuse the type
+ );
+
+ singletonBean.getEnvEntry().add(new EnvEntry().name("value-but-no-type2").value("D")
+ .injectionTarget(Blue.class, "letter"))
+ ;
+
+ singletonBean.getEnvEntry().add(new EnvEntry().name("value-but-no-type3").value("2")
+ .injectionTarget(Blue.class, "vague") // short
+ .injectionTarget(Orange.class, "vague") // character
+ );
+
+ final EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(singletonBean);
+ final EjbJarInfo ejbJarInfo = factory.configureApplication(ejbJar);
+
+ final Map<String, EnvEntryInfo> entries = map(ejbJarInfo.enterpriseBeans.get(0).jndiEnc.envEntries);
+
+ assertNotNull(entries.get("comp/env/control"));
+ assertNotNull(entries.get("comp/env/value-but-no-type1"));
+ assertNotNull(entries.get("comp/env/value-but-no-type2"));
+
+ assertNull(entries.get("comp/env/novalue1"));
+ assertNull(entries.get("comp/env/novalue2"));
+
+ assertEquals(Integer.class.getName(), entries.get("comp/env/value-but-no-type1").type);
+ assertEquals(Character.class.getName(), entries.get("comp/env/value-but-no-type2").type);
+ assertEquals(String.class.getName(), entries.get("comp/env/value-but-no-type3").type);
+ }
+
+ private Map<String, EnvEntryInfo> map(List<EnvEntryInfo> envEntries) {
+ Map<String, EnvEntryInfo> map = new HashMap<String, EnvEntryInfo>();
+ for (EnvEntryInfo entry : envEntries) {
+ map.put(entry.referenceName, entry);
+ }
+ return map;
+ }
+
+
+ public static class Blue {
+ private Character letter;
+ private Short vague;
+
+ public void setNumber(int number) {
+ }
+
+ // False positive if case is not considered
+ public void setNumBer(long number) {
+ }
+ }
+
+ public static class Orange {
+ private Object letter;
+ private Character vague;
+
+ }
+}
Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/VagueEnvEntriesMatchTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/VagueEnvEntriesMatchTest.java?rev=1172164&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/VagueEnvEntriesMatchTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/VagueEnvEntriesMatchTest.java Sun Sep 18 00:58:10 2011
@@ -0,0 +1,83 @@
+/**
+ * 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.openejb.config;
+
+import junit.framework.TestCase;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.assembler.classic.EnvEntryInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.junit.*;
+import org.apache.openejb.junit.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+@RunWith(ApplicationComposer.class)
+public class VagueEnvEntriesMatchTest extends TestCase {
+
+ @EJB
+ public Blue blue;
+
+ @Module
+ public SingletonBean foo() {
+
+ final SingletonBean singletonBean = new SingletonBean(Blue.class);
+
+ singletonBean.getEnvEntry().add(new EnvEntry().name("one").type(String.class).value("hello"));
+ singletonBean.getEnvEntry().add(new EnvEntry().name("two").type(String.class).value("false"));
+ singletonBean.getEnvEntry().add(new EnvEntry().name(Blue.class.getName() + "/two").type(String.class).value("true"));
+
+ return singletonBean;
+ }
+
+ @Test
+ public void test() {
+
+ assertEquals("hello", blue.getOne());
+ assertEquals("true", blue.getTwo());
+ }
+
+
+ public static class Blue {
+
+ @Resource
+ private String one;
+
+ @Resource
+ private String two;
+
+ public String getOne() {
+ return one;
+ }
+
+ public String getTwo() {
+ return two;
+ }
+ }
+
+}
Modified: openejb/trunk/openejb3/tck/cdi-tomee/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/tck/cdi-tomee/pom.xml?rev=1172164&r1=1172163&r2=1172164&view=diff
==============================================================================
--- openejb/trunk/openejb3/tck/cdi-tomee/pom.xml (original)
+++ openejb/trunk/openejb3/tck/cdi-tomee/pom.xml Sun Sep 18 00:58:10 2011
@@ -183,7 +183,6 @@
</execution>
</executions>
</plugin>
-
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>