bloritsch 01/07/13 12:00:37
Modified: src/org/apache/cocoon/components/language/generator Tag:
cocoon_20_branch GeneratorSelector.java
ProgramGeneratorImpl.java
src/org/apache/cocoon/components/language/programming Tag:
cocoon_20_branch CompiledProgrammingLanguage.java
src/org/apache/cocoon/servlet Tag: cocoon_20_branch
CocoonServlet.java
Log:
Classloader and ProgramGenerator reloading fixes
Revision Changes Path
No revision
No revision
1.1.1.1.2.6 +39 -2
xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java
Index: GeneratorSelector.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/generator/GeneratorSelector.java,v
retrieving revision 1.1.1.1.2.5
retrieving revision 1.1.1.1.2.6
diff -u -r1.1.1.1.2.5 -r1.1.1.1.2.6
--- GeneratorSelector.java 2001/07/09 14:00:05 1.1.1.1.2.5
+++ GeneratorSelector.java 2001/07/13 19:00:24 1.1.1.1.2.6
@@ -23,13 +23,16 @@
import java.util.Map;
import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
/**
* This interface is the common base of all Compiled Components. This
* includes Sitemaps and XSP Pages
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.1.1.2.5 $ $Date: 2001/07/09 14:00:05 $
+ * @version CVS $Revision: 1.1.1.1.2.6 $ $Date: 2001/07/13 19:00:24 $
*/
public class GeneratorSelector extends ExcaliburComponentSelector implements
Disposable {
@@ -101,7 +104,7 @@
this.addGenerator(this.manager, hint, generator);
}
- public void addGenerator(ComponentManager newManager, Object hint, Class
generator) throws ComponentException {
+ protected void addGenerator(ComponentManager newManager, Object hint, Class
generator) throws ComponentException {
try
{
final ComponentHandler handler =
@@ -125,8 +128,42 @@
}
}
+ protected void removeGenerator(Object hint) {
+ ComponentHandler handler = (ComponentHandler)
this.componentHandlers.remove(hint);
+ handler.dispose();
+ this.classManager.reinstantiate();
+ getLogger().debug( "Removing " + handler.getClass().getName() + " for " +
hint.toString());
+ }
+
public void dispose() {
this.manager.release((Component)this.classManager);
+
+ synchronized(this)
+ {
+ Iterator keys = this.componentHandlers.keySet().iterator();
+ List keyList = new ArrayList();
+
+ while( keys.hasNext() )
+ {
+ Object key = keys.next();
+ ComponentHandler handler =
+ (ComponentHandler)this.componentHandlers.get( key );
+
+ handler.dispose();
+
+ keyList.add( key );
+ }
+
+ keys = keyList.iterator();
+
+ while( keys.hasNext() )
+ {
+ this.componentHandlers.remove( keys.next() );
+ }
+
+ keyList.clear();
+ }
+
super.dispose();
}
}
1.5.2.6 +2 -1
xml-cocoon2/src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java
Index: ProgramGeneratorImpl.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v
retrieving revision 1.5.2.5
retrieving revision 1.5.2.6
diff -u -r1.5.2.5 -r1.5.2.6
--- ProgramGeneratorImpl.java 2001/07/07 19:07:48 1.5.2.5
+++ ProgramGeneratorImpl.java 2001/07/13 19:00:25 1.5.2.6
@@ -48,7 +48,7 @@
/**
* The default implementation of <code>ProgramGenerator</code>
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
- * @version CVS $Revision: 1.5.2.5 $ $Date: 2001/07/07 19:07:48 $
+ * @version CVS $Revision: 1.5.2.6 $ $Date: 2001/07/13 19:00:25 $
*/
public class ProgramGeneratorImpl extends AbstractLoggable
implements ProgramGenerator, Contextualizable, Composable, Configurable,
ThreadSafe, Disposable {
@@ -214,6 +214,7 @@
ProgrammingLanguage programmingLanguage =
(ProgrammingLanguage)this.languageSelector.select(programmingLanguageName);
programmingLanguage.setLanguageName(programmingLanguageName);
programmingLanguage.unload(program, normalizedName, this.workDir);
+ this.cache.removeGenerator(normalizedName);
// Invalidate previous program/instance pair
program = null;
No revision
No revision
1.1.1.1.2.2 +13 -3
xml-cocoon2/src/org/apache/cocoon/components/language/programming/CompiledProgrammingLanguage.java
Index: CompiledProgrammingLanguage.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/programming/CompiledProgrammingLanguage.java,v
retrieving revision 1.1.1.1.2.1
retrieving revision 1.1.1.1.2.2
diff -u -r1.1.1.1.2.1 -r1.1.1.1.2.2
--- CompiledProgrammingLanguage.java 2001/07/07 19:07:57 1.1.1.1.2.1
+++ CompiledProgrammingLanguage.java 2001/07/13 19:00:30 1.1.1.1.2.2
@@ -22,7 +22,7 @@
* A compiled programming language. This class extends
<code>AbstractProgrammingLanguage</code> adding support for compilation
* and object program files
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
- * @version CVS $Revision: 1.1.1.1.2.1 $ $Date: 2001/07/07 19:07:57 $
+ * @version CVS $Revision: 1.1.1.1.2.2 $ $Date: 2001/07/13 19:00:30 $
*/
public abstract class CompiledProgrammingLanguage extends
AbstractProgrammingLanguage implements Contextualizable {
/** The compiler */
@@ -79,8 +79,18 @@
* @exception EXCEPTION_NAME If an error occurs
*/
protected final void doUnload(Object program, String filename, File
baseDirectory) throws LanguageException {
- File file = new File(baseDirectory, filename + "." +
this.getObjectExtension());
- file.delete();
+ int index = filename.lastIndexOf(File.separator);
+ String dir = filename.substring(0, index);
+ String file = filename.substring(index + 1);
+
+ File baseDir = new File(baseDirectory, dir);
+ File[] files = baseDir.listFiles();
+
+ for (int i = 0; i < files.length; i++) {
+ if (files[i].getName().equals(file)) {
+ files[i].delete();
+ }
+ }
this.doUnload(program);
}
No revision
No revision
1.13.2.5 +24 -16 xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
retrieving revision 1.13.2.4
retrieving revision 1.13.2.5
diff -u -r1.13.2.4 -r1.13.2.5
--- CocoonServlet.java 2001/07/12 13:33:48 1.13.2.4
+++ CocoonServlet.java 2001/07/13 19:00:33 1.13.2.5
@@ -59,7 +59,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Revision: 1.13.2.4 $ $Date: 2001/07/12 13:33:48 $
+ * @version CVS $Revision: 1.13.2.5 $ $Date: 2001/07/13 19:00:33 $
*/
public class CocoonServlet extends HttpServlet {
@@ -94,6 +94,7 @@
protected RepositoryClassLoader classLoader;
protected String forceLoadParameter;
+ private boolean addClassDirs;
/**
* Initialize this <code>CocoonServlet</code> instance. You will
@@ -118,6 +119,7 @@
this.initLogger();
this.forceLoadParameter = conf.getInitParameter("load-class");
+ this.addClassDirs =
"true".equals(conf.getInitParameter("init-classloader"));
String workDirParam = conf.getInitParameter("work-directory");
if ((workDirParam != null) && (workDirParam.trim().equals("") == false)) {
@@ -154,12 +156,12 @@
*/
public void destroy()
{
- if (this.cocoon != null)
- {
+ if (this.cocoon != null)
+ {
log.debug("Servlet destroyed - disposing Cocoon");
- this.cocoon.dispose();
- this.cocoon = null;
- }
+ this.cocoon.dispose();
+ this.cocoon = null;
+ }
}
/**
@@ -201,10 +203,13 @@
if(classDir != null) {
buildClassPath.append(classDir);
- try {
- classLoader.addDirectory(new File(classDir));
- } catch (Exception e) {
- log.debug("Could not add directory" + classDir, e);
+
+ if (this.addClassDirs) {
+ try {
+ classLoader.addDirectory(new File(classDir));
+ } catch (Exception e) {
+ log.debug("Could not add directory" + classDir, e);
+ }
}
}
@@ -214,10 +219,13 @@
for (int i = 0; i < libraries.length; i++) {
buildClassPath.append(File.pathSeparatorChar)
.append(IOUtils.getFullFilename(libraries[i]));
- try {
- classLoader.addDirectory(libraries[i]);
- } catch (Exception e) {
- log.debug("Could not add file" +
IOUtils.getFullFilename(libraries[i]));
+
+ if (this.addClassDirs) {
+ try {
+ classLoader.addDirectory(libraries[i]);
+ } catch (Exception e) {
+ log.debug("Could not add file" +
IOUtils.getFullFilename(libraries[i]));
+ }
}
}
}
@@ -309,8 +317,8 @@
if (logName == null) {
logName = "cocoon.log";
}
-
- this.appContext.put(Constants.CONTEXT_LOG_FILE, logName);
+
+ this.appContext.put(Constants.CONTEXT_LOG_FILE, logName);
final String path = logDir + logName;
final AvalonFormatter formatter = new AvalonFormatter();
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]