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