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;