You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2009/07/07 14:50:21 UTC

svn commit: r791818 - in /sling/trunk/contrib/extensions/jcrinstall/osgi/src: main/java/org/apache/sling/osgi/installer/ main/java/org/apache/sling/osgi/installer/impl/ test/java/org/apache/sling/osgi/installer/impl/

Author: bdelacretaz
Date: Tue Jul  7 12:50:20 2009
New Revision: 791818

URL: http://svn.apache.org/viewvc?rev=791818&view=rev
Log:
SLING-905 - more defensive use of external services

Modified:
    sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java
    sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/Activator.java
    sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
    sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java

Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java?rev=791818&r1=791817&r2=791818&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java Tue Jul  7 12:50:20 2009
@@ -19,6 +19,7 @@
 package org.apache.sling.osgi.installer;
 
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
 
 /** Proxy for services that might not be always available, allows
  * 	classes which are not OSGi services to access such services easily.
@@ -27,4 +28,5 @@
  */
 public interface OsgiControllerServices {
 	ConfigurationAdmin getConfigurationAdmin();
+	LogService getLogService();
 }

Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/Activator.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/Activator.java?rev=791818&r1=791817&r2=791818&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/Activator.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/Activator.java Tue Jul  7 12:50:20 2009
@@ -20,6 +20,7 @@
 
 import java.util.Hashtable;
 
+import org.apache.sling.osgi.installer.JcrInstallException;
 import org.apache.sling.osgi.installer.OsgiController;
 import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.osgi.framework.BundleActivator;
@@ -62,15 +63,26 @@
         final Hashtable<String, String> props = new Hashtable<String, String>();
         props.put(Constants.SERVICE_DESCRIPTION, "Apache Sling Install Controller Service");
         props.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+        
+        // Assume PackageAdmin is available before this bundle is started.
+        // That's the case when using Felix OSGi, not sure about other frameworks.
         this.service = new OsgiControllerImpl(context,
-                (PackageAdmin)this.packageAdminTracker.getService(),
-                (LogService)this.logServiceTracker.getService());
+                (PackageAdmin)checkNotNull(this.packageAdminTracker.getService(), "PackageAdmin"),
+                logServiceTracker);
         final String [] serviceInterfaces = {
         		OsgiController.class.getName(),
         		OsgiControllerServices.class.getName()
         };
         serviceReg = context.registerService(serviceInterfaces, service, props);
     }
+    
+    /** Complain if value is null */
+    static Object checkNotNull(Object value, String what) throws JcrInstallException {
+    	if(value == null) {
+    		throw new JcrInstallException(what + " is null, cannot activate");
+    	}
+    	return value;
+    }
 
     /**
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)

Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java?rev=791818&r1=791817&r2=791818&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java Tue Jul  7 12:50:20 2009
@@ -35,6 +35,7 @@
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.log.LogService;
 import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * OsgiController service
@@ -51,6 +52,7 @@
     private ResourceOverrideRules roRules;
     private final List<OsgiControllerTask> tasks = new LinkedList<OsgiControllerTask>();
     private final OsgiControllerTaskExecutor executor = new OsgiControllerTaskExecutor();
+    private final ServiceTracker logServiceTracker;
 
     public static final String STORAGE_FILENAME = "controller.storage";
 
@@ -59,18 +61,16 @@
 
     private final PackageAdmin packageAdmin;
 
-    protected final LogService logService;
-
     /** Default value for getLastModified() */
     public static final long LAST_MODIFIED_NOT_FOUND = -1;
 
     public OsgiControllerImpl(final BundleContext bc,
                               final PackageAdmin pa,
-                              final LogService ls)
+                              final ServiceTracker logServiceTracker)
     throws IOException {
         this.bundleContext = bc;
         this.packageAdmin = pa;
-        this.logService = ls;
+        this.logServiceTracker = logServiceTracker;
         processors = new OsgiResourceProcessorList(bc, packageAdmin, this);
         storage = new Storage(bc.getDataFile(STORAGE_FILENAME));
     }
@@ -79,8 +79,8 @@
         try {
             storage.saveToFile();
         } catch(IOException ioe) {
-        	if (logService != null) {
-        		logService.log(LogService.LOG_WARNING, "IOException in Storage.saveToFile()", ioe);
+        	if (getLogService() != null) {
+        		getLogService().log(LogService.LOG_WARNING, "IOException in Storage.saveToFile()", ioe);
         	}
         }
 
@@ -88,8 +88,8 @@
             processor.dispose();
         }
 
-        if(logService != null) {
-            logService.log(LogService.LOG_WARNING,
+        if(getLogService() != null) {
+            getLogService().log(LogService.LOG_WARNING,
                     OsgiController.class.getName()
                     + " service deactivated - this warning can be ignored if system is shutting down");
         }
@@ -134,8 +134,8 @@
 
     	// Ready to work?
         if(processors == null) {
-        	if(logService != null) {
-                logService.log(LogService.LOG_INFO, "Not activated yet, cannot executeScheduledOperations");
+        	if(getLogService() != null) {
+                getLogService().log(LogService.LOG_INFO, "Not activated yet, cannot executeScheduledOperations");
         	}
             return;
         }
@@ -153,8 +153,8 @@
             }
 
             // Now execute all our tasks in a separate thread
-        	if(logService != null) {
-                logService.log(LogService.LOG_INFO, "Executing " + tasks.size() + " queued tasks");
+        	if(getLogService() != null) {
+                getLogService().log(LogService.LOG_INFO, "Executing " + tasks.size() + " queued tasks");
         	}
             final long start = System.currentTimeMillis();
 
@@ -164,8 +164,8 @@
             tasks.clear();
             tasks.addAll(remainingTasks);
 
-        	if(logService != null) {
-                logService.log(LogService.LOG_INFO,
+        	if(getLogService() != null) {
+                getLogService().log(LogService.LOG_INFO,
                 		"Done executing queued tasks (" + (System.currentTimeMillis() - start) + " msec)");
         	}
 		}
@@ -198,4 +198,8 @@
 	public Storage getStorage() {
 		return storage;
 	}
+	
+	public LogService getLogService() {
+		return (LogService)logServiceTracker.getService();
+	}
 }
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java?rev=791818&r1=791817&r2=791818&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java (original)
+++ sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java Tue Jul  7 12:50:20 2009
@@ -28,6 +28,7 @@
 import org.jmock.Mockery;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.log.LogService;
 
 public class ConfigResourceProcessorTest {
     
@@ -46,6 +47,9 @@
 			public ConfigurationAdmin getConfigurationAdmin() {
 				return ca;
 			}
+			public LogService getLogService() {
+				return null;
+			}
         };
         final ConfigResourceProcessor p = new ConfigResourceProcessor(sp);
         final Configuration c = mockery.mock(Configuration.class);