take a webapp, 2 jar with a persistence.xml. It was taking into account only one of both.
- Romain 2012/3/9 David Blevins <[email protected]> > What issue does this fix? > > -David > > On Mar 6, 2012, at 5:19 AM, [email protected] wrote: > > > Author: rmannibucau > > Date: Tue Mar 6 11:19:07 2012 > > New Revision: 1297428 > > > > URL: http://svn.apache.org/viewvc?rev=1297428&view=rev > > Log: > > multiple persistence.xml can be found in a webapp but getresourcesmap > return maximum one persistence.xml so hacking to let it work > > > > Modified: > > > > openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java > > > > 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=1297428&r1=1297427&r2=1297428&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 > Tue Mar 6 11:19:07 2012 > > @@ -201,11 +201,25 @@ public class DeploymentLoader implements > > final AppModule appModule = new > AppModule(getOpenEJBClassLoader(baseUrl), file.getAbsolutePath(), new > Application(), true); > > addWebModule(appModule, baseUrl, > getOpenEJBClassLoader(baseUrl), getContextRoot(), getModuleName()); > > > > - final Map<String, URL> otherDD; > > + final Map<String, Object> otherDD = new HashMap<String, > Object>(); > > final WebModule webModule = > appModule.getWebModules().iterator().next(); > > final List<URL> urls = webModule.getScannableUrls(); > > final ResourceFinder finder = new ResourceFinder("", > urls.toArray(new URL[urls.size()])); > > - otherDD = getDescriptors(finder, false); > > + otherDD.putAll(getDescriptors(finder, false)); > > + > > + // "persistence.xml" is done separately since we mange > alist of url and not s single url > > + try { > > + final List<URL> persistenceXmls = > finder.findAll(ddDir + "persistence.xml"); > > + if (persistenceXmls.size() > 1) { > > + final URL old = (URL) > otherDD.get("persistence.xml"); > > + if (old != null && > !persistenceXmls.contains(old)) { > > + persistenceXmls.add(old); > > + } > > + otherDD.put("persistence.xml", persistenceXmls); > > + } > > + } catch (IOException e) { > > + // ignored > > + } > > > > addWebPersistenceDD("persistence.xml", otherDD, > appModule); > > addWebPersistenceDD("persistence-fragment.xml", otherDD, > appModule); > > @@ -246,7 +260,7 @@ public class DeploymentLoader implements > > } > > } > > > > - private void addWebPersistenceDD(final String name, final > Map<String, URL> otherDD, final AppModule appModule) { > > + private void addWebPersistenceDD(final String name, final > Map<String, Object> otherDD, final AppModule appModule) { > > if (otherDD.containsKey(name)) { > > List<URL> persistenceUrls = (List<URL>) > appModule.getAltDDs().get(name); > > if (persistenceUrls == null) { > > @@ -255,9 +269,16 @@ public class DeploymentLoader implements > > } > > > > if (otherDD.containsKey(name)) { > > - final URL otherUrl = otherDD.get(name); > > - if (!persistenceUrls.contains(otherUrl)) { > > - persistenceUrls.add(otherUrl); > > + final Object otherUrl = otherDD.get(name); > > + if (otherUrl instanceof URL && > !persistenceUrls.contains(otherUrl)) { > > + persistenceUrls.add((URL) otherUrl); > > + } else if (otherUrl instanceof List) { > > + final List<URL> otherList = (List<URL>) > otherDD.get(name); > > + for (URL url : otherList) { > > + if (!persistenceUrls.contains(url)) { > > + persistenceUrls.add(url); > > + } > > + } > > } > > } > > } > > > > > > > >
