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 12:45:31 UTC
svn commit: r1239091 - in /openejb/trunk/openejb/container:
openejb-core/src/main/java/org/apache/openejb/cli/
openejb-core/src/main/java/org/apache/openejb/util/
openejb-loader/src/main/java/org/apache/openejb/loader/
Author: andygumbrecht
Date: Wed Feb 1 11:45:31 2012
New Revision: 1239091
URL: http://svn.apache.org/viewvc?rev=1239091&view=rev
Log:
Fix classloader issue due to BasicURLClassPath filenames:
Now using following which should be rock solid:
try {
jars[j] = new URL(new File(dir, name).getCanonicalFile().getAbsoluteFile().toURI().toURL().toExternalForm());
} catch (IOException e) {
jars[j] = new URL(new File(dir, name).getAbsoluteFile().toURI().toURL().toExternalForm());
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UrlCache.java
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemClassPath.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java?rev=1239091&r1=1239090&r2=1239091&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cli/Bootstrap.java Wed Feb 1 11:45:31 2012
@@ -21,7 +21,6 @@ import org.apache.openejb.loader.SystemC
import java.io.File;
import java.net.URI;
import java.net.URL;
-import java.net.URLDecoder;
/**
* @version $Rev$ $Date$
@@ -33,37 +32,37 @@ public class Bootstrap {
private final static String OPENEJB_BASE_PROPERTY_NAME = "openejb.base";
private final static String OPENEJB_CLI_MAIN_CLASS_NAME = "org.apache.openejb.cli.MainImpl";
- private static void setupHome(String[] args) {
- for (String arg : args) {
- if (arg.startsWith("-D" + OPENEJB_HOME_PROPERTY_NAME)){
+ private static void setupHome(final String[] args) {
+ for (final String arg : args) {
+ if (arg.startsWith("-D" + OPENEJB_HOME_PROPERTY_NAME)) {
addProperty(arg);
- } else if (arg.startsWith("-D" + OPENEJB_BASE_PROPERTY_NAME)){
+ } else if (arg.startsWith("-D" + OPENEJB_BASE_PROPERTY_NAME)) {
addProperty(arg);
}
}
- String homeProperty = System.getProperty(OPENEJB_HOME_PROPERTY_NAME);
- if (homeProperty != null){
- if (new File(homeProperty).exists()){
+ final String homeProperty = System.getProperty(OPENEJB_HOME_PROPERTY_NAME);
+ if (homeProperty != null) {
+ if (new File(homeProperty).exists()) {
return;
}
}
try {
- URL classURL = Thread.currentThread().getContextClassLoader().getResource(OPENEJB_VERSION_PROPERTIES_FILE_NAME);
+ final URL classURL = Thread.currentThread().getContextClassLoader().getResource(OPENEJB_VERSION_PROPERTIES_FILE_NAME);
if (classURL != null) {
String propsString = classURL.getFile();
propsString = propsString.substring(0, propsString.indexOf("!"));
- URI uri = new URI(propsString);
+ final URI uri = new URI(propsString);
- File jarFile = new File(uri.getSchemeSpecificPart());
+ final File jarFile = new File(uri.getSchemeSpecificPart());
- if (jarFile.getName().indexOf("openejb-core") > -1) {
- File lib = jarFile.getParentFile();
- File home = lib.getParentFile().getCanonicalFile();
+ if (jarFile.getName().contains("openejb-core")) {
+ final File lib = jarFile.getParentFile();
+ final File home = lib.getParentFile().getCanonicalFile();
System.setProperty(OPENEJB_HOME_PROPERTY_NAME, home.getAbsolutePath());
}
@@ -73,17 +72,17 @@ public class Bootstrap {
}
}
- private static void addProperty(String arg) {
- String prop = arg.substring(arg.indexOf("-D") + 2, arg.indexOf("="));
- String val = arg.substring(arg.indexOf("=") + 1);
+ private static void addProperty(final String arg) {
+ final String prop = arg.substring(arg.indexOf("-D") + 2, arg.indexOf("="));
+ final String val = arg.substring(arg.indexOf("=") + 1);
System.setProperty(prop, val);
}
private static void setupClasspath() {
try {
- File lib = new File(System.getProperty(OPENEJB_HOME_PROPERTY_NAME) + File.separator + "lib");
- SystemClassPath systemCP = new SystemClassPath();
+ final File lib = new File(System.getProperty(OPENEJB_HOME_PROPERTY_NAME) + File.separator + "lib");
+ final SystemClassPath systemCP = new SystemClassPath();
systemCP.addJarsToPath(lib);
} catch (Exception e) {
System.err.println("Error setting up the classpath: " + e.getClass() + ": " + e.getMessage());
@@ -94,12 +93,12 @@ public class Bootstrap {
/**
* Read commands from BASE_PATH (using XBean's ResourceFinder) and execute the one specified on the command line
*/
- public static void main(String[] args) throws Exception {
+ public static void main(final String[] args) throws Exception {
setupHome(args);
setupClasspath();
- Class<?> clazz = Bootstrap.class.getClassLoader().loadClass(OPENEJB_CLI_MAIN_CLASS_NAME);
- Main main = (Main) clazz.newInstance();
+ final Class<?> clazz = Bootstrap.class.getClassLoader().loadClass(OPENEJB_CLI_MAIN_CLASS_NAME);
+ final Main main = (Main) clazz.newInstance();
try {
main.main(args);
} catch (SystemExitException e) {
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UrlCache.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UrlCache.java?rev=1239091&r1=1239090&r2=1239091&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UrlCache.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UrlCache.java Wed Feb 1 11:45:31 2012
@@ -58,13 +58,7 @@ public class UrlCache {
if (value != null) {
antiJarLocking = Boolean.valueOf(value);
} else {
- boolean embedded = false;
- try {
- FileUtils openejbBase = SystemInstance.get().getBase();
- embedded = !openejbBase.getDirectory("conf").exists();
- } catch (IOException e) {
- }
-
+ final boolean embedded = Boolean.parseBoolean( SystemInstance.get().getProperty("openejb.embedded", "false"));
// antiJarLocking is on by default when we are not embedded and running on windows
antiJarLocking = !embedded && System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows");
}
Modified: openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java?rev=1239091&r1=1239090&r2=1239091&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java (original)
+++ openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/BasicURLClassPath.java Wed Feb 1 11:45:31 2012
@@ -17,6 +17,7 @@
package org.apache.openejb.loader;
import java.io.File;
+import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
@@ -27,6 +28,7 @@ import java.security.PrivilegedAction;
public abstract class BasicURLClassPath implements ClassPath {
public static ClassLoader getContextClassLoader() {
return java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<ClassLoader>() {
+ @Override
public ClassLoader run() {
return Thread.currentThread().getContextClassLoader();
}
@@ -36,18 +38,19 @@ public abstract class BasicURLClassPath
private java.lang.reflect.Field ucpField;
protected void addJarToPath(final URL jar, final URLClassLoader loader) throws Exception {
- Object cp = getURLClassPath(loader);
- Method addURLMethod = getAddURLMethod(loader);
- addURLMethod.invoke(cp, new URL[] { jar });
+ final Object cp = getURLClassPath(loader);
+ final Method addURLMethod = getAddURLMethod(loader);
+ addURLMethod.invoke(cp, new URL[]{jar});
}
private Method getAddURLMethod(final URLClassLoader loader) {
return AccessController.doPrivileged(new PrivilegedAction<Method>() {
+ @Override
public Method run() {
- Object cp;
+ final Object cp;
try {
cp = getURLClassPath(loader);
- Class<?> clazz = cp.getClass();
+ final Class<?> clazz = cp.getClass();
return clazz.getDeclaredMethod("addURL", URL.class);
} catch (Exception e) {
e.printStackTrace();
@@ -62,32 +65,41 @@ public abstract class BasicURLClassPath
protected void addJarsToPath(final File dir, final URLClassLoader loader) throws Exception {
if (dir == null || !dir.exists()) return;
- String[] jarNames = dir.list(new java.io.FilenameFilter() {
- public boolean accept(File dir, String name) {
-
- return (name.endsWith(".jar") || name.endsWith(".zip"));
+ final String[] jarNames = dir.list(new java.io.FilenameFilter() {
+ @Override
+ public boolean accept(final File dir, String name) {
+ name = name.toLowerCase();
+ return name.endsWith(".jar") || name.endsWith(".zip");
}
});
final URL[] jars = new URL[jarNames.length];
+ final boolean isWindows = System.getProperty("os.name", "unknown").toLowerCase().startsWith("windows");
+
for (int j = 0; j < jarNames.length; j++) {
- jars[j] = new File(dir, jarNames[j]).toURI().toURL();
+ final String name = isWindows ? jarNames[j].toLowerCase() : jarNames[j];
+ try {
+ jars[j] = new URL(new File(dir, name).getCanonicalFile().getAbsoluteFile().toURI().toURL().toExternalForm());
+ } catch (IOException e) {
+ jars[j] = new URL(new File(dir, name).getAbsoluteFile().toURI().toURL().toExternalForm());
+ }
}
- Object cp = getURLClassPath(loader);
- Method addURLMethod = getAddURLMethod(loader);
- for (URL jar : jars) {
- addURLMethod.invoke(cp, new URL[] { jar });
+ final Object cp = getURLClassPath(loader);
+ final Method addURLMethod = getAddURLMethod(loader);
+ for (final URL jar : jars) {
+ addURLMethod.invoke(cp, new URL[]{jar});
}
}
- protected Object getURLClassPath(URLClassLoader loader) throws Exception {
+ protected Object getURLClassPath(final URLClassLoader loader) throws Exception {
return getUcpField().get(loader);
}
private java.lang.reflect.Field getUcpField() throws Exception {
if (ucpField == null) {
ucpField = AccessController.doPrivileged(new PrivilegedAction<Field>() {
+ @Override
public Field run() {
java.lang.reflect.Field ucp = null;
try {
Modified: openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemClassPath.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemClassPath.java?rev=1239091&r1=1239090&r2=1239091&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemClassPath.java (original)
+++ openejb/trunk/openejb/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemClassPath.java Wed Feb 1 11:45:31 2012
@@ -32,17 +32,20 @@ public class SystemClassPath extends Bas
private URLClassLoader sysLoader;
- public void addJarsToPath(File dir) throws Exception {
+ @Override
+ public void addJarsToPath(final File dir) throws Exception {
this.addJarsToPath(dir, getSystemLoader());
this.rebuildJavaClassPathVariable();
}
- public void addJarToPath(URL jar) throws Exception {
+ @Override
+ public void addJarToPath(final URL jar) throws Exception {
this.addJarToPath(jar, getSystemLoader());
this.rebuildJavaClassPathVariable();
}
+ @Override
public ClassLoader getClassLoader() {
try {
return getSystemLoader();
@@ -59,15 +62,15 @@ public class SystemClassPath extends Bas
}
private void rebuildJavaClassPathVariable() throws Exception {
- URLClassLoader loader = getSystemLoader();
- Object cp = getURLClassPath(loader);
- Method getURLsMethod = getGetURLsMethod();
- URL[] urls = (URL[]) getURLsMethod.invoke(cp);
+ final URLClassLoader loader = getSystemLoader();
+ final Object cp = getURLClassPath(loader);
+ final Method getURLsMethod = getGetURLsMethod();
+ final URL[] urls = (URL[]) getURLsMethod.invoke(cp);
if (urls.length < 1)
return;
- StringBuilder path = new StringBuilder(urls.length * 32);
+ final StringBuilder path = new StringBuilder(urls.length * 32);
File s = new File(URLDecoder.decode(urls[0].getFile(), "UTF-8"));
path.append(s.getPath());
@@ -88,11 +91,12 @@ public class SystemClassPath extends Bas
private Method getGetURLsMethod() {
return AccessController.doPrivileged(new PrivilegedAction<Method>() {
+ @Override
public Method run() {
try {
- URLClassLoader loader = getSystemLoader();
- Object cp = getURLClassPath(loader);
- Class<?> clazz = cp.getClass();
+ final URLClassLoader loader = getSystemLoader();
+ final Object cp = getURLClassPath(loader);
+ final Class<?> clazz = cp.getClass();
try {
return clazz.getDeclaredMethod("getURLs", URL.class);