You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by xu...@apache.org on 2010/12/22 03:52:24 UTC
svn commit: r1051738 -
/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
Author: xuhaihong
Date: Wed Dec 22 02:52:24 2010
New Revision: 1051738
URL: http://svn.apache.org/viewvc?rev=1051738&view=rev
Log:
OPENEJB-1413 a. Add a loadingRequiredModuleTypes constructor argument, it will be used for identifying which module is required to load
b. Remove some 'private static' key words
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.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=1051738&r1=1051737&r2=1051738&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 Wed Dec 22 02:52:24 2010
@@ -17,6 +17,34 @@
*/
package org.apache.openejb.config;
+import static org.apache.openejb.util.URLs.toFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+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;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+
+import javax.xml.bind.JAXBException;
+
import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.OpenEJB;
import org.apache.openejb.OpenEJBException;
@@ -43,52 +71,62 @@ import org.apache.openejb.util.JarExtrac
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.URLs;
-import static org.apache.openejb.util.URLs.toFile;
import org.apache.openejb.util.UrlCache;
import org.apache.xbean.finder.ResourceFinder;
import org.apache.xbean.finder.UrlSet;
import org.xml.sax.SAXException;
-import javax.xml.bind.JAXBException;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-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;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.jar.Attributes;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-
/**
* @version $Revision$ $Date$
*/
public class DeploymentLoader {
public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
+ public static final Set<Class<? extends DeploymentModule>> ALL_SUPPORTED_MODULE_TYPES;
private static final String OPENEJB_ALTDD_PREFIX = "openejb.altdd.prefix";
private final String ddDir;
private boolean scanManagedBeans = true;
+ private Set<Class<? extends DeploymentModule>> loadingRequiredModuleTypes;
+
+ static {
+ Set<Class<? extends DeploymentModule>> supportedModuleTypes = new HashSet<Class<? extends DeploymentModule>>();
+ supportedModuleTypes.add(AppModule.class);
+ supportedModuleTypes.add(ClientModule.class);
+ supportedModuleTypes.add(ConnectorModule.class);
+ supportedModuleTypes.add(WebModule.class);
+ supportedModuleTypes.add(EjbModule.class);
+ supportedModuleTypes.add(ClientModule.class);
+ supportedModuleTypes.add(PersistenceModule.class);
+ supportedModuleTypes.add(WsModule.class);
+ ALL_SUPPORTED_MODULE_TYPES = Collections.unmodifiableSet(supportedModuleTypes);
+ }
public DeploymentLoader() {
- this("META-INF/");
+ this("META-INF/", ALL_SUPPORTED_MODULE_TYPES);
}
public DeploymentLoader(String ddDir) {
+ this(ddDir, ALL_SUPPORTED_MODULE_TYPES);
+ }
+
+ public DeploymentLoader(String ddDir, Set<Class<? extends DeploymentModule>> loadingRequiredModuleTypes) {
this.ddDir = ddDir;
+ //Might always need AppModule, as without it, we might ignore the EAR type application
+ if(loadingRequiredModuleTypes == ALL_SUPPORTED_MODULE_TYPES) {
+ this.loadingRequiredModuleTypes = loadingRequiredModuleTypes;
+ } else {
+ this.loadingRequiredModuleTypes = new HashSet<Class<? extends DeploymentModule>>(loadingRequiredModuleTypes);
+ this.loadingRequiredModuleTypes.add(AppModule.class);
+ if (this.loadingRequiredModuleTypes.contains(WsModule.class)
+ && !this.loadingRequiredModuleTypes.contains(EjbModule.class)) {
+ logger.warning("Could not load web service module without loading ejb module");
+ this.loadingRequiredModuleTypes.add(EjbModule.class);
+ }
+ if (this.loadingRequiredModuleTypes.contains(WsModule.class)
+ && !this.loadingRequiredModuleTypes.contains(WebModule.class)) {
+ logger.warning("Could not load web service module without loading web module");
+ this.loadingRequiredModuleTypes.add(WebModule.class);
+ }
+ }
}
public void setScanManagedBeans(boolean scan) {
@@ -118,7 +156,7 @@ public class DeploymentLoader {
try {
// determine the module type
- Class moduleClass;
+ Class<? extends DeploymentModule> moduleClass;
try {
// TODO: ClassFinder is leaking file locks, so copy the jar to a temp dir
@@ -152,40 +190,49 @@ public class DeploymentLoader {
}
}
- if (AppModule.class.equals(moduleClass)) {
+ if (AppModule.class.equals(moduleClass) && loadingRequiredModuleTypes.contains(AppModule.class)) {
return createAppModule(jarFile, jarPath);
- } else if (EjbModule.class.equals(moduleClass)) {
+ } else if (EjbModule.class.equals(moduleClass) && (loadingRequiredModuleTypes.contains(EjbModule.class) || loadingRequiredModuleTypes.contains(PersistenceModule.class))) {
ClassLoader classLoader = ClassLoaderUtil.createTempClassLoader(jarPath, new URL[]{baseUrl}, OpenEJB.class.getClassLoader());
- EjbModule ejbModule = createEjbModule(baseUrl, jarPath, classLoader, null);
- // wrap the EJB Module with an Application Module
- AppModule appModule = new AppModule(ejbModule);
+ AppModule appModule;
+ if (loadingRequiredModuleTypes.contains(EjbModule.class)) {
+ EjbModule ejbModule = createEjbModule(baseUrl, jarPath, classLoader, null);
- // Persistence Units
- addPersistenceUnits(appModule, baseUrl);
+ // wrap the EJB Module with an Application Module
+ appModule = new AppModule(ejbModule);
+ } else {
+ appModule = new AppModule(classLoader, jarPath, new Application(), true);
+ }
+
+ if (loadingRequiredModuleTypes.contains(PersistenceModule.class)) {
+ // Persistence Units
+ addPersistenceUnits(appModule, baseUrl);
+ }
return appModule;
- } else if (ClientModule.class.equals(moduleClass)) {
+ } else if (ClientModule.class.equals(moduleClass) && loadingRequiredModuleTypes.contains(ClientModule.class)) {
String jarLocation = URLs.toFilePath(baseUrl);
ClientModule clientModule = createClientModule(baseUrl, jarLocation, OpenEJB.class.getClassLoader(), null);
// Wrap the resource module with an Application Module
return new AppModule(clientModule);
- } else if (ConnectorModule.class.equals(moduleClass)) {
+ } else if (ConnectorModule.class.equals(moduleClass) && loadingRequiredModuleTypes.contains(ConnectorModule.class)) {
String jarLocation = URLs.toFilePath(baseUrl);
ConnectorModule connectorModule = createConnectorModule(jarLocation, jarLocation, OpenEJB.class.getClassLoader(), null);
// Wrap the resource module with an Application Module
return new AppModule(connectorModule);
- } else if (WebModule.class.equals(moduleClass)) {
+ } else if (WebModule.class.equals(moduleClass)
+ && (loadingRequiredModuleTypes.contains(WebModule.class) || loadingRequiredModuleTypes.contains(EjbModule.class) || loadingRequiredModuleTypes.contains(PersistenceModule.class))) {
final File file = toFile(baseUrl);
AppModule appModule = new AppModule(OpenEJB.class.getClassLoader(), file.getAbsolutePath());
addWebModule(appModule, baseUrl, OpenEJB.class.getClassLoader(), null, null);
return appModule;
- } else if (PersistenceModule.class.equals(moduleClass)) {
+ } else if (PersistenceModule.class.equals(moduleClass) && loadingRequiredModuleTypes.contains(PersistenceModule.class)) {
String jarLocation = URLs.toFilePath(baseUrl);
ClassLoader classLoader = ClassLoaderUtil.createTempClassLoader(jarPath, new URL[]{baseUrl}, OpenEJB.class.getClassLoader());
@@ -252,16 +299,16 @@ public class DeploymentLoader {
application = unmarshal(Application.class, "application.xml", applicationXmlUrl);
for (Module module : application.getModule()) {
try {
- if (module.getEjb() != null) {
+ if (module.getEjb() != null && loadingRequiredModuleTypes.contains(EjbModule.class)) {
URL url = finder.find(module.getEjb().trim());
ejbModules.put(module.getEjb(), url);
- } else if (module.getJava() != null) {
+ } else if (module.getJava() != null && loadingRequiredModuleTypes.contains(ClientModule.class)) {
URL url = finder.find(module.getJava().trim());
clientModules.put(module.getConnector(), url);
- } else if (module.getConnector() != null) {
+ } else if (module.getConnector() != null && loadingRequiredModuleTypes.contains(ConnectorModule.class)) {
URL url = finder.find(module.getConnector().trim());
resouceModules.put(module.getConnector(), url);
- } else if (module.getWeb() != null) {
+ } else if (module.getWeb() != null && (loadingRequiredModuleTypes.contains(WebModule.class) || loadingRequiredModuleTypes.contains(EjbModule.class))) {
URL url = finder.find(module.getWeb().getWebUri().trim());
webModules.put(module.getWeb().getWebUri(), url);
webContextRoots.put(module.getWeb().getWebUri(), module.getWeb().getContextRoot());
@@ -282,14 +329,14 @@ public class DeploymentLoader {
try {
ClassLoader moduleClassLoader = ClassLoaderUtil.createTempClassLoader(appId, new URL[]{entry.getValue()}, tmpClassLoader);
- Class moduleType = discoverModuleType(entry.getValue(), moduleClassLoader, true);
- if (EjbModule.class.equals(moduleType)) {
+ Class<? extends DeploymentModule> moduleType = discoverModuleType(entry.getValue(), moduleClassLoader, true);
+ if (EjbModule.class.equals(moduleType) && loadingRequiredModuleTypes.contains(EjbModule.class)) {
ejbModules.put(entry.getKey(), entry.getValue());
- } else if (ClientModule.class.equals(moduleType)) {
+ } else if (ClientModule.class.equals(moduleType) && loadingRequiredModuleTypes.contains(ClientModule.class)) {
clientModules.put(entry.getKey(), entry.getValue());
- } else if (ConnectorModule.class.equals(moduleType)) {
+ } else if (ConnectorModule.class.equals(moduleType) && loadingRequiredModuleTypes.contains(ConnectorModule.class)) {
resouceModules.put(entry.getKey(), entry.getValue());
- } else if (WebModule.class.equals(moduleType)) {
+ } else if (WebModule.class.equals(moduleType) && (loadingRequiredModuleTypes.contains(WebModule.class) || loadingRequiredModuleTypes.contains(EjbModule.class))) {
webModules.put(entry.getKey(), entry.getValue());
}
} catch (UnsupportedOperationException e) {
@@ -428,8 +475,10 @@ public class DeploymentLoader {
}
}
- // Persistence Units
- addPersistenceUnits(appModule, urls);
+ if (loadingRequiredModuleTypes.contains(PersistenceModule.class)) {
+ // Persistence Units
+ addPersistenceUnits(appModule, urls);
+ }
return appModule;
@@ -450,7 +499,7 @@ public class DeploymentLoader {
try {
manifestUrl = clientFinder.find("META-INF/MANIFEST.MF");
} catch (IOException e) {
- //
+ //
}
String mainClass = null;
@@ -505,67 +554,76 @@ public class DeploymentLoader {
ejbModule.setClientModule(createClientModule(baseUrl, jarPath, classLoader, null, false));
// load webservices descriptor
- addWebservices(ejbModule);
+ if (loadingRequiredModuleTypes.contains(WsModule.class)) {
+ addWebservices(ejbModule);
+ }
return ejbModule;
}
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);
+ if (loadingRequiredModuleTypes.contains(WebModule.class)) {
+ appModule.getWebModules().add(webModule);
+ }
ClassLoader webClassLoader = webModule.getClassLoader();
- 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 {
- 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);
- }
+ if (loadingRequiredModuleTypes.contains(EjbModule.class)) {
+ 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 {
+ 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);
+ }
- // 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) {
+ // 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) {
+ }
}
}
- }
- addEjbModule = checkAnnotations(urls, webClassLoader, true, false) != null;
+ addEjbModule = checkAnnotations(urls, webClassLoader, true, false) != null;
+ }
+ } else {
+ addEjbModule = true;
+ ejbJar = ReadDescriptors.readEjbJar(ejbJarXmlUrl);
}
- } 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);
+ if (addEjbModule) {
+ EjbModule ejbModule = new EjbModule(webClassLoader, webModule.getModuleId(), warPath, ejbJar, null);
+ ejbModule.getAltDDs().putAll(webModule.getAltDDs());
+ if (loadingRequiredModuleTypes.contains(WsModule.class)) {
+ addWebservices(ejbModule);
+ }
- appModule.getEjbModules().add(ejbModule);
+ appModule.getEjbModules().add(ejbModule);
+ }
}
- // Persistence Units
- addPersistenceUnits(appModule);
+ if (loadingRequiredModuleTypes.contains(PersistenceModule.class)) {
+ // Persistence Units
+ addPersistenceUnits(appModule);
+ }
}
- protected static WebModule createWebModule(String appId, String warPath, ClassLoader parentClassLoader, String contextRoot, String moduleName) throws OpenEJBException {
+ protected WebModule createWebModule(String appId, String warPath, ClassLoader parentClassLoader, String contextRoot, String moduleName) throws OpenEJBException {
File warFile = new File(warPath);
warFile = unpack(warFile);
@@ -596,14 +654,19 @@ public class DeploymentLoader {
webModule.getWatchedResources().add(URLs.toFilePath(webXmlUrl));
}
- // find all tag libs
- addTagLibraries(webModule);
-
- // load webservices descriptor
- addWebservices(webModule);
+ //If webModule object is loaded by ejbModule or persitenceModule, no need to load tag libraries, web service and JSF related staffs.
+ if (loadingRequiredModuleTypes.contains(WebModule.class)) {
+ // find all tag libs
+ addTagLibraries(webModule);
+
+ if (loadingRequiredModuleTypes.contains(WsModule.class)) {
+ // load webservices descriptor
+ addWebservices(webModule);
+ }
- // load faces configuration files
- addFacesConfigs(webModule);
+ // load faces configuration files
+ addFacesConfigs(webModule);
+ }
return webModule;
}
@@ -634,7 +697,7 @@ public class DeploymentLoader {
return webUrls;
}
- private static void addWebservices(WsModule wsModule) throws OpenEJBException {
+ private void addWebservices(WsModule wsModule) throws OpenEJBException {
String webservicesEnabled = SystemInstance.get().getProperty(ConfigurationFactory.WEBSERVICES_ENABLED, "true");
if (!Boolean.parseBoolean(webservicesEnabled)) {
wsModule.getAltDDs().remove("webservices.xml");
@@ -694,7 +757,7 @@ public class DeploymentLoader {
}
- private static void addTagLibraries(WebModule webModule) throws OpenEJBException {
+ private void addTagLibraries(WebModule webModule) throws OpenEJBException {
Set<URL> tldLocations = new HashSet<URL>();
// web.xml contains tag lib locations in nested jsp config elements
@@ -749,7 +812,7 @@ public class DeploymentLoader {
* @param webModule
* @throws OpenEJBException
*/
- private static void addFacesConfigs(WebModule webModule) throws OpenEJBException {
+ private void addFacesConfigs(WebModule webModule) throws OpenEJBException {
//*************************IMPORTANT*******************************************
// This method is an exact copy of org.apache.openejb.tomcat.catalina.TomcatWebAppBuilder.addFacesConfigs(WebModule webModule)
// Any changes to this method here would most probably need to also be reflected in the TomcatWebAppBuilder.addFacesConfigs method.
@@ -821,7 +884,7 @@ public class DeploymentLoader {
}
}
- private static Set<URL> scanClassLoaderForTagLibs(ClassLoader parentClassLoader) throws OpenEJBException {
+ private Set<URL> scanClassLoaderForTagLibs(ClassLoader parentClassLoader) throws OpenEJBException {
Set<URL> urls = new HashSet<URL>();
if (parentClassLoader == null) return urls;
@@ -868,7 +931,7 @@ public class DeploymentLoader {
return urls;
}
- private static Set<URL> scanWarForTagLibs(File war) {
+ private Set<URL> scanWarForTagLibs(File war) {
Set<URL> urls = new HashSet<URL>();
File webInfDir = new File(war, "WEB-INF");
@@ -904,7 +967,7 @@ public class DeploymentLoader {
return urls;
}
- private static Set<URL> scanJarForTagLibs(File file) {
+ private Set<URL> scanJarForTagLibs(File file) {
Set<URL> urls = new HashSet<URL>();
if (!file.isFile()) return urls;
@@ -1083,7 +1146,7 @@ public class DeploymentLoader {
return map;
}
- private static Map<String, URL> getWebDescriptors(File warFile) throws IOException {
+ protected Map<String, URL> getWebDescriptors(File warFile) throws IOException {
Map<String, URL> descriptors = new TreeMap<String, URL>();
// xbean resource finder has a bug when you use any uri but "META-INF"
@@ -1116,7 +1179,7 @@ public class DeploymentLoader {
return descriptors;
}
- protected static File getFile(URL warUrl) {
+ protected File getFile(URL warUrl) {
if ("jar".equals(warUrl.getProtocol())) {
String pathname = warUrl.getPath();
@@ -1236,7 +1299,7 @@ public class DeploymentLoader {
if (scanPotentialEjbModules || scanPotentialClientModules) {
AnnotationFinder classFinder = new AnnotationFinder(classLoader, urls);
- final Set<Class<? extends DeploymentModule>> otherTypes = new LinkedHashSet();
+ final Set<Class<? extends DeploymentModule>> otherTypes = new LinkedHashSet<Class<? extends DeploymentModule>>();
AnnotationFinder.Filter filter = new AnnotationFinder.Filter() {
final String packageName = LocalClient.class.getName().replace("LocalClient", "");
@@ -1271,7 +1334,7 @@ public class DeploymentLoader {
return cls;
}
- private static File unpack(File jarFile) throws OpenEJBException {
+ protected File unpack(File jarFile) throws OpenEJBException {
if (jarFile.isDirectory()) {
return jarFile;
}
@@ -1290,7 +1353,7 @@ public class DeploymentLoader {
}
}
- protected static URL getFileUrl(File jarFile) throws OpenEJBException {
+ protected URL getFileUrl(File jarFile) throws OpenEJBException {
URL baseUrl;
try {
baseUrl = jarFile.toURI().toURL();