You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2011/02/27 14:51:08 UTC

svn commit: r1075055 - in /geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment: EjbModuleBuilder.java GeronimoDeploymentLoader.java

Author: xuhaihong
Date: Sun Feb 27 13:51:07 2011
New Revision: 1075055

URL: http://svn.apache.org/viewvc?rev=1075055&view=rev
Log:
Create a GeronimoDeploymentLoader as a workaround, as the DeploymentLoader from OpenEJB breaks most application deployment, need to remove it once the changes in OpenEJB is done

Added:
    geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java   (with props)
Modified:
    geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java

Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=1075055&r1=1075054&r2=1075055&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Sun Feb 27 13:51:07 2011
@@ -303,7 +303,7 @@ public class EjbModuleBuilder implements
         Set<Class<? extends DeploymentModule>> loadingRequiredModuleTypes = new HashSet<Class<? extends DeploymentModule>>();
         loadingRequiredModuleTypes.add(org.apache.openejb.config.EjbModule.class);
         loadingRequiredModuleTypes.add(org.apache.openejb.config.WsModule.class);
-        DeploymentLoader loader = new DeploymentLoader(ddDir, loadingRequiredModuleTypes);
+        DeploymentLoader loader = new GeronimoDeploymentLoader(ddDir, loadingRequiredModuleTypes);
         AppModule appModule;
         try {
             appModule = loader.load(new File(moduleFile.getName()));

Added: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java?rev=1075055&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java (added)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java Sun Feb 27 13:51:07 2011
@@ -0,0 +1,130 @@
+/**
+ *  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.geronimo.openejb.deployment;
+
+import static org.apache.openejb.util.URLs.toFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.ClientModule;
+import org.apache.openejb.config.DeploymentLoader;
+import org.apache.openejb.config.DeploymentModule;
+import org.apache.openejb.config.DeploymentsResolver;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.config.RequireDescriptors;
+import org.apache.openejb.config.UnknownModuleTypeException;
+import org.apache.openejb.config.WebModule;
+import org.apache.openejb.loader.FileUtils;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.util.URLs;
+import org.apache.xbean.finder.UrlSet;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class GeronimoDeploymentLoader extends DeploymentLoader {
+
+    private String ddDir;
+
+    public GeronimoDeploymentLoader(String ddDir, Set<Class<? extends DeploymentModule>> loadingRequiredModuleTypes) {
+        super(ddDir, loadingRequiredModuleTypes);
+        this.ddDir = ddDir;
+    }
+
+    protected void addWebModule(AppModule appModule, URL warUrl, ClassLoader parentClassLoader, String contextRoot, String moduleName) throws OpenEJBException {
+        // create and add the WebModule
+        String warPath = URLs.toFilePath(warUrl);
+        WebModule webModule = createWebModule(appModule.getJarLocation(), warPath, parentClassLoader, contextRoot, moduleName);
+
+        // get urls in web application
+        List<URL> urls = new ArrayList<URL>();
+        ClassLoader webClassLoader = webModule.getClassLoader();
+
+        // get include/exclude properties from context-param
+        Options contextParams = new Options(new Properties());
+
+        String include = contextParams.get(CLASSPATH_INCLUDE, "");
+        String exclude = contextParams.get(CLASSPATH_EXCLUDE, "");
+        Set<RequireDescriptors> requireDescriptors = contextParams.getAll(CLASSPATH_REQUIRE_DESCRIPTOR, RequireDescriptors.CLIENT);
+        boolean filterDescriptors = contextParams.get(CLASSPATH_FILTER_DESCRIPTORS, false);
+        boolean filterSystemApps = contextParams.get(CLASSPATH_FILTER_SYSTEMAPPS, true);
+
+        contextParams.getProperties().put(webModule.getModuleId(), warPath);
+        FileUtils base = new FileUtils(webModule.getModuleId(), webModule.getModuleId(), contextParams.getProperties());
+        DeploymentsResolver.loadFromClasspath(base, urls, webClassLoader, include, exclude, requireDescriptors, filterDescriptors, filterSystemApps, ddDir);
+
+        // we need to exclude previously deployed modules
+        // using a Set instead of a list would be easier ...
+        UrlSet urlSet = new UrlSet(urls);
+        urlSet = urlSet.exclude(new UrlSet(appModule.getAdditionalLibraries())); // there should not be modules in /lib
+        for (EjbModule ejbModule : appModule.getEjbModules()) {
+            try {
+                urlSet = urlSet.exclude(new File(ejbModule.getJarLocation()));
+            } catch (MalformedURLException ignore) {
+            }
+        }
+        for (ClientModule clientModule : appModule.getClientModules()) {
+            try {
+                urlSet = urlSet.exclude(new File(clientModule.getJarLocation()));
+            } catch (MalformedURLException ignore) {
+            }
+        }
+        // for persistence.xml, there is already a check in addPersistenceUnit to remove duplicates
+        urls = urlSet.getUrls();
+
+        // save the filtered list so that it can be used elsewhere
+        webModule.setUrls(urls);
+
+        // Check each URL to determine if it is an EJB jar
+        for (URL url : urls) {
+            try {
+                Class<?> moduleType = discoverModuleType(url, webClassLoader, true);
+
+                File file = toFile(url);
+                String absolutePath = file.getAbsolutePath();
+
+                if (EjbModule.class.isAssignableFrom(moduleType)) {
+                    logger.info("Found ejb module " + moduleType.getSimpleName() + " in war " + contextRoot);
+
+                    if (url.getProtocol().equals("file") && url.toString().endsWith("WEB-INF/classes/")) {
+                        //EJB found in /WEB-INF/classes, define the war as EJB module
+                        absolutePath = warPath;
+                        url = warUrl;
+                    }
+
+                    EjbModule ejbModule = createEjbModule(url, absolutePath, webClassLoader, getModuleName());
+                    appModule.getEjbModules().add(ejbModule);
+
+                }
+
+            } catch (IOException e) {
+                logger.warning("Unable to determine the module type of " + url.toExternalForm() + ": Exception: " + e.getMessage(), e);
+            } catch (UnknownModuleTypeException ignore) {
+            }
+        }
+    }
+}

Propchange: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/GeronimoDeploymentLoader.java
------------------------------------------------------------------------------
    svn:mime-type = text/xml