You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by re...@apache.org on 2007/03/04 17:10:55 UTC

svn commit: r514426 - in /cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet: CocoonReloadingListener.java JarListener.java ReloadingClassloaderManager.java

Author: reinhard
Date: Sun Mar  4 08:10:54 2007
New Revision: 514426

URL: http://svn.apache.org/viewvc?view=rev&rev=514426
Log:
works now with latest API changes in commons-jci

Removed:
    cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/JarListener.java
Modified:
    cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/CocoonReloadingListener.java
    cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/ReloadingClassloaderManager.java

Modified: cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/CocoonReloadingListener.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/CocoonReloadingListener.java?view=diff&rev=514426&r1=514425&r2=514426
==============================================================================
--- cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/CocoonReloadingListener.java (original)
+++ cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/CocoonReloadingListener.java Sun Mar  4 08:10:54 2007
@@ -27,13 +27,27 @@
     private final Log log = LogFactory.getLog(CocoonReloadingListener.class);
 
     private static boolean reload = false;
-
-    public CocoonReloadingListener(File file) {
-        super(file);
+    
+    public CocoonReloadingListener() {
+        super();
     }
 
-    public void onChangeFile(File changedFile) {
-        super.onChangeFile(changedFile);
+    public void onFileChange(File file) {
+        super.onFileChange(file);
+        changeDetected(file);
+    }
+    
+    public void onFileDelete(File file) {
+        super.onFileDelete(file);
+        changeDetected(file);
+    }
+    
+    public void onFileCreate(File file) {
+        super.onFileCreate(file);
+        changeDetected(file);
+    }   
+    
+    protected void changeDetected(File changedFile) {
         String changedFileParentPath = changedFile.getParent().replace('\\', '/');
         String changedFilePath = changedFile.getAbsolutePath().replace('\\', '/');        
 

Modified: cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/ReloadingClassloaderManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/ReloadingClassloaderManager.java?view=diff&rev=514426&r1=514425&r2=514426
==============================================================================
--- cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/ReloadingClassloaderManager.java (original)
+++ cocoon/trunk/tools/cocoon-rcl/cocoon-rcl-webapp-wrapper/src/main/java/org/apache/cocoon/servlet/ReloadingClassloaderManager.java Sun Mar  4 08:10:54 2007
@@ -17,6 +17,7 @@
 package org.apache.cocoon.servlet;
 
 import java.io.File;
+import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -44,20 +45,36 @@
     }
     
     public static synchronized ClassLoader getClassLoader(ServletContext context) {
-        if ( ReloadingClassloaderManager.reloadingClassloader == null ) { 
+      if (ReloadingClassloaderManager.reloadingClassloader == null) {
             final ClassLoader urlClassloader = createURLClassLoader(context);
-            final ReloadingClassLoader classloader = new ReloadingClassLoader(urlClassloader);   
-            final FilesystemAlterationMonitor fam = new FilesystemAlterationMonitor();            
-            List reloadingListeners = createReloadingListeners(context);
-            for(Iterator rlIt = reloadingListeners.iterator(); rlIt.hasNext();) {
-                org.apache.commons.jci.listeners.ReloadingListener rl = 
-                        (org.apache.commons.jci.listeners.ReloadingListener) rlIt.next();
-                classloader.addListener(rl);
-                fam.addListener(rl);
+            final ReloadingClassLoader classloader = new ReloadingClassLoader(urlClassloader);
+            final FilesystemAlterationMonitor fam = new FilesystemAlterationMonitor();    
+                    
+            List lines = null;
+            try {
+                lines = IOUtils.readLines(context.getResourceAsStream(WEB_INF_RCLWRAPPER_RCL_CONF));
+            } catch (IOException ioe) {
+                throw new ReloadingClassloaderCreationException(
+                        "Error while creating the URLClassLoader from context:/" + WEB_INF_RCLWRAPPER_RCL_CONF, ioe);
             }
-            fam.start();
-            ReloadingClassloaderManager.reloadingClassloader = classloader; 
-        }   
+            for (Iterator linesIt = lines.iterator(); linesIt.hasNext();) {
+                String line = (String) linesIt.next();
+                if (!line.startsWith(FILE_PROTOCOL)) {
+                    throw new ReloadingClassloaderCreationException("Only support URLs with file: protocol.");
+                }
+                String url = line.substring(FILE_PROTOCOL.length());
+                // windows paths
+                if (url.indexOf(2) == ':') {
+                    url = url.substring(1);
+                }
+                File directory = new File(url);
+                org.apache.commons.jci.listeners.ReloadingListener rl = new CocoonReloadingListener();
+                rl.addReloadNotificationListener(classloader);
+                fam.addListener(directory, rl);
+            }
+            
+            ReloadingClassloaderManager.reloadingClassloader = classloader;
+        }
         return ReloadingClassloaderManager.reloadingClassloader;
     }    
     
@@ -76,29 +93,5 @@
                     + WEB_INF_RCL_URLCL_CONF, e);
         }
     }
-    
-    protected static List createReloadingListeners(ServletContext context) {
-        try {
-            List reloadingListeners = new ArrayList();
-            List lines = IOUtils.readLines(context.getResourceAsStream(WEB_INF_RCLWRAPPER_RCL_CONF));
-            for (Iterator linesIt = lines.iterator(); linesIt.hasNext();) {
-                String line = (String) linesIt.next();
-                if(!line.startsWith(FILE_PROTOCOL)) {
-                    throw new ReloadingClassloaderCreationException("Only support file: URLs.");
-                }
-                String url = line.substring(FILE_PROTOCOL.length());
-                // windows paths
-                if(url.indexOf(2) == ':') {
-                    url = url.substring(1);
-                }
-                org.apache.commons.jci.listeners.ReloadingListener rl = new CocoonReloadingListener(new File(url));
-                reloadingListeners.add(rl);
-            }
-            return reloadingListeners;
-        } catch (Exception e) {
-            throw new ReloadingClassloaderCreationException("Error while creating the URLClassLoader from context:/"
-                    + WEB_INF_RCLWRAPPER_RCL_CONF, e);
-        }
-    }    
     
 }