I swear I thought we supported that.  Humm..

We should definitely add a unit test.  A very big thing to be missing if that's 
the case.  Sounds like we also need a bug JIRA.


-David

On Mar 9, 2012, at 1:51 AM, Romain Manni-Bucau wrote:

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

Reply via email to