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());