Author: gawor
Date: Mon Sep 20 18:30:30 2010
New Revision: 999043
URL: http://svn.apache.org/viewvc?rev=999043&view=rev
Log:
OPENEJB-1362: Ejbs in jars within a war file are considered part of the same
module
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=999043&r1=999042&r2=999043&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
Mon Sep 20 18:30:30 2010
@@ -25,6 +25,7 @@ import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -165,11 +166,9 @@ public class DeploymentLoader {
return new AppModule(connectorModule);
} else if (WebModule.class.equals(moduleClass)) {
final File file = toFile(baseUrl);
- String moduleId = file.getName();
- String warPath = URLs.toFilePath(baseUrl);
AppModule appModule = new
AppModule(OpenEJB.class.getClassLoader(), file.getAbsolutePath());
- addWebModule(appModule, warPath,
OpenEJB.class.getClassLoader(), null, moduleId);
+ addWebModule(appModule, baseUrl,
OpenEJB.class.getClassLoader(), null, null);
return appModule;
} else if (PersistenceModule.class.equals(moduleClass)) {
String jarLocation = URLs.toFilePath(baseUrl);
@@ -397,7 +396,7 @@ public class DeploymentLoader {
for (String moduleName : webModules.keySet()) {
try {
URL warUrl = webModules.get(moduleName);
- addWebModule(appModule, URLs.toFilePath(warUrl),
appClassLoader, webContextRoots.get(moduleName), moduleName);
+ addWebModule(appModule, warUrl, appClassLoader,
webContextRoots.get(moduleName), moduleName);
} catch (OpenEJBException e) {
logger.error("Unable to load WAR: " + appId + ", module: "
+ moduleName + ". Exception: " + e.getMessage(), e);
}
@@ -483,55 +482,61 @@ public class DeploymentLoader {
addWebservices(ejbModule);
return ejbModule;
}
-
- protected void addWebModule(AppModule appModule, String warPath,
ClassLoader parentClassLoader, String contextRoot, String moduleName) throws
OpenEJBException {
+
+ protected void addWebModule(AppModule appModule, URL warUrl, ClassLoader
parentClassLoader, String contextRoot, String moduleName) throws
OpenEJBException {
+ String warPath = URLs.toFilePath(warUrl);
WebModule webModule = createWebModule(appModule.getJarLocation(),
warPath, parentClassLoader, contextRoot, moduleName);
appModule.getWebModules().add(webModule);
ClassLoader webClassLoader = webModule.getClassLoader();
- // get urls in web application
- List<URL> urls = null;
- try {
- UrlSet urlSet = new UrlSet(webClassLoader);
- urlSet = urlSet.exclude(webClassLoader.getParent());
- urls = urlSet.getUrls();
- } catch (IOException e) {
- logger.warning("Unable to determine URLs in classloader", e);
- }
-
- // clean jar URLs
- for (int i = 0; i < urls.size(); i++) {
- URL url = urls.get(i);
- if (url.getProtocol().equals("jar")) {
+ boolean addEjbModule = false;
+ EjbJar ejbJar = null;
+ URL ejbJarXmlUrl = (URL) webModule.getAltDDs().get("ejb-jar.xml");
+ if (ejbJarXmlUrl == null) {
+ if (webModule.getWebApp() != null &&
webModule.getWebApp().isMetadataComplete()) {
+ addEjbModule = false;
+ } else {
+ // get urls in web application
+ List<URL> urls = null;
try {
- url = new URL(url.getFile().replaceFirst("!.*$", ""));
- urls.set(i, url);
- } catch (MalformedURLException ignored) {
+ UrlSet urlSet = new UrlSet(webClassLoader);
+ urlSet =
urlSet.exclude(webClassLoader.getParent().getParent());
+ urls = urlSet.getUrls();
+ } catch (IOException e) {
+ logger.warning("Unable to determine URLs in classloader",
e);
}
- }
- }
-
- // check each url to determine if it is an ejb jar
- for (URL ejbUrl : urls) {
- try {
- Class moduleType = discoverModuleType(ejbUrl, webClassLoader,
true);
- if (EjbModule.class.isAssignableFrom(moduleType)) {
- File ejbFile = toFile(ejbUrl);
- String absolutePath = ejbFile.getAbsolutePath();
-
- EjbModule ejbModule = createEjbModule(ejbUrl,
absolutePath, webClassLoader, null);
- appModule.getEjbModules().add(ejbModule);
+ // clean jar URLs
+ for (int i = 0; i < urls.size(); i++) {
+ URL url = urls.get(i);
+ if (url.getProtocol().equals("jar")) {
+ try {
+ url = new URL(url.getFile().replaceFirst("!.*$",
""));
+ urls.set(i, url);
+ } catch (MalformedURLException ignored) {
+ }
+ }
}
- } catch (IOException e) {
- } catch (UnknownModuleTypeException ignore) {
+
+ addEjbModule = checkAnnotations(urls, webClassLoader, true,
false) != null;
}
+ } else {
+ addEjbModule = true;
+ ejbJar = ReadDescriptors.readEjbJar(ejbJarXmlUrl);
}
-
+
+ if (addEjbModule) {
+ EjbModule ejbModule = new EjbModule(webClassLoader,
webModule.getModuleId(), warPath, ejbJar, null);
+ ejbModule.getAltDDs().putAll(webModule.getAltDDs());
+
+ addWebservices(ejbModule);
+
+ appModule.getEjbModules().add(ejbModule);
+ }
+
// Persistence Units
addPersistenceUnits(appModule);
-
}
protected static WebModule createWebModule(String appId, String warPath,
ClassLoader parentClassLoader, String contextRoot, String moduleName) throws
OpenEJBException {
@@ -552,11 +557,6 @@ public class DeploymentLoader {
webApp = ReadDescriptors.readWebApp(webXmlUrl);
}
- // if this is a standalone module (no-context root), and webApp.getId
is set then that is the module name
- if (contextRoot == null && webApp != null && webApp.getId() != null) {
- moduleName = webApp.getId();
- }
-
// determine war class path
URL[] webUrls = getWebappUrls(warFile);
ClassLoader warClassLoader =
ClassLoaderUtil.createTempClassLoader(appId, webUrls, parentClassLoader);
@@ -1164,14 +1164,6 @@ public class DeploymentLoader {
return AppModule.class;
}
- if (descriptors.containsKey("ejb-jar.xml")) {
- return EjbModule.class;
- }
- if (preferEjb) {
- Class<? extends DeploymentModule> cls = checkAnnotations(baseUrl,
classLoader, scanPotentialEjbModules, scanPotentialClientModules);
- if (cls != null) return cls;
- }
-
if (descriptors.containsKey("application-client.xml")) {
return ClientModule.class;
}
@@ -1185,6 +1177,10 @@ public class DeploymentLoader {
return WebModule.class;
}
+ if (descriptors.containsKey("ejb-jar.xml")) {
+ return EjbModule.class;
+ }
+
URL manifestUrl = descriptors.get("MANIFEST.MF");
if (scanPotentialClientModules && manifestUrl != null) {
// In this case scanPotentialClientModules really means "require
application-client.xml"
@@ -1196,10 +1192,8 @@ public class DeploymentLoader {
}
}
- if (!preferEjb) {
- Class<? extends DeploymentModule> cls = checkAnnotations(baseUrl,
classLoader, scanPotentialEjbModules, scanPotentialClientModules);
- if (cls != null) return cls;
- }
+ Class<? extends DeploymentModule> cls =
checkAnnotations(Arrays.asList(baseUrl), classLoader, scanPotentialEjbModules,
scanPotentialClientModules);
+ if (cls != null) return cls;
if (descriptors.containsKey("persistence.xml")) {
return PersistenceModule.class;
@@ -1208,10 +1202,10 @@ public class DeploymentLoader {
throw new UnknownModuleTypeException("Unknown module type: url=" +
baseUrl.toExternalForm());
}
- private Class<? extends DeploymentModule> checkAnnotations(URL baseUrl,
ClassLoader classLoader, final boolean scanPotentialEjbModules, final boolean
scanPotentialClientModules) {
+ private Class<? extends DeploymentModule> checkAnnotations(Collection<URL>
urls, ClassLoader classLoader, final boolean scanPotentialEjbModules, final
boolean scanPotentialClientModules) {
Class<? extends DeploymentModule> cls = null;
if (scanPotentialEjbModules || scanPotentialClientModules) {
- AnnotationFinder classFinder = new AnnotationFinder(classLoader,
baseUrl);
+ AnnotationFinder classFinder = new AnnotationFinder(classLoader,
urls);
final Set<Class<? extends DeploymentModule>> otherTypes = new
LinkedHashSet();
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=999043&r1=999042&r2=999043&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
Mon Sep 20 18:30:30 2010
@@ -80,6 +80,9 @@ public class WebModule implements WsModu
if (moduleId.endsWith(".unpacked")) {
moduleId = moduleId.substring(0, moduleId.length() -
".unpacked".length());
}
+ if (moduleId.endsWith(".war")) {
+ moduleId = moduleId.substring(0, moduleId.length() -
".war".length());
+ }
}
}