You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2012/02/01 10:12:55 UTC
svn commit: r1239018 -
/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
Author: andygumbrecht
Date: Wed Feb 1 09:12:54 2012
New Revision: 1239018
URL: http://svn.apache.org/viewvc?rev=1239018&view=rev
Log:
Apply final where applicable.
Put back and append ADDITIONAL_EXCLUDES and ADDITIONAL_INCLUDE for now as it is nice for testing.
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java?rev=1239018&r1=1239017&r2=1239018&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/NewLoaderLogic.java Wed Feb 1 09:12:54 2012
@@ -51,19 +51,21 @@ import java.util.List;
import java.util.Set;
/**
-* @version $Rev$ $Date$
-*/
+ * @version $Rev$ $Date$
+ */
public class NewLoaderLogic {
private static final Logger logger = DeploymentLoader.logger;
+ public static final String ADDITIONAL_EXCLUDES = System.getProperty("openejb.additional.exclude");
+ public static final String ADDITIONAL_INCLUDE = System.getProperty("openejb.additional.include");
private static final String EXCLUSION_FILE = "exclusions.list";
private static String[] exclusions = null;
- public static UrlSet filterArchives(Filter filter, ClassLoader classLoader, UrlSet urlSet) {
+ public static UrlSet filterArchives(final Filter filter, final ClassLoader classLoader, UrlSet urlSet) {
- for (URL url : urlSet.getUrls()) {
- for (Archive archive : ClasspathArchive.archives(classLoader, url)) {
+ for (final URL url : urlSet.getUrls()) {
+ for (final Archive archive : ClasspathArchive.archives(classLoader, url)) {
- FilteredArchive filtered = new FilteredArchive(archive, filter);
+ final FilteredArchive filtered = new FilteredArchive(archive, filter);
if (!filtered.iterator().hasNext()) {
urlSet = urlSet.exclude(url);
@@ -85,11 +87,11 @@ public class NewLoaderLogic {
// 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.embeddable.EJBContainer", "javax.naming.InitialContext");
+ final Filter start = Filters.classes("javax.ejb.embeddable.EJBContainer", "javax.naming.InitialContext");
- Iterator<StackTraceElement> iterator = elements.iterator();
+ final Iterator<StackTraceElement> iterator = elements.iterator();
while (iterator.hasNext()) {
- StackTraceElement element = iterator.next();
+ final StackTraceElement element = iterator.next();
iterator.remove();
// If we haven't yet reached an entry point, just keep going
@@ -97,7 +99,7 @@ public class NewLoaderLogic {
// We found an entry point.
// Fast-forward past this class
- while(iterator.hasNext()&&element.getClassName().equals(iterator.next().getClassName())) iterator.remove();
+ 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;
@@ -108,7 +110,7 @@ public class NewLoaderLogic {
// Now iterate till we find an END point
// We don't want any of the classes after that
{
- Filter end = Filters.packages(
+ final Filter end = Filters.packages(
"junit.",
"org.junit.",
"org.testng.",
@@ -119,10 +121,7 @@ public class NewLoaderLogic {
// 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();
-
+ for (final StackTraceElement element : elements) {
if (end.accept(element.getClassName())) break;
callers.add(element.getClassName());
@@ -134,13 +133,13 @@ public class NewLoaderLogic {
// Finally filter out everything that we definitely don't want
{
- Filter unwanted = Filters.packages(
+ final Filter unwanted = Filters.packages(
"java.",
"javax.",
"sun.reflect."
);
- Iterator<String> classes = callers.iterator();
+ final Iterator<String> classes = callers.iterator();
while (classes.hasNext()) {
if (unwanted.accept(classes.next())) classes.remove();
}
@@ -150,23 +149,22 @@ public class NewLoaderLogic {
return callers;
}
- public static UrlSet applyBuiltinExcludes(UrlSet urlSet) throws MalformedURLException {
+ public static UrlSet applyBuiltinExcludes(final UrlSet urlSet) throws MalformedURLException {
final Filter filter = Filters.prefixes(getExclusions());
-// filter = Filters.optimize(filter, new PatternFilter(".*/openejb-.*"));
- List<URL> urls = urlSet.getUrls();
- Iterator<URL> iterator = urls.iterator();
+ //filter = Filters.optimize(filter, new PatternFilter(".*/openejb-.*"));
+ final List<URL> urls = urlSet.getUrls();
+ final Iterator<URL> iterator = urls.iterator();
while (iterator.hasNext()) {
- URL url = iterator.next();
- File file = URLs.toFile(url);
+ final URL url = iterator.next();
+ final File file = URLs.toFile(url);
- String name = filter(file).getName();
-// System.out.println("JAR "+name);
- if (filter.accept(name)) iterator.remove();
+ final String name = filter(file).getName();
+ if (filter.accept(name)) {
+ iterator.remove();
+ }
}
-
-
return new UrlSet(urls);
}
@@ -175,46 +173,111 @@ public class NewLoaderLogic {
}
public static String[] getExclusions() {
+
if (exclusions != null) {
return exclusions;
}
+ FileInputStream fis = null;
+
try {
final File conf = SystemInstance.get().getBase().getDirectory("conf");
final File exclusionsFile = new File(conf, EXCLUSION_FILE);
if (exclusionsFile.exists()) {
- exclusions = readInputStreamList(new FileInputStream(exclusionsFile));
+ fis = new FileInputStream(exclusionsFile);
+ exclusions = readInputStreamList(fis);
+
+ logger.info("Loaded classpath exclusions from: " + exclusionsFile.getAbsolutePath());
}
- } catch (IOException e) {
+ } catch (Throwable e) {
// ignored
+ } finally {
+ if (null != fis) {
+ try {
+ fis.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
}
if (exclusions == null) {
- exclusions = readInputStreamList(NewLoaderLogic.class.getResourceAsStream("/default.exclusions"));
+
+ InputStream is = null;
+ try {
+ is = NewLoaderLogic.class.getResourceAsStream("/default.exclusions");
+ exclusions = readInputStreamList(is);
+
+ logger.debug("Loaded default.exclusions");
+
+ } catch (Throwable e) {
+ // ignored
+ } finally {
+ if (null != is) {
+ try {
+ is.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
+ }
}
- return exclusions;
+ final List<String> excludes = null != exclusions ? Arrays.asList(exclusions) : new ArrayList<String>();
+
+ if (ADDITIONAL_EXCLUDES != null) {
+ for (final String exclude : ADDITIONAL_EXCLUDES.split(",")) {
+ excludes.add(exclude.trim());
+ }
+ }
+ if (ADDITIONAL_INCLUDE != null) { // include = not excluded
+ for (final String rawInclude : ADDITIONAL_INCLUDE.split(",")) {
+ final String include = rawInclude.trim();
+ final Iterator<String> excluded = excludes.iterator();
+ while (excluded.hasNext()) {
+ if (excluded.next().startsWith(include)) {
+ excluded.remove();
+ }
+ }
+ }
+ }
+
+ return excludes.toArray(new String[excludes.size()]);
}
- private static String[] readInputStreamList(InputStream is) {
+ private static String[] readInputStreamList(final InputStream is) {
+
final List<String> list = new ArrayList<String>();
- final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+ BufferedReader reader = null;
String line;
+
try {
+
+ reader = new BufferedReader(new InputStreamReader(is));
+
while ((line = reader.readLine()) != null) {
final String value = line.trim();
if (!value.isEmpty()) {
list.add(value);
}
}
- } catch (IOException e) {
- // ignored
+ } catch (Throwable e) {
+ logger.warning("readInputStreamList: Failed to read provided stream");
+ } finally {
+ if (null != reader) {
+ try {
+ reader.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ }
}
+
return list.toArray(new String[list.size()]);
}
private static File filter(File location) {
- List<String> invalid = new ArrayList<String>();
+ final List<String> invalid = new ArrayList<String>();
invalid.add("classes");
invalid.add("test-classes");
invalid.add("target");
@@ -229,35 +292,35 @@ public class NewLoaderLogic {
}
- public static void _loadFromClasspath(FileUtils base, List<URL> jarList, ClassLoader classLoader) {
+ public static void _loadFromClasspath(final FileUtils base, final List<URL> jarList, final ClassLoader classLoader) {
- PerformanceTimer timer = new PerformanceTimer();
+ final 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);
+ final Options options = SystemInstance.get().getOptions();
+ final String include = "";
+ final String exclude = "";
+ final PatternFilter classpathInclude = new PatternFilter(options.get(DeploymentFilterable.CLASSPATH_INCLUDE, ".*"));
+ final PatternFilter classpathExclude = new PatternFilter(options.get(DeploymentFilterable.CLASSPATH_EXCLUDE, ""));
+ final IncludeExcludeFilter classpathFilter = new IncludeExcludeFilter(classpathInclude, classpathExclude);
- PatternFilter packageInclude = new PatternFilter(options.get(DeploymentFilterable.PACKAGE_INCLUDE, ".*"));
- PatternFilter packageExclude = new PatternFilter(options.get(DeploymentFilterable.PACKAGE_EXCLUDE, ""));
+ final PatternFilter packageInclude = new PatternFilter(options.get(DeploymentFilterable.PACKAGE_INCLUDE, ".*"));
+ final PatternFilter packageExclude = new PatternFilter(options.get(DeploymentFilterable.PACKAGE_EXCLUDE, ""));
- IncludeExcludeFilter packageFilter;
+ final IncludeExcludeFilter packageFilter;
if (classpathInclude.getPattern().pattern().equals(".*") && packageInclude.getPattern().pattern().equals(".*")) {
timer.event("callers");
- Set<String> callers = callers();
+ final Set<String> callers = callers();
timer.event("parse packages");
callers.size();
- Set<String> packages = new HashSet<String>();
- for (String caller : callers) {
+ final Set<String> packages = new HashSet<String>();
+ for (final String caller : callers) {
String[] parts = caller.split("\\.");
if (parts.length > 2) {
parts = new String[]{parts[0], parts[1]};
@@ -265,7 +328,7 @@ public class NewLoaderLogic {
packages.add(Join.join(".", parts));
}
- Filter includes = Filters.packages(packages.toArray(new String[0]));
+ final Filter includes = Filters.packages(packages.toArray(new String[packages.size()]));
packageFilter = new IncludeExcludeFilter(includes, packageExclude);
@@ -277,9 +340,9 @@ public class NewLoaderLogic {
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);
+ final Set<RequireDescriptors> requireDescriptors = options.getAll(DeploymentFilterable.CLASSPATH_REQUIRE_DESCRIPTOR, RequireDescriptors.CLIENT);
+ final boolean filterDescriptors = options.get(DeploymentFilterable.CLASSPATH_FILTER_DESCRIPTORS, false);
+ final boolean filterSystemApps = options.get(DeploymentFilterable.CLASSPATH_FILTER_SYSTEMAPPS, true);
try {
UrlSet urlSet = new UrlSet(classLoader);
@@ -295,7 +358,7 @@ public class NewLoaderLogic {
timer.event("classpath filter");
- UrlSet beforeFiltering = urlSet;
+ final UrlSet beforeFiltering = urlSet;
urlSet = urlSet.filter(classpathFilter);
@@ -306,7 +369,7 @@ public class NewLoaderLogic {
logger.error(message);
logger.info("Eligible Classpath before filtering:");
- for (URL url : beforeFiltering) {
+ for (final URL url : beforeFiltering) {
logger.info(String.format(" %s", url.toExternalForm()));
}
// throw new IllegalStateException(message);
@@ -339,8 +402,8 @@ public class NewLoaderLogic {
// urlSet = urlSet.exclude(".*/openejb-[^/]+(.(jar|ear|war)(!/)?|/target/(test-)?classes/?)");
// }
- List<URL> urls = urlSet.getUrls();
- int size = urls.size();
+ final List<URL> urls = urlSet.getUrls();
+ final int size = urls.size();
// if (size == 0) {
// logger.warning("No classpath URLs matched. Current settings: " + CLASSPATH_EXCLUDE + "='" + exclude + "', " + CLASSPATH_INCLUDE + "='" + include + "'");
// return;
@@ -360,29 +423,29 @@ public class NewLoaderLogic {
// }
// }
- long begin = System.currentTimeMillis();
+ final long begin = System.currentTimeMillis();
DeploymentsResolver.processUrls(urls, classLoader, requireDescriptors, base, jarList);
- long end = System.currentTimeMillis();
- long time = end - begin;
+ final long end = System.currentTimeMillis();
+ final long time = end - begin;
timer.stop(System.out);
- UrlSet unchecked = new UrlSet();
+ final 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);
+ 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()) {
+ final int urlCount = urlSet.getUrls().size() + unchecked.getUrls().size();
+ logger.debug("URLs after filtering: " + urlCount);
+ for (final URL url : urlSet.getUrls()) {
logger.debug("Annotations path: " + url);
}
- for (URL url : unchecked.getUrls()) {
+ for (final URL url : unchecked.getUrls()) {
logger.debug("Descriptors path: " + url);
}
}
@@ -399,12 +462,12 @@ public class NewLoaderLogic {
} 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) {
+ final List<String> list = new ArrayList<String>();
+ for (final URL url : urls) {
list.add(url.toExternalForm());
}
Collections.sort(list);
- for (String url : list) {
+ for (final String url : list) {
logger.info("Matched: " + url);
}
}