cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
remm2004/08/16 02:31:09 Modified:catalina/src/share/org/apache/catalina/session ManagerBase.java catalina/src/share/org/apache/catalina/core StandardEngine.java StandardServer.java StandardContext.java StandardHost.java catalina/src/share/org/apache/catalina Loader.java Host.java Manager.java Engine.java catalina/src/share/org/apache/catalina/mbeans DefaultContextMBean.java MBeanFactory.java ServerLifecycleListener.java MBeanUtils.java catalina/src/share/org/apache/catalina/loader WebappLoader.java Removed: catalina/src/share/org/apache/catalina/core StandardDefaultContext.java catalina/src/share/org/apache/catalina DefaultContext.java Log: - Remove DefaultContext. - This will need cleanups. - For management, I think we should register dummy Context objects with special JMX names. Revision ChangesPath 1.31 +1 -32 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java Index: ManagerBase.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- ManagerBase.java 15 Jul 2004 19:12:45 - 1.30 +++ ManagerBase.java 16 Aug 2004 09:31:05 - 1.31 @@ -38,7 +38,6 @@ import javax.management.ObjectName; import org.apache.catalina.Container; -import org.apache.catalina.DefaultContext; import org.apache.catalina.Engine; import org.apache.catalina.Manager; import org.apache.catalina.Session; @@ -89,12 +88,6 @@ /** - * The DefaultContext with which this Manager is associated. - */ -protected DefaultContext defaultContext = null; - - -/** * Return the MessageDigest implementation to be used when * creating session identifiers. */ @@ -251,30 +244,6 @@ } -/** - * Return the DefaultContext with which this Manager is associated. - */ -public DefaultContext getDefaultContext() { - -return (this.defaultContext); - -} - - -/** - * Set the DefaultContext with which this Manager is associated. - * - * @param defaultContext The newly associated DefaultContext - */ -public void setDefaultContext(DefaultContext defaultContext) { - -DefaultContext oldDefaultContext = this.defaultContext; -this.defaultContext = defaultContext; -support.firePropertyChange(defaultContext, oldDefaultContext, this.defaultContext); - -} - - /** Returns the name of the implementation class. */ public String getClassName() { 1.25 +5 -63 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardEngine.java Index: StandardEngine.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardEngine.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- StandardEngine.java 27 Feb 2004 14:58:42 - 1.24 +++ StandardEngine.java 16 Aug 2004 09:31:05 - 1.25 @@ -18,12 +18,14 @@ package org.apache.catalina.core; +import java.io.File; +import java.util.List; + import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; + import org.apache.catalina.Container; -import org.apache.catalina.Context; -import org.apache.catalina.DefaultContext; import org.apache.catalina.Engine; import org.apache.catalina.Host; import org.apache.catalina.LifecycleException; @@ -35,8 +37,6 @@ import org.apache.commons.logging.LogFactory; import org.apache.commons.modeler.Registry; import org.apache.commons.modeler.modules.MbeansSource; -import java.io.File; -import java.util.List; /** * Standard implementation of the bEngine/b interface. Each @@ -115,11 +115,6 @@ */ private List mbeans; -/** - * DefaultContext config - */ -private DefaultContext defaultContext; - /** * The JVM Route ID for this Tomcat instance. All Route ID's must be unique @@ -208,30 +203,6 @@ /** - * Set the DefaultContext - * for new web applications. - * - * @param defaultContext The new DefaultContext - */ -public void addDefaultContext(DefaultContext defaultContext) { - -DefaultContext
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
amyroh 2003/11/26 10:46:02 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Catch exception when there is an empty jar file. Ignores the exception and continue loading other jar files in the dir - bugtraq 4670099. Revision ChangesPath 1.24 +10 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- WebappLoader.java 22 Sep 2003 12:31:41 - 1.23 +++ WebappLoader.java 26 Nov 2003 18:46:02 - 1.24 @@ -1109,8 +1109,15 @@ continue; } -JarFile jarFile = new JarFile(destFile); -classLoader.addJar(filename, jarFile, destFile); +try { +JarFile jarFile = new JarFile(destFile); +classLoader.addJar(filename, jarFile, destFile); +} catch (Exception ex) { +// Catch the exception if there is an empty jar file +// Should ignore and continute loading other jar files +// in the dir +} + loaderRepositories.add( filename ); } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
remm2003/09/22 05:31:41 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: - Fix destroy. Revision ChangesPath 1.23 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- WebappLoader.java 21 Sep 2003 23:11:01 - 1.22 +++ WebappLoader.java 22 Sep 2003 12:31:41 - 1.23 @@ -670,9 +670,9 @@ public void destroy() { if( controller==oname ) { -oname = null; // Self-registration, undo it Registry.getRegistry().unregisterComponent(oname); +oname = null; } initialized = false; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
amyroh 2003/09/21 16:11:01 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Fix to properly create Loader MBean at webapp restart - bugtraq 4924607. Revision ChangesPath 1.22 +3 -1 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- WebappLoader.java 10 Sep 2003 15:40:27 - 1.21 +++ WebappLoader.java 21 Sep 2003 23:11:01 - 1.22 @@ -670,9 +670,11 @@ public void destroy() { if( controller==oname ) { +oname = null; // Self-registration, undo it Registry.getRegistry().unregisterComponent(oname); } +initialized = false; } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
remm2003/09/10 08:40:27 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: - Remove the artificial limit of 3 for classpath creation. It seems like a bad idea to do this (if the parent CLs are not correctly setup, Tomcat won't work anyway). Revision ChangesPath 1.21 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- WebappLoader.java 2 Sep 2003 21:22:03 - 1.20 +++ WebappLoader.java 10 Sep 2003 15:40:27 - 1.21 @@ -1154,7 +1154,7 @@ ClassLoader loader = getClassLoader(); int layers = 0; int n = 0; -while ((layers 3) (loader != null)) { +while (loader != null) { if (!(loader instanceof URLClassLoader)) { String cp=getClasspath( loader ); if( cp==null ) { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
remm2003/06/23 14:44:32 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: - Add logging on initialization of the URL stream handler. Revision ChangesPath 1.19 +30 -9 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- WebappLoader.java 20 Jun 2003 21:39:13 - 1.18 +++ WebappLoader.java 23 Jun 2003 21:44:32 - 1.19 @@ -164,6 +164,12 @@ /** + * First load of the class. + */ +private static boolean first = true; + + +/** * The class loader being managed by this Loader component. */ private WebappClassLoader classLoader = null; @@ -253,11 +259,18 @@ protected PropertyChangeSupport support = new PropertyChangeSupport(this); -// Classpath set in the loader -private String classpath=null; +/** + * Classpath set in the loader. + */ +private String classpath = null; + + +/** + * Repositories that are set in the loader, for JMX. + */ +private ArrayList loaderRepositories = null; + -// repositories that are set in the loader, for jmx -private ArrayList loaderRepositories; // - Properties @@ -690,10 +703,18 @@ // Register a stream handler factory for the JNDI protocol URLStreamHandlerFactory streamHandlerFactory = new DirContextURLStreamHandlerFactory(); -try { -URL.setURLStreamHandlerFactory(streamHandlerFactory); -} catch (Throwable t) { -// Ignore the error here. +if (first) { +first = false; +try { +URL.setURLStreamHandlerFactory(streamHandlerFactory); +} catch (Exception e) { +// Log and continue anyway, this is not critical +log.error(Error registering jndi stream handler, e); +} catch (Throwable t) { +// This is likely a dual registration +log.info(Dual registration of jndi stream handler: + + t.getMessage()); +} } // Construct a class loader based on our current repositories list - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
jfarcand2003/06/20 14:39:13 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Fix NPE exception when an invalid war file is deployed: java.lang.NullPointerException at org.apache.catalina.loader.WebappLoader.closeJARs(WebappLoader.java:560) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4140) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase. which cause: java.io.IOException: java.lang.NullPointerException at org.apache.catalina.core.StandardHostDeployer.install(StandardHostDepl Revision ChangesPath 1.18 +4 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- WebappLoader.java 15 Jun 2003 07:22:16 - 1.17 +++ WebappLoader.java 20 Jun 2003 21:39:13 - 1.18 @@ -557,7 +557,9 @@ * Used to periodically signal to the classloader to release JAR resources. */ public void closeJARs(boolean force) { -classLoader.closeJARs(force); +if (classLoader !=null){ +classLoader.closeJARs(force); +} } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
costin 2003/03/17 11:22:37 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Fix the registration Revision ChangesPath 1.11 +4 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- WebappLoader.java 17 Mar 2003 07:37:32 - 1.10 +++ WebappLoader.java 17 Mar 2003 19:22:37 - 1.11 @@ -103,6 +103,7 @@ import org.apache.catalina.LifecycleListener; import org.apache.catalina.Loader; import org.apache.catalina.Logger; +import org.apache.catalina.Engine; import org.apache.catalina.core.ContainerBase; import org.apache.catalina.core.StandardContext; import org.apache.catalina.util.LifecycleSupport; @@ -682,7 +683,8 @@ // Register ourself. The container must be a webapp try { StandardContext ctx=(StandardContext)container; -oname=new ObjectName(ctx.getDomain() + :type=Loader,path= + +Engine eng=(Engine)ctx.getParent().getParent(); +oname=new ObjectName(eng.getName() + :type=Loader,path= + ctx.getPath() + ,host= + ctx.getParent().getName()); Registry.getRegistry().registerComponent(this, oname, null); controller=oname; - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
costin 2003/03/16 23:37:32 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Add registration code Revision ChangesPath 1.10 +79 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- WebappLoader.java 12 Mar 2003 06:33:37 - 1.9 +++ WebappLoader.java 17 Mar 2003 07:37:32 - 1.10 @@ -86,6 +86,10 @@ import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; import javax.naming.directory.DirContext; +import javax.management.MBeanRegistration; +import javax.management.ObjectName; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; import org.apache.naming.resources.Resource; import org.apache.naming.resources.DirContextURLStreamHandler; import org.apache.naming.resources.DirContextURLStreamHandlerFactory; @@ -99,10 +103,13 @@ import org.apache.catalina.LifecycleListener; import org.apache.catalina.Loader; import org.apache.catalina.Logger; +import org.apache.catalina.core.ContainerBase; +import org.apache.catalina.core.StandardContext; import org.apache.catalina.util.LifecycleSupport; import org.apache.catalina.util.StringManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.commons.modeler.Registry; /** @@ -124,7 +131,7 @@ */ public class WebappLoader -implements Lifecycle, Loader, PropertyChangeListener, Runnable { +implements Lifecycle, Loader, PropertyChangeListener, Runnable, MBeanRegistration { // --- Constructors @@ -664,6 +671,41 @@ } +private boolean initialized=false; + +public void init() { +initialized=true; + +if( oname==null ) { +// not registered yet - standalone or API +if( container instanceof StandardContext) { +// Register ourself. The container must be a webapp +try { +StandardContext ctx=(StandardContext)container; +oname=new ObjectName(ctx.getDomain() + :type=Loader,path= + +ctx.getPath() + ,host= + ctx.getParent().getName()); +Registry.getRegistry().registerComponent(this, oname, null); +controller=oname; +} catch (Exception e) { +log.error(Error registering loader, e ); +} +} +} + +if( container == null ) { +// JMX created the loader +// TODO + +} +} + +public void destroy() { +if( controller==oname ) { +// Self-registration, undo it +Registry.getRegistry().unregisterComponent(oname); +} + +} /** * Start this component, initializing our associated class loader. @@ -672,6 +714,7 @@ */ public void start() throws LifecycleException { // Validate and update our current component state +if( ! initialized ) init(); if (started) throw new LifecycleException (sm.getString(webappLoader.alreadyStarted)); @@ -769,6 +812,8 @@ DirContextURLStreamHandler.unbind((ClassLoader) classLoader); classLoader = null; +destroy(); + } @@ -1419,4 +1464,36 @@ private static org.apache.commons.logging.Log log= org.apache.commons.logging.LogFactory.getLog( WebappLoader.class ); + +private ObjectName oname; +private MBeanServer mserver; +private String domain; +private ObjectName controller; + +public ObjectName preRegister(MBeanServer server, + ObjectName name) throws Exception { +oname=name; +mserver=server; +domain=name.getDomain(); + +return name; +} + +public void postRegister(Boolean registrationDone) { +} + +public void preDeregister() throws Exception { +} + +public void postDeregister() { +} + +public ObjectName getController() { +return controller; +} + +public void setController(ObjectName controller) { +this.controller = controller; +} + } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional
Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
Remy Maucherat wrote: +for( int i=0; irepositories.length ; i++ ) { +sb.append( repositories[i]).append(:); +} I think your should use the path separator here. You're right. I put it in mostly for debug. I'll fix it. Costin - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
costin 2003/03/11 22:33:37 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Few getters ( Remy: don't panic, I'm not changing the loader ! ). The array will collect the loaders that are set into the class loader and allow JMX to view the actual classpath ( if the loader is registered ). I also added a bit more info in case something is missing. Knowing the exact classpath of a webapp can be extremely usefull when debugging strange bugs... Revision ChangesPath 1.9 +48 -10 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- WebappLoader.java 8 Mar 2003 17:01:20 - 1.8 +++ WebappLoader.java 12 Mar 2003 06:33:37 - 1.9 @@ -1,7 +1,4 @@ /* - * $Header$ - * $Revision$ - * $Date$ * * * @@ -82,6 +79,7 @@ import java.net.URLStreamHandlerFactory; import java.security.Permission; import java.util.jar.JarFile; +import java.util.ArrayList; import javax.servlet.ServletContext; import javax.naming.NamingException; import javax.naming.Binding; @@ -103,6 +101,8 @@ import org.apache.catalina.Logger; import org.apache.catalina.util.LifecycleSupport; import org.apache.catalina.util.StringManager; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** @@ -126,7 +126,6 @@ public class WebappLoader implements Lifecycle, Loader, PropertyChangeListener, Runnable { - // --- Constructors @@ -271,6 +270,11 @@ private String threadName = WebappLoader; +// Classpath set in the loader +private String classpath=null; + +// repositories that are set in the loader, for jmx +private ArrayList loaderRepositories; // - Properties @@ -347,6 +351,7 @@ /** * Return the DefaultContext with which this Loader is associated. + * XXX What is that ??? */ public DefaultContext getDefaultContext() { @@ -527,6 +532,7 @@ if (started (classLoader != null)) { classLoader.addRepository(repository); +if( loaderRepositories != null ) loaderRepositories.add(repository); setClassPath(); } @@ -549,6 +555,8 @@ return ((String[])repositories.clone()); } +/** Extra repositories for this loader + */ public String getRepositoriesString() { StringBuffer sb=new StringBuffer(); for( int i=0; irepositories.length ; i++ ) { @@ -557,6 +565,30 @@ return sb.toString(); } +public String[] getLoaderRepositories() { +if( loaderRepositories==null ) return null; +String res[]=new String[ loaderRepositories.size()]; +loaderRepositories.toArray(res); +return res; +} + +public String getLoaderRepositoriesString() { +String repositories[]=getLoaderRepositories(); +StringBuffer sb=new StringBuffer(); +for( int i=0; irepositories.length ; i++ ) { +sb.append( repositories[i]).append(:); +} +return sb.toString(); +} + +/** Classpath, as set in org.apache.catalina.jsp_classpath context + * property + * + * @return + */ +public String getClasspath() { +return classpath; +} /** * Has the internal repository associated with this Loader been modified, @@ -639,7 +671,6 @@ * @exception LifecycleException if a lifecycle error occurs */ public void start() throws LifecycleException { - // Validate and update our current component state if (started) throw new LifecycleException @@ -649,9 +680,10 @@ lifecycle.fireLifecycleEvent(START_EVENT, null); started = true; -if (container.getResources() == null) +if (container.getResources() == null) { +log.info(No resources for + container); return; - +} // Register a stream handler factory for the JNDI protocol URLStreamHandlerFactory streamHandlerFactory = new DirContextURLStreamHandlerFactory(); @@ -964,11 +996,13 @@ if (servletContext == null) return; +loaderRepositories=new ArrayList();
cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader WebappLoader.java
costin 2003/01/10 10:59:50 Modified:catalina/src/share/org/apache/catalina/loader WebappLoader.java Log: Some info for the jmx console. It's nice to see the repositories. It would also be nice to have a method to display info about how a class will be loaded ( from parent or what repo ) as well as last mod time. I'll try to use WebppLoader as a basis for a loader to be used in modeler - and merge it with the StandardLoader ( i.e. support both filesystem and jndi sources ). Having more JMX support in the loader will help track a lot of problems. Wish I had more time... Revision ChangesPath 1.6 +16 -4 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java Index: WebappLoader.java === RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- WebappLoader.java 16 Oct 2002 16:08:29 - 1.5 +++ WebappLoader.java 10 Jan 2003 18:59:50 - 1.6 @@ -545,6 +545,18 @@ } +public String[] getRepositories() { +return ((String[])repositories.clone()); +} + +public String getRepositoriesString() { +StringBuffer sb=new StringBuffer(); +for( int i=0; irepositories.length ; i++ ) { +sb.append( repositories[i]).append(:); +} +return sb.toString(); +} + /** * Has the internal repository associated with this Loader been modified, -- To unsubscribe, e-mail: mailto:[EMAIL PROTECTED] For additional commands, e-mail: mailto:[EMAIL PROTECTED]