Author: dblevins
Date: Fri Apr  8 01:30:11 2011
New Revision: 1090081

URL: http://svn.apache.org/viewvc?rev=1090081&view=rev
Log:
OpenEjbContainer and DeploymentLoader logic rewrite.  Midway through.  
Temporarily putting the very close but not quite working logic in NewLoaderLogic
Some validation tweaks to print the module path in output messages
Tweaked 'null ejbClass' logic to use the right validation message (i had added 
one when there was already one there).  Yanking the one I added.

Added:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
   (with props)
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java
   (with props)
Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentFilterable.java
    
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/DeploymentsResolver.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationContext.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
    
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/BasicSpringTest.java
    
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/SpringTest.java
    
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
    
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/JndiTest.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Fri Apr  8 01:30:11 2011
@@ -696,7 +696,7 @@ public class Assembler extends Assembler
                 jndiEncBuilder.setUseCrossClassLoaderRef(false);
                 Context context = 
jndiEncBuilder.build(JndiEncBuilder.JndiScope.comp);
 
-                Debug.printContext(context);
+//                Debug.printContext(context);
 
                 containerSystem.getJNDIContext().bind("openejb/client/" + 
clientInfo.moduleId, context);
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
 Fri Apr  8 01:30:11 2011
@@ -1069,7 +1069,7 @@ public class AnnotationDeployer implemen
                 try {
                     clazz = classLoader.loadClass(ejbClassName);
                 } catch (ClassNotFoundException e) {
-                    fail(ejbName, "xml.missingEjbClass", ejbClassName);
+                    // Handled in CheckClasses.java along with other missing 
classes
                     continue;
                 }
                 final AnnotationFinder finder = new AnnotationFinder(new 
ClassesArchive(clazz));

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentFilterable.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentFilterable.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentFilterable.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentFilterable.java
 Fri Apr  8 01:30:11 2011
@@ -25,6 +25,8 @@ public interface DeploymentFilterable {
     static final String SEARCH_CLASSPATH_FOR_DEPLOYMENTS_PROPERTY = 
DEPLOYMENTS_CLASSPATH_PROPERTY;
     static final String CLASSPATH_INCLUDE = 
"openejb.deployments.classpath.include";
     static final String CLASSPATH_EXCLUDE = 
"openejb.deployments.classpath.exclude";
+    static final String PACKAGE_INCLUDE = 
"openejb.deployments.package.include";
+    static final String PACKAGE_EXCLUDE = 
"openejb.deployments.package.exclude";
     static final String CLASSPATH_REQUIRE_DESCRIPTOR = 
RequireDescriptors.PROPERTY;
     static final String CLASSPATH_FILTER_DESCRIPTORS = 
"openejb.deployments.classpath.filter.descriptors";
     static final String CLASSPATH_FILTER_SYSTEMAPPS = 
"openejb.deployments.classpath.filter.systemapps";

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=1090081&r1=1090080&r2=1090081&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
 Fri Apr  8 01:30:11 2011
@@ -1269,7 +1269,7 @@ public class DeploymentLoader implements
             }
         }
 
-        Class<? extends DeploymentModule> cls = 
checkAnnotations(Arrays.asList(baseUrl), classLoader, scanPotentialEjbModules, 
scanPotentialClientModules);
+        Class<? extends DeploymentModule> cls = checkAnnotations(baseUrl, 
classLoader, scanPotentialEjbModules, scanPotentialClientModules);
         if (cls != null) return cls;
 
         if (descriptors.containsKey("persistence.xml")) {
@@ -1279,7 +1279,7 @@ public class DeploymentLoader implements
         throw new UnknownModuleTypeException("Unknown module type: url=" + 
baseUrl.toExternalForm());
     }
 
