You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2011/12/09 14:16:13 UTC
svn commit: r1212392 - in
/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb:
assembler/classic/ config/ core/ core/ivm/naming/
Author: rmannibucau
Date: Fri Dec 9 13:16:12 2011
New Revision: 1212392
URL: http://svn.apache.org/viewvc?rev=1212392&view=rev
Log:
temporary workaround. Comp bean contains foo/aqualifiedejbname and foo/aqualifiedejbname/injectionfield. This fix skips the injection to be able to deploy the app since we doesn't need this functionality in general -> To fix in a better way
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CompManagedBean.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=1212392&r1=1212391&r2=1212392&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Fri Dec 9 13:16:12 2011
@@ -78,6 +78,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
/**
* TODO: This class is essentially an over glorified sym-linker. The names we were linking to are no longer guaranteed to be what we assume them to be. We need to come up with a
@@ -172,7 +173,7 @@ public class JndiEncBuilder {
}
public Map<String, Object> buildMap() throws OpenEJBException {
- Map<String, Object> bindings = new HashMap<String, Object>();
+ Map<String, Object> bindings = new TreeMap<String, Object>(); // let it be sorted for real binding
// get JtaEntityManagerRegistry
JtaEntityManagerRegistry jtaEntityManagerRegistry = SystemInstance.get().getComponent(JtaEntityManagerRegistry.class);
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1212392&r1=1212391&r2=1212392&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Fri Dec 9 13:16:12 2011
@@ -22,6 +22,7 @@ import org.apache.openejb.api.LocalClien
import org.apache.openejb.api.Proxy;
import org.apache.openejb.api.RemoteClient;
import org.apache.openejb.cdi.CdiBeanInfo;
+import org.apache.openejb.core.CompManagedBean;
import org.apache.openejb.core.webservices.JaxWsUtils;
import org.apache.openejb.jee.ActivationConfig;
import org.apache.openejb.jee.ActivationSpec;
@@ -1093,7 +1094,7 @@ public class
id += "_test";
}
final String name = BeanContext.Comp.openejbCompName(id);
- final org.apache.openejb.jee.ManagedBean managedBean = new org.apache.openejb.jee.ManagedBean(name, BeanContext.Comp.class);
+ final org.apache.openejb.jee.ManagedBean managedBean = new CompManagedBean(name, BeanContext.Comp.class);
managedBean.setTransactionType(TransactionType.BEAN);
ejbModule.getEjbJar().addEnterpriseBean(managedBean);
} else {
@@ -2294,7 +2295,6 @@ public class
try {
if (BeanContext.Comp.class.getName().equals(bean.getEjbClass())) {
buildAnnotatedRefs(bean, ejbModule.getFinder(), classLoader);
- removeExtendedPersistenceContext(bean);
}
} catch (OpenEJBException e) {
logger.error("Processing of @Resource, @EJB, and other references failed for CDI managed beans", e);
@@ -2361,17 +2361,6 @@ public class
return ejbModule;
}
- private void removeExtendedPersistenceContext(JndiConsumer consumer) {
- final Map<String,PersistenceContextRef> map = consumer.getPersistenceContextRefMap();
- final Set<String> keys = new HashSet<String>(map.keySet());
- for (String key : keys) {
- final PersistenceContextRef ref = map.get(key);
- if (null != ref && PersistenceContextType.EXTENDED.equals(ref.getPersistenceContextType())) {
- map.remove(key);
- }
- }
- }
-
private void processAsynchronous(EnterpriseBean bean, AnnotationFinder annotationFinder) {
if (!(bean instanceof SessionBean)) {
return;
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1212392&r1=1212391&r2=1212392&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Fri Dec 9 13:16:12 2011
@@ -281,7 +281,10 @@ public class DeploymentLoader implements
}
}
if (otherDD.containsKey("persistence.xml")) {
- persistenceUrls.add(otherDD.get("persistence.xml"));
+ final URL otherUrl = otherDD.get("persistence.xml");
+ if (!persistenceUrls.contains(otherUrl)) {
+ persistenceUrls.add(otherDD.get("persistence.xml"));
+ }
}
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java?rev=1212392&r1=1212391&r2=1212392&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/MergeWebappJndiContext.java Fri Dec 9 13:16:12 2011
@@ -20,9 +20,10 @@ 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.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceContextType;
import org.apache.openejb.jee.ResourceEnvRef;
import org.apache.openejb.jee.ResourceRef;
import org.apache.openejb.jee.TransactionType;
@@ -32,9 +33,6 @@ import javax.ejb.EntityContext;
import javax.ejb.MessageDrivenContext;
import javax.ejb.SessionContext;
import javax.transaction.UserTransaction;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Iterator;
import java.util.Map;
/**
@@ -129,7 +127,9 @@ public class MergeWebappJndiContext impl
// New entry
if (b == null) {
- to.put(a.getKey(), a);
+ if (!isExtendedPersistenceContext(a)) {
+ to.put(a.getKey(), a);
+ }
continue;
}
@@ -154,6 +154,11 @@ public class MergeWebappJndiContext impl
}
}
+ private static <R extends JndiReference> boolean isExtendedPersistenceContext(R b) {
+ return b instanceof PersistenceContextRef
+ && PersistenceContextType.EXTENDED.equals(((PersistenceContextRef) b).getPersistenceContextType());
+ }
+
private <R extends JndiReference> boolean isPrivateReference(R a) {
if (!isResourceRef(a)) return false;
Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CompManagedBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CompManagedBean.java?rev=1212392&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CompManagedBean.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/CompManagedBean.java Fri Dec 9 13:16:12 2011
@@ -0,0 +1,128 @@
+package org.apache.openejb.core;
+
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.jee.KeyedCollection;
+import org.apache.openejb.jee.ManagedBean;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceContextType;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author rmannibucau
+ */
+public class CompManagedBean extends ManagedBean {
+ public CompManagedBean(String name, Class<BeanContext.Comp> compClass) {
+ super(name, compClass);
+ }
+
+ @Override
+ public Collection<PersistenceContextRef> getPersistenceContextRef() {
+ if (persistenceContextRef == null) {
+ persistenceContextRef = new NoExtendedKeyedCollection();
+ }
+ return this.persistenceContextRef;
+ }
+
+ @Override
+ public Map<String, PersistenceContextRef> getPersistenceContextRefMap() {
+ if (persistenceContextRef == null) {
+ persistenceContextRef = new NoExtendedKeyedCollection();
+ }
+ return this.persistenceContextRef.toMap();
+ }
+
+ private static class NoExtendedKeyedCollection extends KeyedCollection<String, PersistenceContextRef> {
+ @Override
+ public boolean add(PersistenceContextRef value) {
+ if (!PersistenceContextType.EXTENDED.equals(value.getPersistenceContextType())
+ && !super.contains(value)) {
+ return super.add(value);
+ }
+ return false;
+ }
+
+ @Override
+ public Map<String, PersistenceContextRef> toMap() {
+ return new NoExtendedMap(super.toMap());
+ }
+
+ private static class NoExtendedMap implements Map<String, PersistenceContextRef> {
+ private Map<String, PersistenceContextRef> delegate;
+
+ public NoExtendedMap(Map<String, PersistenceContextRef> map) {
+ delegate = map;
+ }
+
+ @Override
+ public int size() {
+ return delegate.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return delegate.isEmpty();
+ }
+
+ @Override
+ public boolean containsKey(Object key) {
+ return delegate.containsKey(key);
+ }
+
+ @Override
+ public boolean containsValue(Object value) {
+ return delegate.containsValue(value);
+ }
+
+ @Override
+ public PersistenceContextRef get(Object key) {
+ return delegate.get(key);
+ }
+
+ @Override
+ public PersistenceContextRef put(String key, PersistenceContextRef value) {
+ if (!PersistenceContextType.EXTENDED.equals(value.getPersistenceContextType())
+ && !delegate.containsValue(key)) {
+ return delegate.put(key, value);
+ }
+ return null;
+ }
+
+ @Override
+ public PersistenceContextRef remove(Object key) {
+ return delegate.remove(key);
+ }
+
+ @Override
+ public void putAll(Map<? extends String, ? extends PersistenceContextRef> m) {
+ for (Map.Entry<? extends String, ? extends PersistenceContextRef> entry : m.entrySet()) {
+ put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ @Override
+ public void clear() {
+ delegate.clear();
+ }
+
+ @Override
+ public Set<String> keySet() {
+ return delegate.keySet();
+ }
+
+ @Override
+ public Collection<PersistenceContextRef> values() {
+ return delegate.values();
+ }
+
+ @Override
+ public Set<Entry<String, PersistenceContextRef>> entrySet() {
+ return delegate.entrySet();
+ }
+ }
+ }
+}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java?rev=1212392&r1=1212391&r2=1212392&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmJndiFactory.java Fri Dec 9 13:16:12 2011
@@ -56,6 +56,11 @@ public class IvmJndiFactory implements J
String name = entry.getKey();
Object value = entry.getValue();
if (value == null) continue;
+
+ if (containsParent(bindings, name)) {
+ continue; // TODO: find a good solution since this one is ugly and not fully working
+ }
+
try {
context.bind(name, value);
} catch (javax.naming.NamingException e) {
@@ -66,6 +71,18 @@ public class IvmJndiFactory implements J
return context;
}
+ private static boolean containsParent(Map<String, Object> bindings, String name) {
+ String workStr = name;
+ if (workStr.startsWith("/")) {
+ workStr = workStr.substring(1);
+ }
+ int index = workStr.lastIndexOf("/");
+ if (index > 0) {
+ workStr = workStr.substring(0, index);
+ }
+ return bindings.containsKey(workStr);
+ }
+
public Context createRootContext() {
return jndiRootContext;
}