Author: dblevins
Date: Mon Jul 23 03:07:35 2012
New Revision: 1364482

URL: http://svn.apache.org/viewvc?rev=1364482&view=rev
Log:
One more try on TOMEE-144 optimized scanning

Modified:
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1364482&r1=1364481&r2=1364482&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
 Mon Jul 23 03:07:35 2012
@@ -23,8 +23,12 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.tomcat.util.bcel.classfile.ClassFormatException;
 import org.xml.sax.InputSource;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -37,6 +41,7 @@ public class OpenEJBContextConfig extend
     private TomcatWebAppBuilder.StandardContextInfo info;
 
     public OpenEJBContextConfig(TomcatWebAppBuilder.StandardContextInfo 
standardContextInfo) {
+        logger.info("OpenEJBContextConfig("+standardContextInfo.toString());
         info = standardContextInfo;
     }
 
@@ -75,7 +80,55 @@ public class OpenEJBContextConfig extend
     }
 
     @Override
+    protected void processAnnotationsFile(File file, WebXml fragment,
+            boolean handlesTypesOnly) {
+        logger.info("processAnnotationsFile "+ file.getAbsolutePath() );
+        try {
+            final WebAppInfo webAppInfo = info.get();
+
+            if (webAppInfo == null) {
+                logger.warning("WebAppInfo not found. " + info);
+                super.processAnnotationsFile(file, fragment, handlesTypesOnly);
+                return;
+            }
+
+            logger.info("Optimized Scan of File " + file.getAbsolutePath());
+
+            // TODO We should just remember which jars each class came from
+            // then we wouldn't need to lookup the class from the URL in this
+            // way to guarantee we only add classes from this URL.
+            final URLClassLoader loader = new URLClassLoader(new 
URL[]{file.toURI().toURL()});
+            for (String webAnnotatedClassName : 
webAppInfo.webAnnotatedClasses) {
+
+                final String classFile = webAnnotatedClassName.replace('.', 
'/') + ".class";
+                final URL classUrl = loader.getResource(classFile);
+
+                if (classUrl == null) {
+                    logger.debug("Not present " + webAnnotatedClassName);
+                    continue;
+                }
+
+                logger.debug("Found " + webAnnotatedClassName);
+
+                final InputStream inputStream = classUrl.openStream();
+                try {
+                    processAnnotationsStream(inputStream, fragment, 
handlesTypesOnly);
+                    logger.debug("Succeeded " + webAnnotatedClassName);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } finally {
+                    inputStream.close();
+                }
+
+            }
+        } catch (Exception e) {
+            logger.error("OpenEJBContextConfig.processAnnotationsFile: 
failed.", e);
+        }
+    }
+
+    @Override
     protected void processAnnotationsUrl(URL url, WebXml fragment, boolean 
handlesTypeOnly) {
+        logger.info("processAnnotationsUrl " + url);
         if (SystemInstance.get().getOptions().get("tomee.tomcat.scan", false)) 
{
             super.processAnnotationsUrl(url, fragment, handlesTypeOnly);
             return;
@@ -90,13 +143,14 @@ public class OpenEJBContextConfig extend
                 return;
             }
 
-            logger.debug("Optimized Scan of URL " + url);
+            logger.info("Optimized Scan of URL " + url);
 
             // TODO We should just remember which jars each class came from
             // then we wouldn't need to lookup the class from the URL in this
             // way to guarantee we only add classes from this URL.
             final URLClassLoader loader = new URLClassLoader(new URL[]{url});
             for (String webAnnotatedClassName : 
webAppInfo.webAnnotatedClasses) {
+
                 final String classFile = webAnnotatedClassName.replace('.', 
'/') + ".class";
                 final URL classUrl = loader.getResource(classFile);
 


Reply via email to