dblevins 2005/07/24 06:48:53
Modified: modules/core/src/java/org/openejb/loader
TomcatClassPath.java WebAppClassPath.java
Log:
Encapsulated variables in ServerMetaData
Put in support for guessing Tomcat4 vs Tomcat5
Revision Changes Path
1.3 +44 -40
openejb1/modules/core/src/java/org/openejb/loader/TomcatClassPath.java
Index: TomcatClassPath.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb1/modules/core/src/java/org/openejb/loader/TomcatClassPath.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TomcatClassPath.java 12 Jul 2005 23:51:16 -0000 1.2
+++ TomcatClassPath.java 24 Jul 2005 10:48:53 -0000 1.3
@@ -46,11 +46,11 @@
package org.openejb.loader;
import java.io.File;
+import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
-import java.lang.reflect.Method;
/**
* @version $Revision$ $Date$
@@ -63,17 +63,31 @@
/**
* The Tomcat Common ClassLoader
*/
- private ClassLoader tomcatLoader;
+ private final ClassLoader tomcatLoader;
/**
* The addRepository(String jar) method of the Tomcat Common ClassLoader
*/
- private java.lang.reflect.Method addRepositoryMethod;
+ private Method addRepositoryMethod;
+ private Method addURLMethod;
+
+ public TomcatClassPath() {
+ tomcatLoader = getCommonLoader(getContextClassLoader()).getParent();
+ try {
+ addRepositoryMethod = getAddRepositoryMethod();
+ } catch (Exception tomcat4Exception) {
+ // Must be tomcat 5
+ try {
+ addURLMethod = getAddURLMethod();
+ } catch (Exception tomcat5Exception) {
+ throw new RuntimeException("Failed accessing classloader for
Tomcat 4 or 5", tomcat5Exception);
+ }
+ }
+ }
public void addJarsToPath(File dir) throws Exception {
String[] jarNames = dir.list(new java.io.FilenameFilter() {
public boolean accept(File dir, String name) {
- //System.out.println("FILE "+name);
return (name.endsWith(".jar") || name.endsWith(".zip"));
}
});
@@ -89,11 +103,10 @@
}
public ClassLoader getClassLoader() {
- return getCommonLoader();
+ return tomcatLoader;
}
public void addJarToPath(URL jar) throws Exception {
- //System.out.println("[|] TOMCAT "+jar.toExternalForm());
this._addJarToPath(jar);
rebuild();
}
@@ -104,12 +117,16 @@
}
public void addRepository(String path) throws Exception {
- this.getAddRepositoryMethod().invoke(getCommonLoader(), new Object[]
{ path });
+ if (addRepositoryMethod != null){
+ addRepositoryMethod.invoke(getClassLoader(), new Object[]{path});
+ } else {
+ addURLMethod.invoke(getClassLoader(), new Object[]{new
File(path).toURL()});
+ }
}
- private void rebuild() {
+ protected void rebuild() {
try {
- sun.misc.URLClassPath cp = getURLClassPath((URLClassLoader)
getCommonLoader());
+ sun.misc.URLClassPath cp = getURLClassPath((URLClassLoader)
getClassLoader());
URL[] urls = cp.getURLs();
//for (int i=0; i < urls.length; i++){
// System.out.println(urls[i].toExternalForm());
@@ -136,13 +153,6 @@
}
- protected ClassLoader getCommonLoader() {
- if (tomcatLoader == null) {
- tomcatLoader =
this.getCommonLoader(getContextClassLoader()).getParent();
- }
- return tomcatLoader;
- }
-
private ClassLoader getCommonLoader(ClassLoader loader) {
if
(loader.getClass().getName().equals("org.apache.catalina.loader.StandardClassLoader"))
{
return loader;
@@ -159,30 +169,24 @@
*
* @return URLClassLoader.addURL method instance
*/
- private java.lang.reflect.Method _getAddRepositoryMethod() throws
Exception {
- if (addRepositoryMethod == null) {
-
- final Class clazz = URLClassLoader.class;
-
- this.addRepositoryMethod = (java.lang.reflect.Method)
AccessController
- .doPrivileged(new PrivilegedAction() {
- public Object run() {
- java.lang.reflect.Method method = null;
- try {
- method = clazz.getDeclaredMethod("addURL",
new Class[] { URL.class });
- method.setAccessible(true);
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- return method;
- }
- });
- }
-
- return addRepositoryMethod;
+ private java.lang.reflect.Method getAddURLMethod() throws Exception {
+ return (java.lang.reflect.Method) AccessController.doPrivileged(new
PrivilegedAction() {
+ public Object run() {
+ java.lang.reflect.Method method = null;
+ try {
+ Class clazz = URLClassLoader.class;
+ method = clazz.getDeclaredMethod("addURL", new
Class[]{URL.class});
+ method.setAccessible(true);
+ return method;
+ } catch (Exception e2) {
+ e2.printStackTrace();
+ }
+ return method;
+ }
+ });
}
- protected Method getAddRepositoryMethod() throws Exception {
+ private Method getAddRepositoryMethod() throws Exception {
return (Method) AccessController.doPrivileged(new PrivilegedAction()
{
public Object run() {
Method method = null;
1.3 +9 -9
openejb1/modules/core/src/java/org/openejb/loader/WebAppClassPath.java
Index: WebAppClassPath.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb1/modules/core/src/java/org/openejb/loader/WebAppClassPath.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WebAppClassPath.java 12 Jul 2005 23:51:16 -0000 1.2
+++ WebAppClassPath.java 24 Jul 2005 10:48:53 -0000 1.3
@@ -49,16 +49,16 @@
* @version $Revision$ $Date$
*/
public class WebAppClassPath extends TomcatClassPath {
- ClassLoader webappLoader;
+ private final ClassLoader webappLoader;
- public ClassLoader getClassLoader() {
- return getCommonLoader();
+ public WebAppClassPath() {
+ this.webappLoader = getContextClassLoader();
}
- protected ClassLoader getCommonLoader() {
- if (webappLoader == null) {
- webappLoader = getContextClassLoader();
- }
+ public ClassLoader getClassLoader() {
return webappLoader;
+ }
+
+ protected void rebuild() {
}
}