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