-    private Class<? extends DeploymentModule> checkAnnotations(Collection<URL> 
urls, ClassLoader classLoader, final boolean scanPotentialEjbModules, final 
boolean scanPotentialClientModules) {
+    private Class<? extends DeploymentModule> checkAnnotations(URL urls, 
ClassLoader classLoader, final boolean scanPotentialEjbModules, final boolean 
scanPotentialClientModules) {
         Class<? extends DeploymentModule> cls = null;
         if (scanPotentialEjbModules || scanPotentialClientModules) {
             AnnotationFinder classFinder = new AnnotationFinder(classLoader, 
urls);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
 Fri Apr  8 01:30:11 2011
@@ -16,26 +16,26 @@
  */
 package org.apache.openejb.config;
 
-import static org.apache.openejb.util.URLs.toFile;
-
 import org.apache.openejb.config.sys.Deployments;
 import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.loader.FileUtils;
-import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.loader.Options;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.Logger;
 import org.apache.xbean.finder.UrlSet;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URL;
 import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Set;
-import java.util.EnumSet;
+
+import static org.apache.openejb.util.URLs.toFile;
 
 /**
  * @version $Rev$ $Date$
@@ -314,6 +314,7 @@ public class DeploymentsResolver impleme
     }
 
     private static UrlSet applyBuiltinExcludes(UrlSet urlSet) throws 
MalformedURLException {
+        
         urlSet = urlSet.exclude(".*/activation(-[\\d.]+)?.jar(!/)?");
         urlSet = 
urlSet.exclude(".*/activeio-core(-[\\d.]+)?(-incubator)?.jar(!/)?");
         urlSet = urlSet.exclude(".*/activemq-(core|ra)(-[\\d.]+)?.jar(!/)?");
@@ -378,7 +379,7 @@ public class DeploymentsResolver impleme
         return urlSet;
     }
 
-    private static void processUrls(List<URL> urls, ClassLoader classLoader, 
Set<RequireDescriptors> requireDescriptors, FileUtils base, List<URL> jarList) {
+    public static void processUrls(List<URL> urls, ClassLoader classLoader, 
Set<RequireDescriptors> requireDescriptors, FileUtils base, List<URL> jarList) {
         for (URL url : urls) {
 
             String urlProtocol = url.getProtocol();

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java?rev=1090081&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
 Fri Apr  8 01:30:11 2011
@@ -0,0 +1,448 @@
+/**
+ * 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.openejb.config;
+
+import org.apache.openejb.loader.FileUtils;
+import org.apache.openejb.loader.Options;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.Join;
+import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.PerformanceTimer;
+import org.apache.openejb.util.URLs;
+import org.apache.xbean.finder.UrlSet;
+import org.apache.xbean.finder.archive.Archive;
+import org.apache.xbean.finder.archive.ClasspathArchive;
+import org.apache.xbean.finder.archive.FilteredArchive;
+import org.apache.xbean.finder.filter.Filter;
+import org.apache.xbean.finder.filter.Filters;
+import org.apache.xbean.finder.filter.IncludeExcludeFilter;
+import org.apache.xbean.finder.filter.PatternFilter;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+* @version $Rev$ $Date$
+*/
+public class NewLoaderLogic {
+
+    private static final Logger logger = DeploymentLoader.logger;
+    
+    public static UrlSet filterArchives(Filter filter, ClassLoader 
classLoader, UrlSet urlSet) {
+
+        for (URL url : urlSet.getUrls()) {
+            for (Archive archive : ClasspathArchive.archives(classLoader, 
url)) {
+
+                FilteredArchive filtered = new FilteredArchive(archive, 
filter);
+
+                if (!filtered.iterator().hasNext()) {
+                    urlSet = urlSet.exclude(url);
+                }
+
+            }
+        }
+
+        return urlSet;
+    }
+
+    public static Set<String> callers() {
+
+        final Set<String> callers = new LinkedHashSet<String>();
+
+        final List<StackTraceElement> elements = new 
ArrayList<StackTraceElement>(Arrays.asList(new 
Exception().fillInStackTrace().getStackTrace()));
+
+        // Yank out everything until we find a known ENTRY point
+        // if we don't find one, so be it, this is only a convenience
+        {
+            // Entry points are the following:
+            Filter start = Filters.classes("javax.ejb.embedded.EJBContainer", 
"javax.naming.InitialContext");
+
+            Iterator<StackTraceElement> iterator = elements.iterator();
+            while (iterator.hasNext()) {
+                StackTraceElement element = iterator.next();
+                iterator.remove();
+
+                // If we haven't yet reached an entry point, just keep going
+                if (!start.accept(element.getClassName())) continue;
+
+                // We found an entry point.
+                // Fast-forward past this class
+                
while(iterator.hasNext()&&element.getClassName().equals(iterator.next().getClassName()))
 iterator.remove();
+
+                // Ok, we have iterated up to the calling user class, so stop 
now
+                break;
+            }
+        }
+
+
+        // Now iterate till we find an END point
+        // We don't want any of the classes after that
+        {
+            Filter end = Filters.packages(
+                    "junit.",
+                    "org.junit.",
+                    "org.testng.",
+                    "org.apache.maven.",
+                    "org.eclipse.",
+                    "com.intellij."
+            );
+
+            // Everything between here and the end is part
+            // of the call chain in which we are interested
+            Iterator<StackTraceElement> iterator = elements.iterator();
+            while (iterator.hasNext()) {
+                StackTraceElement element = iterator.next();
+
+                if (end.accept(element.getClassName())) break;
+
+                callers.add(element.getClassName());
+            }
+        }
+
+        // We don't need this anymore
+        elements.clear();
+
+        // Finally filter out everything that we definitely don't want
+        {
+            Filter unwanted = Filters.packages(
+                    "java.",
+                    "javax.",
+                    "sun.reflect."
+            );
+
+            Iterator<String> classes = callers.iterator();
+            while (classes.hasNext()) {
+                if (unwanted.accept(classes.next())) classes.remove();
+            }
+        }
+
+
+        return callers;
+    }
+
+    public static UrlSet applyBuiltinExcludes(UrlSet urlSet) throws 
MalformedURLException {
+
+        Filter filter = Filters.prefixes(
+                "XmlSchema-",
+                "activeio-",
+                "activemq-",
+                "antlr-",
+                "aopalliance-",
+                "avalon-framework-",
+                "axis-",
+                "axis2-",
+                "bcprov-",
+                "bsh-",
+                "catalina-",
+                "cglib-",
+                "commons-cli-",
+                "commons-codec-",
+                "commons-collections-",
+                "commons-dbcp-all-1.3-",
+                "commons-discovery-",
+                "commons-httpclient-",
+                "commons-io-",
+                "commons-lang-",
+                "commons-logging-",
+                "commons-logging-api-",
+                "commons-net-",
+                "commons-pool-",
+                "cssparser-",
+                "cxf-",
+                "deploy.jar",
+                "derby-",
+                "dom4j-",
+                "geronimo-",
+                "guice-",
+                "howl-",
+                "hsqldb-",
+                "htmlunit-",
+                "hibernate-",
+                "icu4j-",
+                "idb-",
+                "idea_rt.jar",
+                "jasypt-",
+                "javaee-",
+                "javassist-",
+                "javaws.jar",
+                "javax.",
+                "jaxb-",
+                "jaxp-",
+                "jboss-",
+                "jbossall-",
+                "jbosscx-",
+                "jbossjts-",
+                "jbosssx-",
+                "jcommander-",
+                "jetty-",
+                "jmdns-",
+                "jsp-api-",
+                "jsr299-",
+                "jsr311-",
+                "juli-",
+                "junit-",
+                "kahadb-",
+                "log4j-",
+                "logkit-",
+                "myfaces-",
+                "neethi-",
+                "nekohtml-",
+                "openjpa-",
+                "opensaml-",
+                "openwebbeans-",
+                "org.eclipse.",
+                "org.junit.",
+                "org.osgi.core-",
+                "quartz-",
+                "rmock-",
+                "saaj-",
+                "sac-",
+                "scannotation-",
+                "serializer-",
+                "serp-",
+                "servlet-api-",
+                "slf4j-",
+                "spring-",
+                "stax-api-",
+                "swizzle-",
+                "testng-",
+                "wsdl4j-",
+                "wss4j-",
+                "wstx-asl-",
+                "xalan-",
+                "xbean-",
+                "xercesImpl-",
+                "xml-apis-",
+                "xml-resolver-",
+                "xmlrpc-",
+                "xmlsec-",
+                "xmlunit-"
+        );
+
+        filter = Filters.optimize(filter, new PatternFilter(".*/openejb-.*"));
+        List<URL> urls = urlSet.getUrls();
+        Iterator<URL> iterator = urls.iterator();
+        while (iterator.hasNext()) {
+            URL url = iterator.next();
+            File file = URLs.toFile(url);
+            String name = file.getName();
+//            System.out.println("JAR "+name);
+            if (filter.accept(name)) iterator.remove();
+        }
+
+
+
+        return new UrlSet(urls);
+    }
+
+    public static void _loadFromClasspath(FileUtils base, List<URL> jarList, 
ClassLoader classLoader) {
+
+        PerformanceTimer timer = new PerformanceTimer();
+
+        timer.event("create filters");
+        Options options = SystemInstance.get().getOptions();
+        String include = "";
+        String exclude = "";
+        PatternFilter classpathInclude = new 
PatternFilter(options.get(DeploymentFilterable.CLASSPATH_INCLUDE, ".*"));
+        PatternFilter classpathExclude = new 
PatternFilter(options.get(DeploymentFilterable.CLASSPATH_EXCLUDE, ""));
+        IncludeExcludeFilter classpathFilter = new 
IncludeExcludeFilter(classpathInclude, classpathExclude);
+
+
+        PatternFilter packageInclude = new 
PatternFilter(options.get(DeploymentFilterable.PACKAGE_INCLUDE, ".*"));
+        PatternFilter packageExclude = new 
PatternFilter(options.get(DeploymentFilterable.PACKAGE_EXCLUDE, ""));
+
+        IncludeExcludeFilter packageFilter;
+        if (classpathInclude.getPattern().pattern().equals(".*") && 
packageInclude.getPattern().pattern().equals(".*")) {
+
+            timer.event("callers");
+
+            Set<String> callers = callers();
+
+            timer.event("parse packages");
+
+            callers.size();
+
+            Set<String> packages = new HashSet<String>();
+            for (String caller : callers) {
+                String[] parts = caller.split("\\.");
+                if (parts.length > 2) {
+                    parts = new String[]{parts[0], parts[1]};
+                }
+                packages.add(Join.join(".", parts));
+            }
+
+            Filter includes = Filters.packages(packages.toArray(new 
String[0]));
+
+            packageFilter = new IncludeExcludeFilter(includes, packageExclude);
+
+        } else {
+
+            packageFilter = new IncludeExcludeFilter(packageInclude, 
packageExclude);
+
+        }
+
+        timer.event("urlset");
+
+        Set<RequireDescriptors> requireDescriptors = 
options.getAll(DeploymentFilterable.CLASSPATH_REQUIRE_DESCRIPTOR, 
RequireDescriptors.CLIENT);
+        boolean filterDescriptors = 
options.get(DeploymentFilterable.CLASSPATH_FILTER_DESCRIPTORS, false);
+        boolean filterSystemApps = 
options.get(DeploymentFilterable.CLASSPATH_FILTER_SYSTEMAPPS, true);
+
+        try {
+            UrlSet urlSet = new UrlSet(classLoader);
+
+            timer.event("exclude system urls");
+            urlSet = 
urlSet.exclude(ClassLoader.getSystemClassLoader().getParent());
+            urlSet = urlSet.excludeJavaExtDirs();
+            urlSet = urlSet.excludeJavaEndorsedDirs();
+            urlSet = urlSet.excludeJavaHome();
+            urlSet = 
urlSet.excludePaths(System.getProperty("sun.boot.class.path", ""));
+            urlSet = urlSet.exclude(".*/JavaVM.framework/.*");
+
+
+            timer.event("classpath filter");
+
+            UrlSet beforeFiltering = urlSet;
+
+            urlSet = urlSet.filter(classpathFilter);
+
+
+            // If the user filtered out too much, that's a problem
+            if (urlSet.size() == 0) {
+                final String message = String.format("Classpath 
Include/Exclude resulted in zero URLs.  There were %s possible URLs before 
filtering and 0 after: include=\"%s\", exclude=\"%s\"", beforeFiltering.size(), 
include, exclude);
+                logger.error(message);
+                logger.info("Eligible Classpath before filtering:");
+
+                for (URL url : beforeFiltering) {
+                    logger.info(String.format("   %s", url.toExternalForm()));
+                }
+//                throw new IllegalStateException(message);
+
+            }
+
+            // If they are the same size, than nothing was filtered
+            // and we know the user did not take action to change the default
+            final boolean userSuppliedClasspathFilter = beforeFiltering.size() 
!= urlSet.size();
+
+            if (!userSuppliedClasspathFilter) {
+
+                logger.info("Applying buildin classpath excludes");
+                timer.event("buildin excludes");
+                urlSet = applyBuiltinExcludes(urlSet);
+
+            }
+
+            DeploymentsResolver.processUrls(urlSet.getUrls(), classLoader, 
EnumSet.allOf(RequireDescriptors.class), base, jarList);
+
+
+            timer.event("package filter");
+
+            urlSet = filterArchives(packageFilter, classLoader, urlSet);
+
+            timer.event("process urls");
+
+            // we should exclude system apps before and apply user properties 
after
+//            if (filterSystemApps){
+//                urlSet = 
urlSet.exclude(".*/openejb-[^/]+(.(jar|ear|war)(!/)?|/target/(test-)?classes/?)");
+//            }
+
+            List<URL> urls = urlSet.getUrls();
+            int size = urls.size();
+//            if (size == 0) {
+//                logger.warning("No classpath URLs matched.  Current 
settings: " + CLASSPATH_EXCLUDE + "='" + exclude + "', " + CLASSPATH_INCLUDE + 
"='" + include + "'");
+//                return;
+//            } else if (size == 0 && (!filterDescriptors && 
prefiltered.getUrls().size() == 0)) {
+//                return;
+//            } else if (size < 20) {
+//                logger.debug("Inspecting classpath for applications: " + 
urls.size() + " urls.");
+//            } else {
+//                // Has the user allowed some module types to be discoverable 
via scraping?
+//                boolean willScrape = requireDescriptors.size() < 
RequireDescriptors.values().length;
+//
+//                if (size < 50 && willScrape) {
+//                    logger.info("Inspecting classpath for applications: " + 
urls.size() + " urls. Consider adjusting your exclude/include.  Current 
settings: " + CLASSPATH_EXCLUDE + "='" + exclude + "', " + CLASSPATH_INCLUDE + 
"='" + include + "'");
+//                } else if (willScrape) {
+//                    logger.warning("Inspecting classpath for applications: " 
+ urls.size() + " urls.");
+//                    logger.warning("ADJUST THE EXCLUDE/INCLUDE!!!.  Current 
settings: " + CLASSPATH_EXCLUDE + "='" + exclude + "', " + CLASSPATH_INCLUDE + 
"='" + include + "'");
+//                }
+//            }
+
+            long begin = System.currentTimeMillis();
+            DeploymentsResolver.processUrls(urls, classLoader, 
requireDescriptors, base, jarList);
+            long end = System.currentTimeMillis();
+            long time = end - begin;
+
+            timer.stop(System.out);
+
+            UrlSet unchecked = new UrlSet();
+//            if (!filterDescriptors){
+//                unchecked = prefiltered.exclude(urlSet);
+//                if (filterSystemApps){
+//                    unchecked = 
unchecked.exclude(".*/openejb-[^/]+(.(jar|ear|war)(./)?|/target/classes/?)");
+//                }
+                DeploymentsResolver.processUrls(unchecked.getUrls(), 
classLoader, EnumSet.allOf(RequireDescriptors.class), base, jarList);
+//            }
+
+            if (logger.isDebugEnabled()) {
+                int urlCount = urlSet.getUrls().size() + 
unchecked.getUrls().size();
+                logger.debug("URLs after filtering: "+ urlCount);
+                for (URL url : urlSet.getUrls()) {
+                    logger.debug("Annotations path: " + url);
+                }
+                for (URL url : unchecked.getUrls()) {
+                    logger.debug("Descriptors path: " + url);
+                }
+            }
+
+            if (urls.size() == 0) return;
+
+            if (time < 1000) {
+                logger.debug("Searched " + urls.size() + " classpath urls in " 
+ time + " milliseconds.  Average " + (time / urls.size()) + " milliseconds per 
url.");
+            } else if (time < 4000 || urls.size() < 3) {
+                logger.info("Searched " + urls.size() + " classpath urls in " 
+ time + " milliseconds.  Average " + (time / urls.size()) + " milliseconds per 
url.");
+            } else if (time < 10000) {
+                logger.warning("Searched " + urls.size() + " classpath urls in 
" + time + " milliseconds.  Average " + (time / urls.size()) + " milliseconds 
per url.");
+                logger.warning("Consider adjusting your " + 
DeploymentFilterable.CLASSPATH_EXCLUDE + " and " + 
DeploymentFilterable.CLASSPATH_INCLUDE + " settings.  Current settings: 
exclude='" + exclude + "', include='" + include + "'");
+            } else {
+                logger.fatal("Searched " + urls.size() + " classpath urls in " 
+ time + " milliseconds.  Average " + (time / urls.size()) + " milliseconds per 
url.  TOO LONG!");
+                logger.fatal("ADJUST THE EXCLUDE/INCLUDE!!!.  Current 
settings: " + DeploymentFilterable.CLASSPATH_EXCLUDE + "='" + exclude + "', " + 
DeploymentFilterable.CLASSPATH_INCLUDE + "='" + include + "'");
+                List<String> list = new ArrayList<String>();
+                for (URL url : urls) {
+                    list.add(url.toExternalForm());
+                }
+                Collections.sort(list);
+                for (String url : list) {
+                    logger.info("Matched: " + url);
+                }
+            }
+        } catch (IOException e1) {
+            e1.printStackTrace();
+            logger.warning("Unable to search classpath for modules: Received 
Exception: " + e1.getClass().getName() + " " + e1.getMessage(), e1);
+        }
+
+    }
+}

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
 Fri Apr  8 01:30:11 2011
@@ -102,7 +102,8 @@ public class ReportValidationResults imp
 
         if (context.hasErrors() || context.hasFailures()) {
 
-            logger.error("Invalid 
"+context.getModuleType()+"(path="+context.getName()+")");
+            DeploymentModule module = context.getModule();
+            logger.error(String.format("Invalid %s(name=%s, path=%s)", 
context.getModuleType(), module.getModuleId(), module.getFile()));
 //            logger.error("Validation: "+errors.length + " errors, 
"+failures.length+ " failures, in 
"+context.getModuleType()+"(path="+context.getJarPath()+")");
         } else if (context.hasWarnings()) {
             if (context.getWarnings().length == 1) {

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationContext.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationContext.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationContext.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ValidationContext.java
 Fri Apr  8 01:30:11 2011
@@ -45,6 +45,10 @@ public class ValidationContext implement
         this.name = null;
     }
 
+    public DeploymentModule getModule() {
+        return module;
+    }
+
     public void fail(String component, String key, Object... details) {
         ValidationFailure failure = new ValidationFailure(key);
         failure.setDetails(details);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckClasses.java
 Fri Apr  8 01:30:11 2011
@@ -74,6 +74,9 @@ public class CheckClasses extends Valida
             try {
                 Class<?> beanClass = check_hasEjbClass(bean);
 
+                // All the subsequent checks require the bean class
+                if (beanClass == null) continue;
+                
                 if (!(bean instanceof RemoteBean)) continue;
                 RemoteBean b = (RemoteBean) bean;
 
@@ -208,8 +211,10 @@ public class CheckClasses extends Valida
 
         String ejbName = b.getEjbName();
 
-        Class<?> beanClass = lookForClass(b.getEjbClass(), "<ejb-class>", 
ejbName);
+        Class<?> beanClass = lookForClass(b.getEjbClass(), "ejb-class", 
ejbName);
 
+        if (beanClass == null) return null;
+        
         if (beanClass.isInterface()){
             fail(ejbName, "interfaceDeclaredAsBean", beanClass.getName());
         }

Added: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java?rev=1090081&view=auto
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java
 (added)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java
 Fri Apr  8 01:30:11 2011
@@ -0,0 +1,73 @@
+/**
+ * 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.openejb.util;
+
+import org.apache.openejb.config.DeploymentsResolver;
+
+import java.io.PrintStream;
+import java.util.concurrent.TimeUnit;
+
+/**
+* @version $Rev$ $Date$
+*/
+public class PerformanceTimer {
+
+    protected Start start;
+    private Event event;
+
+    public PerformanceTimer() {
+        event = start = new Start();
+    }
+
+    public void event(String event) {
+        this.event = new Event(this.event, event);
+    }
+
+    public void stop(PrintStream out) {
+        Event event = new Event(this.event, "stop");
+        this.event.stop(event, out);
+        start.stop(event, out);
+    }
+
+    private class Event {
+        protected final long start = System.nanoTime();
+        private final Event previous;
+        private final String description;
+
+        private Event(Event previous, String description) {
+            this.previous = previous;
+            this.description = description;
+        }
+
+        public void stop(Event next, PrintStream out) {
+            if (previous != PerformanceTimer.this.start) previous.stop(this, 
out);
+            out.printf("%s  %s", TimeUnit.NANOSECONDS.toMillis(next.start - 
this.start), this.description);
+            out.println();
+        }
+    }
+    private class Start extends Event {
+        private Start() {
+            super(null, "start");
+        }
+
+        @Override
+        public void stop(Event next, PrintStream out) {
+            out.printf("%s  %s", TimeUnit.NANOSECONDS.toMillis(next.start - 
this.start), "total");
+            out.println();
+        }
+    }
+}

Propchange: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/PerformanceTimer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
 Fri Apr  8 01:30:11 2011
@@ -46,7 +46,7 @@
 # 1 - Element (home, ejb-class, remote)
 # 2 - Bean name
 1.missing.class           Missing class
-2.missing.class           Missing class {0}
+2.missing.class           Missing class <{1}> {0}
 3.missing.class           The class {0} not found. Check that the class 
specified in the <{1}> element for bean {2} is spelled correctly and the class 
is present in the jar
 
 # 0 - Class name
@@ -860,7 +860,3 @@ public interface {0} extends {2}'{}'
 1.xml.noEjbClass = Element <ejb-class> unspecified.
 2.xml.noEjbClass = Element <ejb-class> unspecified.  No annotated bean 
discovered with <ejb-name>{0}</ejb-name>
 3.xml.noEjbClass = The <ejb-class> element is only optional if there is a 
matching annotated bean in the module with the bean name {0}.  No such bean was 
found.  Other beans in this module are: {1}  
-
-1.xml.missingEjbClass = Specified <ejb-class> not found.
-2.xml.missingEjbClass = Specified <ejb-class> not found {0}
-3.xml.missingEjbClass = The <ejb-class> element specifies a class that cannot 
be found.  The {0} class should be in the module with the ejb-jar.xml or in a 
shared library  

Modified: 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/BasicSpringTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/BasicSpringTest.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/BasicSpringTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/BasicSpringTest.java
 Fri Apr  8 01:30:11 2011
@@ -22,6 +22,7 @@ import org.springframework.context.suppo
 
 public class BasicSpringTest extends TestCase {
     public void test() throws Exception {
+        
System.setProperty("openejb.deployments.classpath.include",".*/spring-integration.*");
         ClassPathXmlApplicationContext context = new 
ClassPathXmlApplicationContext("org/apache/openejb/spring/test.xml");
         assertTrue(context.getBeanDefinitionCount() > 0);
 

Modified: 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/SpringTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/SpringTest.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/SpringTest.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-spring/src/test/java/org/apache/openejb/spring/SpringTest.java
 Fri Apr  8 01:30:11 2011
@@ -34,7 +34,10 @@ import org.springframework.context.suppo
 
 public class SpringTest extends TestCase {
     public void test() throws Exception {
+        
System.setProperty("openejb.deployments.classpath.include",".*/openejb-spring.*");
+
         ClassPathXmlApplicationContext context = new 
ClassPathXmlApplicationContext("org/apache/openejb/spring/spring.xml");
+        
         assertTrue(context.getBeanDefinitionCount() > 0);
 
         //

Modified: 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
 (original)
+++ 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/AuthTest.java
 Fri Apr  8 01:30:11 2011
@@ -17,6 +17,7 @@
 package org.apache.openejb;
 
 import junit.framework.TestCase;
+import org.apache.openejb.config.DeploymentsResolver;
 import org.apache.openejb.server.ejbd.EjbServer;
 import org.apache.openejb.server.ServiceDaemon;
 import org.apache.openejb.core.ServerFederation;
@@ -35,8 +36,7 @@ public class AuthTest extends TestCase {
         EjbServer ejbServer = new EjbServer();
 
         Properties initProps = new Properties();
-        initProps.setProperty("openejb.deployments.classpath.include", "");
-        
initProps.setProperty("openejb.deployments.classpath.filter.descriptors", 
"true");
+        initProps.put(DeploymentsResolver.DEPLOYMENTS_CLASSPATH_PROPERTY, 
Boolean.toString(false));
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 

Modified: 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/JndiTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/JndiTest.java?rev=1090081&r1=1090080&r2=1090081&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/JndiTest.java
 (original)
+++ 
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/JndiTest.java
 Fri Apr  8 01:30:11 2011
@@ -17,6 +17,7 @@
 package org.apache.openejb;
 
 import junit.framework.TestCase;
+import org.apache.openejb.config.DeploymentsResolver;
 import org.apache.openejb.server.ejbd.EjbServer;
 import org.apache.openejb.server.ServiceDaemon;
 import org.apache.openejb.core.ServerFederation;
@@ -47,8 +48,7 @@ public class JndiTest extends TestCase {
         EjbServer ejbServer = new EjbServer();
 
         Properties initProps = new Properties();
-        initProps.setProperty("openejb.deployments.classpath.include", "");
-        
initProps.setProperty("openejb.deployments.classpath.filter.descriptors", 
"true");
+        initProps.put(DeploymentsResolver.DEPLOYMENTS_CLASSPATH_PROPERTY, 
Boolean.toString(false));
         OpenEJB.init(initProps, new ServerFederation());
         ejbServer.init(new Properties());
 


Reply via email to