giacomo 01/12/09 13:36:42 Modified: src/org/apache/cocoon cocoon.roles src/org/apache/cocoon/components/language/generator ProgramGeneratorImpl.java webapp cocoon.xconf Log: Added Resource Monitor in ProgramGeneratorImpl Submitted by: Gerhard Froehlich <[EMAIL PROTECTED]> Revision Changes Path 1.31 +4 -0 xml-cocoon2/src/org/apache/cocoon/cocoon.roles Index: cocoon.roles =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/cocoon.roles,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- cocoon.roles 2001/12/07 10:12:10 1.30 +++ cocoon.roles 2001/12/09 21:36:42 1.31 @@ -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> 1.24 +41 -3 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.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- ProgramGeneratorImpl.java 2001/10/30 15:38:21 1.23 +++ ProgramGeneratorImpl.java 2001/12/09 21:36:42 1.24 @@ -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,18 +33,23 @@ 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; /** * The default implementation of <code>ProgramGenerator</code> * @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a> - * @version CVS $Revision: 1.23 $ $Date: 2001/10/30 15:38:21 $ + * @version CVS $Revision: 1.24 $ $Date: 2001/12/09 21:36:42 $ */ 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; } } 1.43 +7 -0 xml-cocoon2/webapp/cocoon.xconf Index: cocoon.xconf =================================================================== RCS file: /home/cvs/xml-cocoon2/webapp/cocoon.xconf,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- cocoon.xconf 2001/11/28 08:40:07 1.42 +++ cocoon.xconf 2001/12/09 21:36:42 1.43 @@ -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:
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]