costin 01/06/08 20:22:32 Modified: src/share/org/apache/tomcat/modules/config ProfileLoader.java Log: Various fixes and cleanup in ProfileLoader. The code that was common with Main is now in IntrospectionHelper, we also use the fields in ContextManager to get the right loaders. A bit of refactoring and cleanup ( better OO :-) Revision Changes Path 1.5 +58 -98 jakarta-tomcat/src/share/org/apache/tomcat/modules/config/ProfileLoader.java Index: ProfileLoader.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/config/ProfileLoader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ProfileLoader.java 2001/03/15 07:33:18 1.4 +++ ProfileLoader.java 2001/06/09 03:22:32 1.5 @@ -87,8 +87,6 @@ */ public class ProfileLoader extends BaseInterceptor { Hashtable profiles=new Hashtable(); - ClassLoader parentLoader; - static final Jdk11Compat jdk11Compat=Jdk11Compat.getJdkCompat(); public ProfileLoader() { } @@ -155,8 +153,6 @@ { if( this != module ) return; - parentLoader=cm.getParentLoader(); - XmlMapper xh=new XmlMapper(); xh.setDebug( debug ); @@ -212,10 +208,10 @@ } public void start(SaxContext ctx ) throws Exception { - Profile p=new Profile(); + Profile p=new Profile(ploader.getContextManager() ); AttributeList attributes = ctx.getCurrentAttributes(); p.setName( attributes.getValue("name")); - ploader.setLoaders(p); + p.initClassLoaders(); ctx.pushObject( p ); } public void end(SaxContext ctx ) { @@ -242,7 +238,7 @@ Class c=null; ClassLoader cl=profile.containerLoader; try { - c=cl.loadClass( className ); + c=cl.loadClass( className ); } catch( ClassNotFoundException ex2 ) { c=profile.commonLoader.loadClass(className); } @@ -263,107 +259,27 @@ } } - void setLoaders( Profile p ) { - String name=p.getName(); - String home=cm.getHome(); - - System.out.println("XXXXX " + parentLoader ); - p.commonClassPath=getClassPath(home + "/lib/common/" + name, false); - p.commonLoader= - jdk11Compat.newClassLoaderInstance(p.commonClassPath , - parentLoader); - for( int i=0; i< p.commonClassPath.length; i++ ) { - log( "Common " + name + " " + p.commonClassPath[i]); - } - - p.sharedClassPath=getClassPath(home + "/lib/apps/" + name, false); - p.appLoader=jdk11Compat.newClassLoaderInstance(p.sharedClassPath , - p.commonLoader); - - URL[] serverClassPath=getClassPath(home + "/lib/container/" + name, - true); - p.containerLoader=jdk11Compat.newClassLoaderInstance(serverClassPath , - p.commonLoader); - log( "CCL " + p.containerLoader + " " + p.commonLoader); - for( int i=0; i< serverClassPath.length; i++ ) { - log( "Container " + name + " " + serverClassPath[i]); - } - } - - private URL[] getClassPath(String p0, boolean javacInc) - { - Vector urlV=new Vector(); - try{ - String cpComp[]=getJarFiles(p0); - if (cpComp != null){ - int jarCount=cpComp.length; - for( int i=0; i< jarCount ; i++ ) { - urlV.addElement( getURL( p0 , cpComp[i] )); - } - } - if( javacInc ) { - urlV.addElement( new URL( "file", null , - System.getProperty( "java.home" ) + - "/../lib/tools.jar")); - } - }catch(Exception ex){ - ex.printStackTrace(); - } - return getURLs(urlV); - } - - public static URL getURL( String base, String file ) { - try { - File baseF = new File(base); - File f = new File(baseF,file); - String path = f.getCanonicalPath(); - if( f.isDirectory() ){ - path +="/"; - } - return new URL( "file", null, path ); - } catch (Exception ex) { - ex.printStackTrace(); - return null; - } - } - - public String[] getJarFiles(String ld) { - File dir = new File(ld); - String[] names=null; - if (dir.isDirectory()){ - names = dir.list( new FilenameFilter(){ - public boolean accept(File d, String name) { - if (name.endsWith(".jar")){ - return true; - } - return false; - } - }); - } - - return names; - } - - private URL[] getURLs(Vector v){ - URL[] urls=new URL[ v.size() ]; - for( int i=0; i<v.size(); i++ ) { - urls[i]=(URL)v.elementAt( i ); - } - return urls; - } - } +/** Context profiles - set of modules, with separate class loaders used + to simplify configuration +*/ class Profile { String name; URL[] sharedClassPath; URL[] commonClassPath; + URL[] serverClassPath; + ClassLoader commonLoader; ClassLoader containerLoader; ClassLoader appLoader; Vector modules=new Vector(); + + ContextManager cm; - public Profile() {} + public Profile(ContextManager cm) { + this.cm=cm; + } public String getName() { return name; @@ -384,5 +300,49 @@ ClassLoader getContainerLoader() { return containerLoader; } - + + static final Jdk11Compat jdk11Compat=Jdk11Compat.getJdkCompat(); + /** init profile class loaders + */ + public void initClassLoaders() { + String home=cm.getHome(); + // Could check if no extra jars are added + + + // Create common loader + Vector commonClassPathV=new Vector(); + IntrospectionUtils.addToClassPath( commonClassPathV, + home + "/lib/common/" + name); + //IntrospectionUtils.addToClassPath( commonClassPathV, + // home + "/lib/common/"); + commonClassPath=IntrospectionUtils.getClassPath(commonClassPathV); + commonLoader= + jdk11Compat.newClassLoaderInstance(commonClassPath , + cm.getCommonLoader()); + + // Create app shared loader + Vector sharedClassPathV=new Vector(); + IntrospectionUtils.addToClassPath( sharedClassPathV, + home + "/lib/apps/" + name ); + //IntrospectionUtils.addToClassPath( sharedClassPathV, + // home + "/lib/apps/"); + sharedClassPath=IntrospectionUtils.getClassPath(sharedClassPathV); + + appLoader=jdk11Compat.newClassLoaderInstance(sharedClassPath , + cm.getAppsLoader()); + + // Create container loader + Vector serverClassPathV=new Vector(); + IntrospectionUtils.addToClassPath( serverClassPathV, + home + "/lib/container/" + name); + //IntrospectionUtils.addToClassPath( serverClassPathV, + // home + "/lib/container/"); + IntrospectionUtils.addToolsJar( serverClassPathV ); + + serverClassPath=IntrospectionUtils.getClassPath(serverClassPathV); + containerLoader=jdk11Compat.newClassLoaderInstance(serverClassPath , + cm.getContainerLoader()); + + } + }