You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/02 00:36:34 UTC

svn commit: r1239405 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config: AnnotationDeployer.java OutputGeneratedDescriptors.java

Author: rmannibucau
Date: Wed Feb  1 23:36:33 2012
New Revision: 1239405

URL: http://svn.apache.org/viewvc?rev=1239405&view=rev
Log:
trying to dump descriptors then use them instead of scanning - to enhance a lot

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/OutputGeneratedDescriptors.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1239405&r1=1239404&r2=1239405&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Wed Feb  1 23:36:33 2012
@@ -62,6 +62,7 @@ import org.apache.openejb.jee.Intercepto
 import org.apache.openejb.jee.InterceptorBinding;
 import org.apache.openejb.jee.Invokable;
 import org.apache.openejb.jee.IsolationLevel;
+import org.apache.openejb.jee.JaxbJavaee;
 import org.apache.openejb.jee.JndiConsumer;
 import org.apache.openejb.jee.JndiReference;
 import org.apache.openejb.jee.License;
@@ -111,6 +112,7 @@ import org.apache.openejb.jee.Transactio
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.jee.WebserviceDescription;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.AnnotationUtil;
 import org.apache.openejb.util.Join;
@@ -202,6 +204,7 @@ import java.beans.BeanInfo;
 import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.io.File;
+import java.io.FileOutputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
@@ -237,6 +240,25 @@ public class AnnotationDeployer implemen
     public static final Logger startupLogger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
     private static final ThreadLocal<DeploymentModule> currentModule = new ThreadLocal<DeploymentModule>();
     private static final Set<String> lookupMissing = new HashSet<String>(2);
