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 {