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() {