+    public static final String OPENEJB_USE_DESCRIPTOR_GENERATED = "openejb.use.descriptor.generated";
+    public static final String OPENEJB_DUMPED_DD_PATH = "openejb.dumped.dd.path";
+    private static final String DUMPED_DD_BASE;
+
+    static {
+        String dumpedBase = System.getProperty(OPENEJB_DUMPED_DD_PATH, "temp");
+        File file = new File(SystemInstance.get().getBase().getDirectory(), dumpedBase);
+        if (!file.exists()) {
+            file = new File(dumpedBase);
+            if (!file.exists()) { // ignore this
+                System.setProperty(OPENEJB_USE_DESCRIPTOR_GENERATED, "false");
+            } else {
+                dumpedBase = file.getAbsolutePath();
+            }
+        } else {
+            dumpedBase = file.getAbsolutePath();
+        }
+        DUMPED_DD_BASE = dumpedBase;
+    }
 
     public static final Set<String> knownResourceEnvTypes = new TreeSet<String>(asList(
             "javax.ejb.EJBContext",
@@ -306,6 +328,7 @@ public class AnnotationDeployer implemen
 
     public WebModule deploy(WebModule webModule) throws OpenEJBException {
         setModule(webModule);
+
         try {
             webModule = discoverAnnotatedBeans.deploy(webModule);
             webModule = envEntriesPropertiesDeployer.deploy(webModule);
@@ -963,7 +986,26 @@ public class AnnotationDeployer implemen
 
         public WebModule deploy(WebModule webModule) throws OpenEJBException {
             WebApp webApp = webModule.getWebApp();
-            if (webApp != null && (webApp.isMetadataComplete())) return webModule;
+            if (webApp != null && (webApp.isMetadataComplete())) {
+                return webModule;
+            }
+
+            if (readDumpedDD()) {
+                final File dumpedWeb = getDumpWeb(webModule.getModuleId());
+                if (!dumpedWeb.exists()) {
+                    FileOutputStream fos = null;
+                    try {
+                        webModule.setWebApp(ReadDescriptors.readWebApp(dumpedWeb.toURI().toURL()));
+                        webModule.getWebApp().setMetadataComplete(true);
+                        logger.info("read web.xml for module " + webModule.getModuleId() + " at " + dumpedWeb.getAbsolutePath());
+                        return webModule;
+                    } catch (Exception ignored) {
+                        logger.warning("can't read web.xml");
+                    } finally {
+                        IO.close(fos);
+                    }
+                }
+            }
 
             try {
                 if (webModule.getFinder() == null) {
@@ -1038,7 +1080,22 @@ public class AnnotationDeployer implemen
         }
 
         public EjbModule deploy(EjbModule ejbModule) throws OpenEJBException {
-            if (ejbModule.getEjbJar() != null && ejbModule.getEjbJar().isMetadataComplete()) return ejbModule;
+            if (ejbModule.getEjbJar() != null && ejbModule.getEjbJar().isMetadataComplete()) {
+                return ejbModule;
+            }
+            if (readDumpedDD()) {
+                final File dumpedEjbJar = getDumpEjbJar(ejbModule.getModuleId());
+                if (dumpedEjbJar.exists()) {
+                    try {
+                        ejbModule.setEjbJar(ReadDescriptors.readEjbJar(dumpedEjbJar.toURI().toURL()));
+                        ejbModule.getEjbJar().setMetadataComplete(true);
+                        logger.info("using ejb-jar " + dumpedEjbJar.getAbsolutePath() + " for module " + ejbModule.getModuleId());
+                        return ejbModule;
+                    } catch (MalformedURLException ignored) {
+                        logger.warning("can't read dumped ejb-jar");
+                    }
+                }
+            }
 
 
             try {
@@ -1870,6 +1927,22 @@ public class AnnotationDeployer implemen
 
             processWebServiceClientHandlers(webApp, classLoader);
 
+            if (readDumpedDD()) {
+                final File dumpedWeb = getDumpWeb(webModule.getModuleId());
+                if (!dumpedWeb.exists()) {
+                    FileOutputStream fos = null;
+                    try {
+                        fos = new FileOutputStream(dumpedWeb);
+                        JaxbJavaee.marshal(WebApp.class, webModule.getWebApp(), fos);
+                        logger.info("dumped web.xml for module " + webModule.getModuleId() + " at " + dumpedWeb.getAbsolutePath());
+                    } catch (Exception e) {
+                        logger.warning("can't dump web.xml", e);
+                    } finally {
+                        IO.close(fos);
+                    }
+                }
+            }
+
             return webModule;
         }
 
@@ -2375,6 +2448,22 @@ public class AnnotationDeployer implemen
                 }
             }
 
+            if (readDumpedDD()) {
+                final File dumpedEjbJar = getDumpEjbJar(ejbModule.getModuleId());
+                if (!dumpedEjbJar.exists()) {
+                    FileOutputStream fos = null;
+                    try {
+                        fos = new FileOutputStream(dumpedEjbJar);
+                        JaxbJavaee.marshal(EjbJar.class, ejbModule.getEjbJar(), fos);
+                        logger.info("dumped ejb-jar for module " + ejbModule.getModuleId() + " at " + dumpedEjbJar.getAbsolutePath());
+                    } catch (Exception e) {
+                        logger.warning("can't dump ejb-jar", e);
+                    } finally {
+                        IO.close(fos);
+                    }
+                }
+            }
+
             return ejbModule;
         }
 
@@ -4889,4 +4978,16 @@ public class AnnotationDeployer implemen
         }
         return rawClassName;
     }
+
+    private static boolean readDumpedDD() {
+        return Boolean.getBoolean(OPENEJB_USE_DESCRIPTOR_GENERATED);
+    }
+
+    private static File getDumpEjbJar(final String moduleId) {
+        return new File(DUMPED_DD_BASE, "ejb-jar-" + Math.abs(moduleId.hashCode()) + ".xml");
+    }
+
+    private static File getDumpWeb(final String moduleId) {
+        return new File(DUMPED_DD_BASE, "web-" + Math.abs(moduleId.hashCode()) + ".xml");
+    }
 }

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/OutputGeneratedDescriptors.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/OutputGeneratedDescriptors.java?rev=1239405&r1=1239404&r2=1239405&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/OutputGeneratedDescriptors.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/OutputGeneratedDescriptors.java Wed Feb  1 23:36:33 2012
@@ -173,18 +173,28 @@ public class OutputGeneratedDescriptors 
 
     private void writeEjbJar(EjbModule ejbModule) {
         try {
+            final File tempFile = tempFile("ejb-jar-", ejbModule.getModuleId() + ".xml");
+            writeEjbJar(tempFile, ejbModule);
+            logger.info("Dumping Generated ejb-jar.xml to: " + tempFile.getAbsolutePath());
+        } catch (IOException e) {
+            // no-op
+        }
+    }
+
+    public static void writeEjbJar(final File output, final EjbModule ejbModule) {
+        try {
             EjbJar ejbJar = ejbModule.getEjbJar();
-            File tempFile = tempFile("ejb-jar-", ejbModule.getModuleId() + ".xml");
-            FileOutputStream fout = new FileOutputStream(tempFile);
+            FileOutputStream fout = new FileOutputStream(output);
             BufferedOutputStream out = new BufferedOutputStream(fout);
             try {
                 JaxbJavaee.marshal(EjbJar.class, ejbJar, out);
-                logger.info("Dumping Generated ejb-jar.xml to: " + tempFile.getAbsolutePath());
-            } catch (JAXBException e) {
+            } catch (JAXBException ignored) {
+                // no-op
             } finally {
                 out.close();
             }
         } catch (Exception e) {
+            // no-op
         }
     }
 }