/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.plugin.deploy;
import java.io.File;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.enonic.cms.core.plugin.PluginManager;
@Component
public final class HotDeployTask
{
private final static Logger LOG = LoggerFactory.getLogger( HotDeployTask.class );
private File deployDir;
private long scanPeriod;
private FileAlterationMonitor monitor;
private PluginManager pluginManager;
@Value("${cms.plugin.deployDir}")
public void setDeployDir( final File deployDir )
{
this.deployDir = deployDir;
}
@Value("${cms.plugin.scanPeriod}")
public void setScanPeriod( final long scanPeriod )
{
this.scanPeriod = scanPeriod;
}
@Autowired
public void setPluginManager( final PluginManager pluginManager )
{
this.pluginManager = pluginManager;
}
@PostConstruct
public void start()
{
try
{
final JarFileFilter filter = new JarFileFilter();
final FileAlterationObserver observer = new FileAlterationObserver( this.deployDir, filter );
observer.addListener( new HotDeployListener( this.pluginManager ) );
observer.checkAndNotify();
this.monitor = new FileAlterationMonitor( this.scanPeriod, observer );
this.monitor.start();
LOG.info( "Hot deploying plugins from [{}]. Scanning every [{}] ms.", this.deployDir.getAbsolutePath(), this.scanPeriod );
}
catch ( Exception e )
{
LOG.error( "cannot start monitor.", e );
}
}
@PreDestroy
public void stop()
{
try
{
this.monitor.stop();
}
catch ( Exception e )
{
LOG.error( "cannot stop monitor correctly.", e );
}
}
}