Author: rmannibucau
Date: Wed Aug  7 06:20:41 2013
New Revision: 1511188

URL: http://svn.apache.org/r1511188
Log:
TOMEE-1017 web fragments should consider adding an entry if not already here 
only

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java?rev=1511188&r1=1511187&r2=1511188&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 Wed Aug  7 06:20:41 2013
@@ -29,8 +29,8 @@ import org.apache.openejb.jee.FacesConfi
 import org.apache.openejb.jee.HandlerChains;
 import org.apache.openejb.jee.JavaWsdlMapping;
 import org.apache.openejb.jee.JaxbJavaee;
+import org.apache.openejb.jee.Keyable;
 import org.apache.openejb.jee.Listener;
-import org.apache.openejb.jee.PersistenceContextRef;
 import org.apache.openejb.jee.TldTaglib;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.jee.WebFragment;
@@ -79,6 +79,7 @@ import java.net.URL;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 public class ReadDescriptors implements DynamicDeployer {
     private static final Logger logger = 
Logger.getInstance(LogCategory.OPENEJB_STARTUP, ReadDescriptors.class);
@@ -562,14 +563,16 @@ public class ReadDescriptors implements 
                     final Source url = getSource(rawUrl);
                     try {
                         final WebFragment webFragment = 
JaxbOpenejb.unmarshal(WebFragment.class, url.get());
-                        
webModule.getWebApp().getPersistenceContextRef().addAll(webFragment.getPersistenceContextRef());
-                        
webModule.getWebApp().getPersistenceUnitRef().addAll(webFragment.getPersistenceUnitRef());
-                        
webModule.getWebApp().getMessageDestinationRef().addAll(webFragment.getMessageDestinationRef());
-                        
webModule.getWebApp().getDataSource().addAll(webFragment.getDataSource());
-                        
webModule.getWebApp().getEjbLocalRef().addAll(webFragment.getEjbLocalRef());
-                        
webModule.getWebApp().getEjbRef().addAll(webFragment.getEjbRef());
-                        
webModule.getWebApp().getEnvEntry().addAll(webFragment.getEnvEntry());
-                        
webModule.getWebApp().getServiceRef().addAll(webFragment.getServiceRef());
+
+                        // in tomcat if the env entry is already don't 
override it
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getPersistenceContextRefMap(), 
webFragment.getPersistenceContextRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getPersistenceUnitRefMap(), 
webFragment.getPersistenceUnitRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getMessageDestinationRefMap(), 
webFragment.getMessageDestinationRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getDataSourceMap(), 
webFragment.getDataSource());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getEjbLocalRefMap(), 
webFragment.getEjbLocalRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getEjbRefMap(), 
webFragment.getEjbRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getServiceRefMap(), 
webFragment.getServiceRef());
+                        
mergeOnlyMissingEntries(webModule.getWebApp().getEnvEntryMap(), 
webFragment.getEnvEntry());
                     } catch (final Exception e) {
                         logger.warning("can't read " + url.toString(), e);
                     }
@@ -578,6 +581,15 @@ public class ReadDescriptors implements 
         }
     }
 
+    private static <A extends Keyable<String>> void 
mergeOnlyMissingEntries(final Map<String, A> existing, final Collection<A> 
news) {
+        for (final A entry : news) {
+            final String key = entry.getKey();
+            if (!existing.containsKey(key)) {
+                existing.put(key, entry);
+            }
+        }
+    }
+
     public static ApplicationClient readApplicationClient(final URL url) 
throws OpenEJBException {
         final ApplicationClient applicationClient;
         try {


Reply via email to