You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Shawn Jiang <ge...@gmail.com> on 2011/04/16 16:20:32 UTC
org.apache.openejb.config.NewLoaderLogic.callers() will return
abstract classes which can't pass the validation logic in org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
org.apache.openejb.config.NewLoaderLogic.callers() will return some callers
and then use these callers to create a new ejbmodule.
When there are abstract classes in the caller stacktrace, the abstract
classes will also be used to create the ejbmodule. Because
org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
does not allow abstract class as an EJB class. I've seen lots of geronimo
ejb tck regression because of abstractDeclaredAsBean validation failures.
I think the abstract classes should be filtered out from the callers in
NewLoaderLogic.callers().
>From the log, seems this part of work is still ongoing. Is there a better
way in plan to handle this issue ?
On Fri, Apr 8, 2011 at 9:30 AM, <db...@apache.org> wrote:
> 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());
>
>
>
>
--
Shawn
Re: org.apache.openejb.config.NewLoaderLogic.callers() will return
abstract classes which can't pass the validation logic in org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
Posted by Shawn Jiang <ge...@gmail.com>.
Thank you !
On Wed, Apr 20, 2011 at 11:08 PM, David Blevins <da...@gmail.com>wrote:
> Hi Shawn!
>
> Thanks for pointing this out. I committed something that should screen out
> those invalid classes.
>
>
> -David
>
> On Apr 20, 2011, at 7:10 AM, Shawn Jiang wrote:
>
> > Hi devs,
> >
> > Any ideas on this issue ?
> >
> > On Sat, Apr 16, 2011 at 10:20 PM, Shawn Jiang <ge...@gmail.com>
> wrote:
> >
> >> org.apache.openejb.config.NewLoaderLogic.callers() will return some
> callers
> >> and then use these callers to create a new ejbmodule.
> >>
> >> When there are abstract classes in the caller stacktrace, the abstract
> >> classes will also be used to create the ejbmodule. Because
> >>
> org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
> >> does not allow abstract class as an EJB class. I've seen lots of
> geronimo
> >> ejb tck regression because of abstractDeclaredAsBean validation
> failures.
> >> I think the abstract classes should be filtered out from the callers in
> >> NewLoaderLogic.callers().
> >>
> >> From the log, seems this part of work is still ongoing. Is there a
> >> better way in plan to handle this issue ?
> >>
> >>
> >> On Fri, Apr 8, 2011 at 9:30 AM, <db...@apache.org> wrote:
> >>
> >>> 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());
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >> --
> >> Shawn
> >>
> >
> >
> >
> > --
> > Shawn
>
>
--
Shawn
Re: org.apache.openejb.config.NewLoaderLogic.callers() will return abstract classes which can't pass the validation logic in org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
Posted by David Blevins <da...@gmail.com>.
Hi Shawn!
Thanks for pointing this out. I committed something that should screen out those invalid classes.
-David
On Apr 20, 2011, at 7:10 AM, Shawn Jiang wrote:
> Hi devs,
>
> Any ideas on this issue ?
>
> On Sat, Apr 16, 2011 at 10:20 PM, Shawn Jiang <ge...@gmail.com> wrote:
>
>> org.apache.openejb.config.NewLoaderLogic.callers() will return some callers
>> and then use these callers to create a new ejbmodule.
>>
>> When there are abstract classes in the caller stacktrace, the abstract
>> classes will also be used to create the ejbmodule. Because
>> org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
>> does not allow abstract class as an EJB class. I've seen lots of geronimo
>> ejb tck regression because of abstractDeclaredAsBean validation failures.
>> I think the abstract classes should be filtered out from the callers in
>> NewLoaderLogic.callers().
>>
>> From the log, seems this part of work is still ongoing. Is there a
>> better way in plan to handle this issue ?
>>
>>
>> On Fri, Apr 8, 2011 at 9:30 AM, <db...@apache.org> wrote:
>>
>>> 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());
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Shawn
>>
>
>
>
> --
> Shawn
Re: org.apache.openejb.config.NewLoaderLogic.callers() will return
abstract classes which can't pass the validation logic in org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
Posted by Shawn Jiang <ge...@gmail.com>.
Hi devs,
Any ideas on this issue ?
On Sat, Apr 16, 2011 at 10:20 PM, Shawn Jiang <ge...@gmail.com> wrote:
> org.apache.openejb.config.NewLoaderLogic.callers() will return some callers
> and then use these callers to create a new ejbmodule.
>
> When there are abstract classes in the caller stacktrace, the abstract
> classes will also be used to create the ejbmodule. Because
> org.apache.openejb.config.rules.CheckClasses.check_hasEjbClass(EnterpriseBean)
> does not allow abstract class as an EJB class. I've seen lots of geronimo
> ejb tck regression because of abstractDeclaredAsBean validation failures.
> I think the abstract classes should be filtered out from the callers in
> NewLoaderLogic.callers().
>
> From the log, seems this part of work is still ongoing. Is there a
> better way in plan to handle this issue ?
>
>
> On Fri, Apr 8, 2011 at 9:30 AM, <db...@apache.org> wrote:
>
>> 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());
>>
>>
>>
>>
>
>
> --
> Shawn
>
--
Shawn