Author: rmannibucau
Date: Wed Dec 19 10:57:57 2012
New Revision: 1423820

URL: http://svn.apache.org/viewvc?rev=1423820&view=rev
Log:
TOMEE-666 trying to resolve persistence unit in a better manner

Added:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceUnitLinkResolver.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ResourcesModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/UriResolver.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/LinkResolver.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UniqueDefaultLinkResolver.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/OpenEjbContainer.java
 Wed Dec 19 10:57:57 2012
@@ -570,12 +570,12 @@ public class OpenEjbContainer extends EJ
                     } else if (modules instanceof Persistence) {
 
                         final Persistence persistence = (Persistence) modules;
-                        appModule.addPersistenceModule(new 
PersistenceModule("", persistence));
+                        appModule.addPersistenceModule(new 
PersistenceModule(appModule, "", persistence));
 
                     } else if (modules instanceof PersistenceUnit) {
 
                         final PersistenceUnit unit = (PersistenceUnit) modules;
-                        appModule.addPersistenceModule(new 
PersistenceModule("", new Persistence(unit)));
+                        appModule.addPersistenceModule(new 
PersistenceModule(appModule, "", new Persistence(unit)));
 
                     } else if (modules instanceof Beans) {
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
 Wed Dec 19 10:57:57 2012
@@ -109,6 +109,11 @@ public class AppModule implements Deploy
         return properties;
     }
 
