You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2010/09/14 18:43:38 UTC
svn commit: r996983 - in
/sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl:
Activator.java FileMonitor.java ServicesListener.java
Author: cziegeler
Date: Tue Sep 14 16:43:38 2010
New Revision: 996983
URL: http://svn.apache.org/viewvc?rev=996983&view=rev
Log:
Fixstartup problems and potential NPEs
Modified:
sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/Activator.java
sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/FileMonitor.java
sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/ServicesListener.java
Modified: sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/Activator.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/Activator.java?rev=996983&r1=996982&r2=996983&view=diff
==============================================================================
--- sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/Activator.java (original)
+++ sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/Activator.java Tue Sep 14 16:43:38 2010
@@ -24,7 +24,6 @@ import java.util.StringTokenizer;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
/**
* The <code>Activator</code>
@@ -40,7 +39,7 @@ public class Activator implements Bundle
/**
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
- public void start(final BundleContext context) throws InvalidSyntaxException {
+ public void start(final BundleContext context) {
// read initial scan configurations
final List<ScanConfiguration> configs = new ArrayList<ScanConfiguration>();
final Object dir = this.getProp(context, KEY_DIR);
Modified: sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/FileMonitor.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/FileMonitor.java?rev=996983&r1=996982&r2=996983&view=diff
==============================================================================
--- sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/FileMonitor.java (original)
+++ sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/FileMonitor.java Tue Sep 14 16:43:38 2010
@@ -62,8 +62,11 @@ public class FileMonitor extends TimerTa
private void collect(final File file, final List<File> files) {
if ( file.exists() ) {
if ( file.isDirectory() ) {
- for(final File child : file.listFiles() ) {
- collect(child, files);
+ final File[] children = file.listFiles();
+ if ( children != null ) {
+ for(final File child : children ) {
+ collect(child, files);
+ }
}
} else {
files.add(file);
Modified: sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/ServicesListener.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/ServicesListener.java?rev=996983&r1=996982&r2=996983&view=diff
==============================================================================
--- sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/ServicesListener.java (original)
+++ sling/trunk/installer/fileinstall/src/main/java/org/apache/sling/installer/file/impl/ServicesListener.java Tue Sep 14 16:43:38 2010
@@ -31,6 +31,8 @@ import org.osgi.framework.InvalidSyntaxE
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceListener;
import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The <code>ServicesListener</code> listens for the required services
@@ -39,6 +41,9 @@ import org.osgi.framework.ServiceReferen
*/
public class ServicesListener {
+ /** The logger. */
+ private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
/** The name of the installer service. */
private static final String INSTALLER_SERVICE_NAME = OsgiInstaller.class.getName();
@@ -57,13 +62,13 @@ public class ServicesListener {
private boolean running = false;
public ServicesListener(final BundleContext bundleContext,
- final List<ScanConfiguration> configs)
- throws InvalidSyntaxException{
+ final List<ScanConfiguration> configs) {
if ( configs != null ) {
scanConfigurations.addAll(configs);
}
this.bundleContext = bundleContext;
this.installerListener = new Listener(INSTALLER_SERVICE_NAME);
+ this.installerListener.start();
}
public synchronized void notifyChange() {
@@ -72,8 +77,10 @@ public class ServicesListener {
final OsgiInstaller installer = (OsgiInstaller)this.installerListener.getService();
if ( installer != null&& !running ) {
+ logger.debug("Starting scanner");
this.startScanner(installer);
} else if ( running && installer == null ) {
+ logger.debug("Stopping scanner");
this.stopScanner();
}
}
@@ -90,6 +97,7 @@ public class ServicesListener {
private void startScanner(final OsgiInstaller installer) {
if ( !running ) {
for(final ScanConfiguration config : this.scanConfigurations) {
+ logger.debug("Starting monitor for {}", config.directory);
this.monitors.add(new FileMonitor(new File(config.directory),
config.scanInterval, new Installer(installer, hash(config.directory))));
}
@@ -114,11 +122,19 @@ public class ServicesListener {
private ServiceReference reference;
private Object service;
- public Listener(final String serviceName) throws InvalidSyntaxException {
+ public Listener(final String serviceName) {
this.serviceName = serviceName;
- bundleContext.addServiceListener(this, "("
- + Constants.OBJECTCLASS + "=" + serviceName + ")");
- this.getService();
+ }
+
+ public void start() {
+ this.retainService();
+ try {
+ bundleContext.addServiceListener(this, "("
+ + Constants.OBJECTCLASS + "=" + serviceName + ")");
+ } catch (final InvalidSyntaxException ise) {
+ // this should really never happen
+ throw new RuntimeException("Unexpected exception occured.", ise);
+ }
}
public void deactivate() {