Index: src/org/apache/cocoon/cocoon.roles
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/org/apache/cocoon/cocoon.roles,v
retrieving revision 1.30
diff -u -r1.30 cocoon.roles
--- src/org/apache/cocoon/cocoon.roles	2001/12/07 10:12:10	1.30
+++ src/org/apache/cocoon/cocoon.roles	2001/12/08 12:47:06
@@ -173,4 +173,8 @@
        shorthand="reader"
        default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/>
 
+ <role name="org.apache.avalon.excalibur.monitor.Monitor"
+       shorthand="monitor"
+       default-class="org.apache.avalon.excalibur.monitor.ActiveMonitor"/>
+
 </role-list>
Index: src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java,v
retrieving revision 1.23
diff -u -r1.23 ProgramGeneratorImpl.java
--- src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java	2001/10/30 15:38:21	1.23
+++ src/org/apache/cocoon/components/language/generator/ProgramGeneratorImpl.java	2001/12/08 12:47:09
@@ -8,6 +8,8 @@
 
 package org.apache.cocoon.components.language.generator;
 
+import org.apache.avalon.excalibur.monitor.FileResource;
+import org.apache.avalon.excalibur.monitor.Monitor;
 import org.apache.avalon.framework.activity.Disposable;
 import org.apache.avalon.framework.component.*;
 import org.apache.avalon.framework.configuration.Configurable;
@@ -31,9 +33,13 @@
 import org.apache.cocoon.environment.Source;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.util.IOUtils;
+import org.apache.cocoon.util.NetUtils;
 import org.xml.sax.InputSource;
 
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeEvent;
 import java.io.File;
+import java.net.URL;
 import java.net.MalformedURLException;
 
 /**
@@ -42,7 +48,8 @@
  * @version CVS $Revision: 1.23 $ $Date: 2001/10/30 15:38:21 $
  */
 public class ProgramGeneratorImpl extends AbstractLoggable
-    implements ProgramGenerator, Contextualizable, Composable, Configurable, ThreadSafe, Disposable {
+    implements ProgramGenerator, Contextualizable, Composable, Configurable, ThreadSafe, 
+               Disposable, PropertyChangeListener {
 
     /** The auto-reloading option */
     protected boolean autoReload = false;
@@ -77,6 +84,15 @@
     /** Servlet Context Directory */
     protected String contextDir;
 
+    /** Resource monitoring */
+    protected Monitor monitor;
+
+    /** lastModified date */
+    protected long lastModified;
+
+    /** File resource */
+    protected FileResource file;
+
     /** Contextualize this class */
     public void contextualize(Context context) throws ContextException {
         if (this.workDir == null) {
@@ -111,6 +127,7 @@
                 this.markupSelector = (ComponentSelector)this.manager.lookup(MarkupLanguage.ROLE + "Selector");
                 this.languageSelector = (ComponentSelector)this.manager.lookup(ProgrammingLanguage.ROLE + "Selector");
                 this.classManager = (ClassLoaderManager)this.manager.lookup(ClassLoaderManager.ROLE);
+                this.monitor = (Monitor) this.manager.lookup(Monitor.ROLE);
             } catch (Exception e) {
                 getLogger().warn("Could not lookup Component", e);
             }
@@ -145,6 +162,15 @@
         throws Exception {
 
         Source source = resolver.resolve(fileName);
+        
+        /** Monitoring the Sitemap source */
+        URL url = new URL(source.getSystemId());
+        getLogger().debug("Sitemap path=" + url.getFile());
+        file = new FileResource(url.getFile());
+        file.addPropertyChangeListener(this);
+        monitor.addResource(file);
+        getLogger().debug("lastModified date=" + this.getLastModified());
+        
         try {
             // Set filenames
             StringBuffer contextFilename = new StringBuffer(this.rootPackage.replace('.', File.separatorChar));
@@ -200,7 +226,7 @@
              * be queried for changes!!!
              */
 
-            if (programInstance != null && programInstance.modifiedSince(source.getLastModified())) {
+            if (programInstance != null && programInstance.modifiedSince(this.getLastModified())) {
                 // Release the component.
                 release(programInstance);
 
@@ -363,5 +389,17 @@
         this.manager.release((Component)this.repository);
         this.manager.release((Component)this.markupSelector);
         this.manager.release((Component)this.languageSelector);
+    }
+
+    public void propertyChange(PropertyChangeEvent evt) {
+        setLastModified(((Long)evt.getNewValue()).longValue());
+    }
+
+    private void setLastModified(long _lastModified) {
+        lastModified = _lastModified;
+    }
+
+    private long getLastModified() {
+        return lastModified;
     }
 }
Index: webapp/cocoon.xconf
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/webapp/cocoon.xconf,v
retrieving revision 1.42
diff -u -r1.42 cocoon.xconf
--- webapp/cocoon.xconf	2001/11/28 08:40:07	1.42
+++ webapp/cocoon.xconf	2001/12/08 12:47:16
@@ -434,6 +434,13 @@
   <profiler/>
   -->
 
+  <!-- Resource Monitor:
+    The Monitor keeps track on changes to a Resource.
+  -->
+  <monitor>
+    <thread priority="5" frequency="10000"/>
+  </monitor>
+
 <!-- ======================== The sitemap  ============================== -->
 
   <!-- Reloading of the sitemap:
