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);