+    @Override
+    public AppModule appModule() {
+        return this;
+    }
+
     public AppModule(ClassLoader classLoader, String jarLocation, Application 
application, boolean standaloneModule) {
         this.classLoader = classLoader;
         this.application = application;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Wed Dec 19 10:57:57 2012
@@ -203,7 +203,7 @@ public class AutoConfig implements Dynam
     }
 
     private void resolvePersistenceRefs(AppModule appModule) {
-        LinkResolver<PersistenceUnit> persistenceUnits = new 
UniqueDefaultLinkResolver<PersistenceUnit>();
+        LinkResolver<PersistenceUnit> persistenceUnits = new 
PersistenceUnitLinkResolver(appModule);
 
         for (PersistenceModule module : appModule.getPersistenceModules()) {
             String rootUrl = module.getRootUrl();
@@ -235,22 +235,22 @@ public class AutoConfig implements Dynam
 
     private void processPersistenceRefs(JndiConsumer component, 
DeploymentModule module, LinkResolver<PersistenceUnit> persistenceUnits, URI 
moduleURI) {
 
-        String componentName = component.getJndiConsumerName();
-
-        ValidationContext validation = module.getValidation();
+        final String componentName = component.getJndiConsumerName();
+        final ValidationContext validation = module.getValidation();
+        final AppModule appModule = module.appModule();
 
         for (PersistenceRef ref : component.getPersistenceUnitRef()) {
 
-            processPersistenceRef(persistenceUnits, ref, moduleURI, 
componentName, validation);
+            processPersistenceRef(appModule, persistenceUnits, ref, moduleURI, 
componentName, validation);
         }
 
         for (PersistenceRef ref : component.getPersistenceContextRef()) {
 
-            processPersistenceRef(persistenceUnits, ref, moduleURI, 
componentName, validation);
+            processPersistenceRef(appModule, persistenceUnits, ref, moduleURI, 
componentName, validation);
         }
     }
 
-    private PersistenceUnit 
processPersistenceRef(LinkResolver<PersistenceUnit> persistenceUnits, 
PersistenceRef ref, URI moduleURI, String componentName, ValidationContext 
validation) {
+    private PersistenceUnit processPersistenceRef(AppModule appModule, 
LinkResolver<PersistenceUnit> persistenceUnits, PersistenceRef ref, URI 
moduleURI, String componentName, ValidationContext validation) {
 
         if (ref.getMappedName() != null && 
ref.getMappedName().startsWith("jndi:")){
             return null;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ClientModule.java
 Wed Dec 19 10:57:57 2012
@@ -130,5 +130,9 @@ public class ClientModule extends Module
                 '}';
     }
 
+    @Override
+    public AppModule appModule() {
+        return super.getAppModule();
+    }
 
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/CmpJpaConversion.java
 Wed Dec 19 10:57:57 2012
@@ -171,7 +171,7 @@ public class CmpJpaConversion implements
             persistence.setVersion("1.0");
             persistence.getPersistenceUnit().add(persistenceUnit);
 
-            PersistenceModule persistenceModule = new 
PersistenceModule(getPersistenceModuleId(appModule), persistence);
+            PersistenceModule persistenceModule = new 
PersistenceModule(appModule, getPersistenceModuleId(appModule), persistence);
             appModule.addPersistenceModule(persistenceModule);
         }
         return persistenceUnit;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConnectorModule.java
 Wed Dec 19 10:57:57 2012
@@ -93,6 +93,11 @@ public class ConnectorModule extends Mod
     }
 
     @Override
+    public AppModule appModule() {
+        return super.getAppModule();
+    }
+
+    @Override
     public String toString() {
         return "ConnectorModule{" +
                 "moduleId='" + id.getName() + '\'' +

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentModule.java
 Wed Dec 19 10:57:57 2012
@@ -55,6 +55,8 @@ public interface DeploymentModule {
 
     java.util.Properties getProperties();
 
+    AppModule appModule();
+
     class ID {
         private final String name;
         private final File location;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
 Wed Dec 19 10:57:57 2012
@@ -178,4 +178,9 @@ public class EjbModule extends Module im
                 "moduleId='" + id.getName() + '\'' +
                 '}';
     }
+
+    @Override
+    public AppModule appModule() {
+        return super.getAppModule();
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceModule.java
 Wed Dec 19 10:57:57 2012
@@ -30,9 +30,15 @@ public class PersistenceModule implement
     private Persistence persistence;
     private final Set<String> watchedResources = new TreeSet<String>();
     private URI uri;
+    private AppModule appModule;
 
-    public PersistenceModule(String rootUrl, Persistence persistence) {
+    public PersistenceModule(final String rootUrl, final Persistence 
persistence) {
+        this(null, rootUrl, persistence);
+    }
+
+    public PersistenceModule(final AppModule module, final String rootUrl, 
final Persistence persistence) {
         setRootUrl(rootUrl);
+        this.appModule = module;
         this.persistence = persistence;
     }
 
@@ -91,6 +97,11 @@ public class PersistenceModule implement
     }
 
     @Override
+    public AppModule appModule() {
+        return appModule;
+    }
+
+    @Override
     public String toString() {
         return "PersistenceModule{" +
                 "rootUrl='" + rootUrl + '\'' +

Added: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceUnitLinkResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceUnitLinkResolver.java?rev=1423820&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceUnitLinkResolver.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/PersistenceUnitLinkResolver.java
 Wed Dec 19 10:57:57 2012
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.config;
+
+import org.apache.openejb.jee.jpa.unit.Persistence;
+import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
+import org.apache.openejb.util.LinkResolver;
+import org.apache.openejb.util.URLs;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+// TODO: review if some more info shouldn't be propagated to module tree to 
make it faster
+public class PersistenceUnitLinkResolver extends LinkResolver<PersistenceUnit> 
{
+    public PersistenceUnitLinkResolver(final AppModule appModule) {
+        super(appModule);
+    }
+
+    @Override
+    protected Collection<PersistenceUnit> tryToResolveForEar(final 
Collection<PersistenceUnit> values, final URI moduleUri, final String link) {
+        if (module == null || module.isStandaloneModule()) { // can't help
+            return values;
+        }
+
+        final WebModule war = extractWebApp(moduleUri);
+        if (war != null) { // keep only values related to this war
+            final Iterator<PersistenceUnit> it = values.iterator();
+            while (it.hasNext()) {
+                if (!isIn(it.next(), war)) {
+                    it.remove();
+                }
+            }
+            return values;
+        }
+
+        // else remove all webapp info
+        final Iterator<PersistenceUnit> it = values.iterator();
+        while (it.hasNext()) {
+            final PersistenceUnit next = it.next();
+            for (WebModule webModule : module.getWebModules()) {
+                if (isIn(next, webModule)) {
+                    it.remove();
+                }
+            }
+        }
+
+        return values;
+    }
+
+    private boolean isIn(final PersistenceUnit value, final WebModule war) {
+        final Collection<URL> urls = (Collection<URL>) 
war.getAltDDs().get("ear-webapp-persistence-xml-jars");
+        if (urls == null || urls.isEmpty()) {
+            return false;
+        }
+
+        final Collection<String> strUrls = new ArrayList<String>();
+        for (URL url : urls) {
+            strUrls.add(URLs.toFilePath(url));
+        }
+
+        for (PersistenceModule persistenceModule : 
module.getPersistenceModules()) {
+            final Persistence persistence = persistenceModule.getPersistence();
+            final String rootUrl;
+            try {
+                rootUrl = URLs.toFilePath(new 
URL(persistenceModule.getRootUrl()));
+            } catch (MalformedURLException e) {
+                continue;
+            }
+
+            for (PersistenceUnit unit : persistence.getPersistenceUnit()) {
+                if (unit == value) {
+                    if (strUrls.contains(rootUrl)) {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    private WebModule extractWebApp(final URI moduleUri) {
+        if (module == null) {
+            return null;
+        }
+
+        final File appModuleFile = new File(module.getJarLocation());
+
+        final File moduleFile;
+        try {
+            moduleFile = URLs.toFile(moduleUri.toURL());
+        } catch (MalformedURLException e) {
+            return null;
+        }
+
+        for (WebModule webModule : module.getWebModules()) {
+            if (isParent(new File(webModule.getJarLocation()), moduleFile, 
appModuleFile)) { // isParent()
+                return webModule;
+            }
+        }
+
+        return null;
+    }
+
+    private static boolean isParent(final File file, final File moduleFile, 
final File appModuleFile) {
+        File current = file;
+        while (current != null) {
+            if (current.equals(moduleFile)) {
+                return true;
+            }
+
+            if (current.equals(appModuleFile)) {
+                return false;
+            }
+
+            current = current.getParentFile();
+        }
+        return false;
+    }
+}

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ReadDescriptors.java
 Wed Dec 19 10:57:57 2012
@@ -156,7 +156,7 @@ public class ReadDescriptors implements 
 
                 try {
                     Persistence persistence = 
JaxbPersistenceFactory.getPersistence(Persistence.class, source.get());
-                    PersistenceModule persistenceModule = new 
PersistenceModule(rootUrl, persistence);
+                    PersistenceModule persistenceModule = new 
PersistenceModule(appModule, rootUrl, persistence);
                     persistenceModule.getWatchedResources().add(moduleName);
                     if (url && "file".equals(((URL) 
persistenceUrl).getProtocol())) {
                         persistenceModule.getWatchedResources().add(path);

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ResourcesModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ResourcesModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ResourcesModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ResourcesModule.java
 Wed Dec 19 10:57:57 2012
@@ -52,4 +52,9 @@ public class ResourcesModule extends Mod
     public Set<String> getWatchedResources() {
         return null;
     }
+
+    @Override
+    public AppModule appModule() {
+        return super.getAppModule();
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
 Wed Dec 19 10:57:57 2012
@@ -240,4 +240,9 @@ public class WebModule extends Module im
     public Set<String> getJaxrsProviders() {
         return jaxrsProviders;
     }
+
+    @Override
+    public AppModule appModule() {
+        return super.getAppModule();
+    }
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/UriResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/UriResolver.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/UriResolver.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/webservices/UriResolver.java
 Wed Dec 19 10:57:57 2012
@@ -19,6 +19,7 @@ package org.apache.openejb.core.webservi
 import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.util.Base64;
+import org.apache.xbean.finder.archive.FileArchive;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -101,7 +102,7 @@ public class UriResolver {
             if (uriFile.exists()) {
                 relative = uriFile.toURI();
             } else {
-                relative = new URI(uriStr.replaceAll(" ", "%20"));
+                relative = new URI(FileArchive.decode(uriStr));
             }
 
             if (relative.isAbsolute()) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/junit/ApplicationComposer.java
 Wed Dec 19 10:57:57 2012
@@ -407,12 +407,12 @@ public class ApplicationComposer extends
                 } else if (obj instanceof Persistence) {
 
                     final Persistence persistence = (Persistence) obj;
-                    appModule.addPersistenceModule(new 
PersistenceModule(implicitRootUrl(), persistence));
+                    appModule.addPersistenceModule(new 
PersistenceModule(appModule, implicitRootUrl(), persistence));
 
                 } else if (obj instanceof PersistenceUnit) {
 
                     final PersistenceUnit unit = (PersistenceUnit) obj;
-                    appModule.addPersistenceModule(new 
PersistenceModule(implicitRootUrl(), new Persistence(unit)));
+                    appModule.addPersistenceModule(new 
PersistenceModule(appModule, implicitRootUrl(), new Persistence(unit)));
 
                 } else if (obj instanceof Beans) {
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/AnnotationFinder.java
 Wed Dec 19 10:57:57 2012
@@ -23,6 +23,7 @@ import org.apache.xbean.asm.ClassVisitor
 import org.apache.xbean.asm.FieldVisitor;
 import org.apache.xbean.asm.MethodVisitor;
 import org.apache.xbean.finder.UrlSet;
+import org.apache.xbean.finder.archive.FileArchive;
 
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -40,7 +41,6 @@ import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.JarInputStream;
-import java.util.logging.*;
 
 /**
  * ClassFinder searches the classpath of the specified classloader for
@@ -61,7 +61,6 @@ public class AnnotationFinder {
     private final ClassLoader classLoader;
     private final List<String> classesNotLoaded = new ArrayList<String>();
     private final int ASM_FLAGS = ClassReader.SKIP_CODE + 
ClassReader.SKIP_DEBUG + ClassReader.SKIP_FRAMES;
-    private final Collection<URL> urls;
     private List<String> classNames;
 
     /**
@@ -112,7 +111,6 @@ public class AnnotationFinder {
 
     public AnnotationFinder(final ClassLoader classLoader, final 
Collection<URL> urls) {
         this.classLoader = classLoader;
-        this.urls = urls;
         classNames = new ArrayList<String>();
         for (final URL location : urls) {
             if (location == null) {
@@ -162,6 +160,7 @@ public class AnnotationFinder {
             try {
                 readClassDef(className, annotationVisitor);
             } catch (NotFoundException e) {
+                // no-op
             } catch (FoundException e) {
                 return true;
             }
@@ -220,12 +219,12 @@ public class AnnotationFinder {
 
     private List<String> jar(final URL location) throws IOException {
         String jarPath = location.getFile();
-        if (jarPath.indexOf("!") > -1){
+        if (jarPath.contains("!")){
             jarPath = jarPath.substring(0, jarPath.indexOf("!"));
         }
         final URL url = new URL(jarPath);
         if ("file".equals(url.getProtocol())) { // ZipFile is faster than 
ZipInputStream
-            final JarFile jarFile = new JarFile(url.getFile().replace("%20", " 
"));
+            final JarFile jarFile = new 
JarFile(FileArchive.decode(url.getFile()));
             return jar(jarFile);
         } else {
             InputStream in = url.openStream();

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/LinkResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/LinkResolver.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/LinkResolver.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/LinkResolver.java
 Wed Dec 19 10:57:57 2012
@@ -16,19 +16,29 @@
  */
 package org.apache.openejb.util;
 
-import org.apache.openejb.loader.JarLocation;
+import org.apache.openejb.config.AppModule;
+import org.apache.xbean.finder.archive.FileArchive;
 
-import java.io.File;
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Map;
 import java.util.TreeMap;
-import java.util.Collections;
-import java.net.URI;
+
 
 public class LinkResolver<E> {
     private final Map<URI, E> byFullName = new TreeMap<URI, E>();
     private final Map<String, Collection<E>> byShortName = new TreeMap<String, 
Collection<E>>();
+    protected final AppModule module;
+
+    public LinkResolver() {
+        this(null);
+    }
+
+    public LinkResolver(final AppModule o) {
+        module = o;
+    }
 
     public boolean add(String modulePackageName, String name, E value) {
         return add(URI.create(modulePackageName), name, value);
@@ -57,9 +67,8 @@ public class LinkResolver<E> {
     }
 
     private URI resolve(URI moduleURI, String name) {
-        name = name.replaceAll(" ", "%20");
-        URI uri = moduleURI.resolve("#" + name);
-        return uri;
+        name = FileArchive.decode(name);
+        return moduleURI.resolve("#" + name);
     }
 
     public Collection<E> values() {
@@ -89,7 +98,13 @@ public class LinkResolver<E> {
 
             // check for single value using short name
             Collection<E> values = byShortName.get(link);
-            if (values == null || values.size() != 1) {
+            if (values == null) {
+                return null;
+            }
+            if (values.size() > 1) {
+                values = tryToResolveForEar(values, moduleUri, link);
+            }
+            if (values.size() != 1) {
                 return null;
             }
             value = values.iterator().next();
@@ -97,14 +112,18 @@ public class LinkResolver<E> {
         } else if (moduleUri != null) {
             // full (absolute) name
             URI uri = moduleUri.resolve(link);
-            E value = byFullName.get(uri);
-            return value;
+            return byFullName.get(uri);
         } else {
             // Absolute reference in a standalone module
             return null;
         }
     }
 
+    // mainly to let children add some check here
+    protected Collection<E> tryToResolveForEar(final Collection<E> values, 
final URI moduleUri, final String link) {
+        return values;
+    }
+
     protected E getUniqueMember() {
         if (byFullName.size() == 1) {
             return byFullName.values().iterator().next();
@@ -112,5 +131,4 @@ public class LinkResolver<E> {
             return null;
         }
     }
-
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UniqueDefaultLinkResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UniqueDefaultLinkResolver.java?rev=1423820&r1=1423819&r2=1423820&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UniqueDefaultLinkResolver.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UniqueDefaultLinkResolver.java
 Wed Dec 19 10:57:57 2012
@@ -18,6 +18,7 @@
 
 package org.apache.openejb.util;
 
+import org.apache.openejb.config.AppModule;
 import org.apache.openejb.util.LinkResolver;
 
 import java.net.URI;
@@ -26,6 +27,13 @@ import java.net.URI;
  * @version $Rev$ $Date$
  */
 public class UniqueDefaultLinkResolver<E> extends LinkResolver<E> {
+    public UniqueDefaultLinkResolver() {
+        this(null);
+    }
+
+    public UniqueDefaultLinkResolver(final AppModule appModule) {
+        super(appModule);
+    }
 
     public E resolveLink(String link, URI moduleUri) {
         //jpa anyway has a default matching rule


Reply via email to