You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2011/01/27 23:00:12 UTC

svn commit: r1064329 - in /felix/trunk/dependencymanager/runtime: ./ src/main/java/org/apache/felix/dm/runtime/

Author: pderop
Date: Thu Jan 27 22:00:11 2011
New Revision: 1064329

URL: http://svn.apache.org/viewvc?rev=1064329&view=rev
Log:
- Fixed findbugs errors. Cleaned imports.
- Use a temporal service dependency over the LogService in order to ignore temporary log service
outage.
- Use BundleDependency instead of SynchronousBundleListener, when tracking annotated bundles.
- Improved logging.

Added:
    felix/trunk/dependencymanager/runtime/findbugs.xml
Modified:
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactorySet.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/InvocationUtil.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Log.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/SerialExecutor.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
    felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ToggleServiceDependency.java

Added: felix/trunk/dependencymanager/runtime/findbugs.xml
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/findbugs.xml?rev=1064329&view=auto
==============================================================================
--- felix/trunk/dependencymanager/runtime/findbugs.xml (added)
+++ felix/trunk/dependencymanager/runtime/findbugs.xml Thu Jan 27 22:00:11 2011
@@ -0,0 +1,13 @@
+<FindBugsFilter>
+	<!--
+		The m_logService field of the Log" class is injected by the Activator.
+	-->
+	<Match>
+		<Class name="org.apache.felix.dm.runtime.Log" />
+		<Bug pattern="UWF_UNWRITTEN_FIELD" />
+	</Match>
+	<Match>
+		<Class name="org.apache.felix.dm.runtime.Log" />
+		<Bug pattern="NP_UNWRITTEN_FIELD" />
+	</Match>
+</FindBugsFilter>

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AbstractBuilder.java Thu Jan 27 22:00:11 2011
@@ -24,10 +24,9 @@ import org.apache.felix.dm.Component;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogService;
 
 /**
- * base class for all kind of DM component builders (for Component, Aspect, Adapters ...).
+ * Base class for all kind of DM component builders (for Component, Aspect, Adapters ...).
  */
 public abstract class AbstractBuilder
 {
@@ -46,7 +45,7 @@ public abstract class AbstractBuilder
         throws Exception;
 
     /**
-     * Set common Service parameters, if provided from our Component descriptor
+     * Sets common Service parameters, if provided from our Component descriptor
      */
     protected void setCommonServiceParams(Component service, MetaData serviceMetaData)
         throws Exception
@@ -77,8 +76,7 @@ public abstract class AbstractBuilder
             String name = dependency.getString(Params.name, null);
             if (name == null) {
                 DependencyBuilder depBuilder = new DependencyBuilder(dependency);
-                Log.instance().log(LogService.LOG_INFO, 
-                                   "ServiceLifecycleHandler.init: adding dependency %s into service %s",
+                Log.instance().info("ServiceLifecycleHandler.init: adding dependency %s into service %s",
                                    dependency, srvMeta);
                 Dependency d = depBuilder.build(b, dm, false);
                 s.add(d);

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Activator.java Thu Jan 27 22:00:11 2011
@@ -20,6 +20,8 @@ package org.apache.felix.dm.runtime;
 
 import org.apache.felix.dm.DependencyActivatorBase;
 import org.apache.felix.dm.DependencyManager;
+import org.apache.felix.dm.ServiceDependency;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
 
@@ -31,24 +33,39 @@ import org.osgi.service.log.LogService;
  */
 public class Activator extends DependencyActivatorBase
 {
+    private final static String CONF_LOG = "dm.runtime.log";
+    
     /**
-     * Our bundle is starting: initialize our DependencyManager Runtime service.
+     * Initialize our DependencyManager Runtime service.
+     * 
+     * We depend on the OSGi LogService, and we track all started bundles which do have a 
+     * "DependencyManager-Component" Manifest header.
+     * If the "dm.runtime.log=true" parameter is configured in the Felix config.properties
+     * then we'll use a required/temporal service dependency over the log service.
+     * This temporal dependency avoids us to be restarted if the log service is temporarily 
+     * unavailable (that is: when the log service is updating).
+     * if the "dm.runtime.log" is not configured of it it is set to false, then we'll use 
+     * an optional dependency over the log service, in order to use a NullObject in case
+     * the log service is not available.
      */
     @Override
     public void init(BundleContext context, DependencyManager dm) throws Exception
     {
-        // If the "dm.log=true" parameter is configured in the OSGi config.properties
-        // then, we'll wait for the LogService, else we'll use an optional dependency over it,
-        // and we'll eventually use a Null LogService Object.
-
-        boolean logActive = "true".equals(context.getProperty("dm.runtime.log"));
+        boolean logActive = "true".equalsIgnoreCase(context.getProperty(CONF_LOG));
+        ServiceDependency logDep = logActive ?
+            createTemporalServiceDependency() : createServiceDependency().setRequired(false);        
+        logDep.setService(LogService.class).setAutoConfig(true);              
+        
         dm.add(createComponent()
                .setImplementation(DependencyManagerRuntime.class)
-               .add(createServiceDependency()
-                   .setService(LogService.class)
-                   .setRequired(logActive)
-                   .setAutoConfig("m_log")
-                   .setCallbacks("bind", null)));
+               .setComposition("getComposition")
+               .add(logDep)
+               .add(createBundleDependency()
+                    .setRequired(false)
+                    .setAutoConfig(false)
+                    .setStateMask(Bundle.ACTIVE)
+                    .setFilter("(DependencyManager-Component=*)")
+                    .setCallbacks("bundleStarted", "bundleStopped")));
     }
 
     /**

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AdapterServiceBuilder.java Thu Jan 27 22:00:11 2011
@@ -21,8 +21,8 @@ package org.apache.felix.dm.runtime;
 import java.util.Dictionary;
 import java.util.List;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
 
 /**

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/AspectServiceBuilder.java Thu Jan 27 22:00:11 2011
@@ -21,10 +21,9 @@ package org.apache.felix.dm.runtime;
 import java.util.Dictionary;
 import java.util.List;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogService;
 
 public class AspectServiceBuilder extends AbstractBuilder
 {
@@ -37,37 +36,39 @@ public class AspectServiceBuilder extend
     }
 
     @Override
-    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm) 
+    public void build(MetaData srvMeta, List<MetaData> depsMeta, Bundle b, DependencyManager dm)
         throws Exception
     {
-        Log.instance().log(LogService.LOG_INFO,
-                           "AspectServiceBuilder: building aspect service: %s with dependencies %s", 
-                           srvMeta, depsMeta);
+        Log.instance().info("AspectServiceBuilder: building aspect service: %s with dependencies %s",
+                            srvMeta,
+                            depsMeta);
 
         Class<?> serviceInterface = b.loadClass(srvMeta.getString(Params.service));
         String serviceFilter = srvMeta.getString(Params.filter, null);
         Dictionary<String, Object> aspectProperties = srvMeta.getDictionary(Params.properties, null);
         int ranking = srvMeta.getInt(Params.ranking, 1);
         String implClassName = srvMeta.getString(Params.impl);
-        Object implClass = b.loadClass(implClassName);        
-        String field = srvMeta.getString(Params.field, null);  
+        Object implClass = b.loadClass(implClassName);
+        String field = srvMeta.getString(Params.field, null);
         String factoryMethod = srvMeta.getString(Params.factoryMethod, null);
-        Component service = dm.createAspectService(serviceInterface, serviceFilter, ranking, field)
-                            .setServiceProperties(aspectProperties);
+        Component service =
+                dm.createAspectService(serviceInterface, serviceFilter, ranking, field)
+                        .setServiceProperties(aspectProperties);
         if (factoryMethod == null)
         {
             service.setImplementation(implClass);
-        } 
+        }
         else
         {
             service.setFactory(implClass, factoryMethod);
         }
-        
+
         service.setComposition(srvMeta.getString(Params.composition, null));
         ServiceLifecycleHandler lfcleHandler = new ServiceLifecycleHandler(service, b, dm, srvMeta, depsMeta);
         // The dependencies will be plugged by our lifecycle handler.
         service.setCallbacks(lfcleHandler, "init", "start", "stop", "destroy");
-        // Adds dependencies (except named dependencies, which are managed by the lifecycle handler).
+        // Adds dependencies (except named dependencies, which are managed by the lifecycle
+        // handler).
         addUnamedDependencies(b, dm, service, srvMeta, depsMeta);
         dm.add(service);
     }

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/BundleAdapterServiceBuilder.java Thu Jan 27 22:00:11 2011
@@ -21,8 +21,8 @@ package org.apache.felix.dm.runtime;
 import java.util.Dictionary;
 import java.util.List;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
 
 public class BundleAdapterServiceBuilder extends AbstractBuilder

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ComponentBuilder.java Thu Jan 27 22:00:11 2011
@@ -23,10 +23,9 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogService;
 
 /**
  * Builds a DependencyManager Component.
@@ -52,9 +51,9 @@ public class ComponentBuilder extends Ab
         // Check if we must provide a Set Factory.
         if (factory == null)
         {
-            Log.instance().log(LogService.LOG_INFO, 
-                               "ComponentBuilder: building service %s with dependencies %s",
-                               srvMeta, depsMeta);
+            Log.instance().info("ComponentBuilder: building service %s with dependencies %s",
+                                srvMeta,
+                                depsMeta);
 
             String impl = srvMeta.getString(Params.impl);
             String composition = srvMeta.getString(Params.composition, null);
@@ -62,18 +61,21 @@ public class ComponentBuilder extends Ab
             if (factoryMethod == null)
             {
                 service.setImplementation(b.loadClass(impl));
-            } else
+            }
+            else
             {
                 service.setFactory(b.loadClass(impl), factoryMethod);
             }
             service.setComposition(composition);
-            
-            // Adds dependencies (except named dependencies, which are managed by the lifecycle handler).
+
+            // Adds dependencies (except named dependencies, which are managed by the lifecycle
+            // handler).
             addUnamedDependencies(b, dm, service, srvMeta, depsMeta);
             // Creates a ServiceHandler, which will filter all service lifecycle callbacks.
-            ServiceLifecycleHandler lfcleHandler = new ServiceLifecycleHandler(service, b, dm, srvMeta, depsMeta);
+            ServiceLifecycleHandler lfcleHandler =
+                    new ServiceLifecycleHandler(service, b, dm, srvMeta, depsMeta);
             service.setCallbacks(lfcleHandler, "init", "start", "stop", "destroy");
-            
+
             // Set the provided services
             Dictionary<String, Object> properties = srvMeta.getDictionary(Params.properties, null);
             String[] services = srvMeta.getStrings(Params.provides, null);
@@ -81,14 +83,15 @@ public class ComponentBuilder extends Ab
         }
         else
         {
-            Log.instance().log(LogService.LOG_INFO, 
-                               "ComponentBuilder: providing factory set for service %s with dependencies %s",
-                               srvMeta, depsMeta);
+            Log.instance()
+                    .info("ComponentBuilder: providing factory set for service %s with dependencies %s",
+                          srvMeta,
+                          depsMeta);
 
             // We don't instantiate the service, but instead we provide a Set in the registry.
             // This Set will act as a factory and another component may registers some
             // service configurations into it in order to fire some service instantiations.
-            FactorySet factorySet =  new FactorySet(b, srvMeta, depsMeta);
+            FactorySet factorySet = new FactorySet(b, srvMeta, depsMeta);
             service.setImplementation(factorySet);
             service.setCallbacks(null, "start", "stop", null);
             Hashtable<String, String> props = new Hashtable<String, String>();

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DependencyManagerRuntime.java Thu Jan 27 22:00:11 2011
@@ -26,36 +26,26 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.SynchronousBundleListener;
-import org.osgi.service.log.LogService;
 
 /**
  * This class parses service descriptors generated by the annotation bnd processor.
  * The descriptors are located under OSGI-INF/dependencymanager directory. Such files are actually 
  * referenced by a specific "DependendencyManager-Component" manifest header.
  */
-public class DependencyManagerRuntime implements SynchronousBundleListener
+public class DependencyManagerRuntime
 {
-    private ConcurrentHashMap<Bundle, DependencyManager> m_managers = new ConcurrentHashMap<Bundle, DependencyManager>();
-    private static LogService m_log; // Injected
-    private BundleContext m_bctx; // Injected
+    private ConcurrentHashMap<Bundle, DependencyManager> m_managers =
+            new ConcurrentHashMap<Bundle, DependencyManager>();
     private DescriptorParser m_parser;
 
     /**
-     * Starts our Service (at this point, we have been injected with our bundle context, as well
-     * as with our log service. We'll listen to bundle start/stop events (we implement the 
-     * SynchronousBundleListener interface).
+     * Our constructor. We'll initialize here our DM component builders.
      */
-    protected void start()
+    public DependencyManagerRuntime()
     {
-        // Register our log service.
-        Log.instance().setLogService(m_log);
-        
         // Instantiates our descriptor parser, and register our service builders into it.
         m_parser = new DescriptorParser();
         m_parser.addBuilder(new ComponentBuilder());
@@ -64,18 +54,24 @@ public class DependencyManagerRuntime im
         m_parser.addBuilder(new BundleAdapterServiceBuilder());
         m_parser.addBuilder(new FactoryConfigurationAdapterServiceBuilder());
         m_parser.addBuilder(new ResourceAdapterServiceBuilder());
+    }
+    
+    /**
+     * Return our Object Composition (the Activator will inject dependencies into it)
+     */
+    protected Object[] getComposition()
+    {
+        return new Object[] { this, Log.instance() };
+    }
 
-        // Load already started bundles
-        for (Bundle b: m_bctx.getBundles())
-        {
-            if (b.getState() == Bundle.ACTIVE)
-            {
-                bundleChanged(new BundleEvent(Bundle.ACTIVE, b));
-            }
-        }
-
-        // Track bundles
-        m_bctx.addBundleListener(this);
+    /**
+     * Starts our Service (at this point, we have been injected with our bundle context, as well
+     * as with our log service. We'll listen to bundle start/stop events (we implement the 
+     * SynchronousBundleListener interface).
+     */
+    protected void start()
+    {
+        Log.instance().info("Starting Dependency Manager annotation runtime");
     }
 
     /**
@@ -84,12 +80,11 @@ public class DependencyManagerRuntime im
     @SuppressWarnings("unchecked")
     protected void stop()
     {
-        m_log.log(LogService.LOG_INFO, "Runtime: stopping services");
-
-        for (DependencyManager dm: m_managers.values())
+        Log.instance().info("Runtime: stopping services");
+        for (DependencyManager dm : m_managers.values())
         {
             List<Component> services = new ArrayList<Component>(dm.getServices());
-            for (Component service: services)
+            for (Component service : services)
             {
                 dm.remove(service);
             }
@@ -99,35 +94,11 @@ public class DependencyManagerRuntime im
     }
 
     /**
-     * Register a LogService, so other components may use it
-     */
-    protected void bind(LogService logService) {
-        m_log = logService;
-        Log.instance().setLogService(logService);
-    }
-    
-    /**
-     * Handle a bundle event, and eventually parse started bundles.
-     */
-    public void bundleChanged(BundleEvent event)
-    {
-        Bundle b = event.getBundle();
-        if (b.getState() == Bundle.ACTIVE)
-        {
-            bundleStarted(b);
-        }
-        else if (b.getState() == Bundle.STOPPING)
-        {
-            bundleStopping(b);
-        }
-    }
-
-    /**
      * Checks if a started bundle have some DependencyManager descriptors 
      * referenced in the "DependencyManager-Component" OSGi header.
      * @param b the started bundle.
      */
-    void bundleStarted(Bundle b)
+    protected void bundleStarted(Bundle b)
     {
         String descriptorPaths = (String) b.getHeaders().get("DependencyManager-Component");
         if (descriptorPaths == null)
@@ -135,13 +106,13 @@ public class DependencyManagerRuntime im
             return;
         }
 
-        for (String descriptorPath: descriptorPaths.split(","))
+        for (String descriptorPath : descriptorPaths.split(","))
         {
             URL descriptorURL = b.getEntry(descriptorPath);
             if (descriptorURL == null)
             {
-                m_log.log(LogService.LOG_ERROR, "Runtime: " +
-                          "DependencyManager component descriptor not found: " + descriptorPath);
+                Log.instance().error("Runtime: " + "DependencyManager component descriptor not found: %s",
+                                     descriptorPath);
                 continue;
             }
             loadDescriptor(b, descriptorURL);
@@ -153,18 +124,18 @@ public class DependencyManagerRuntime im
      * @param b
      */
     @SuppressWarnings("unchecked")
-    private void bundleStopping(Bundle b)
+    protected void bundleStopped(Bundle b)
     {
-        m_log.log(LogService.LOG_INFO, "Runtime: Removing services from stopping bundle: " + b.getSymbolicName());
+        Log.instance().info("Runtime: Removing services from stopping bundle: %s", b.getSymbolicName());
         DependencyManager dm = m_managers.remove(b);
         if (dm != null)
         {
             List<Component> services = new ArrayList(dm.getServices());
             for (Component service : services)
             {
-                m_log.log(LogService.LOG_INFO, "Runtime: Removing service: " + service);
+                Log.instance().info("Runtime: Removing service: %s", service);
                 dm.remove(service);
-            }            
+            }
         }
     }
 
@@ -175,8 +146,9 @@ public class DependencyManagerRuntime im
      */
     private void loadDescriptor(Bundle b, URL descriptorURL)
     {
-        m_log.log(LogService.LOG_DEBUG, "Runtime: ++++ Parsing descriptor " + descriptorURL
-            + " from bundle " + b.getSymbolicName());
+        Log.instance().debug("Runtime: ++++ Parsing descriptor %s from bundle %s",
+                             descriptorURL,
+                             b.getSymbolicName());
 
         BufferedReader in = null;
         try
@@ -195,8 +167,10 @@ public class DependencyManagerRuntime im
 
         catch (Throwable t)
         {
-            m_log.log(LogService.LOG_ERROR, "Runtime: Error while parsing descriptor "
-                + descriptorURL + " from bundle " + b.getSymbolicName(), t);
+            Log.instance().error("Runtime: Error while parsing descriptor %s from bundle %s",
+                                 t,
+                                 descriptorURL,
+                                 b.getSymbolicName());
         }
 
         finally

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/DescriptorParser.java Thu Jan 27 22:00:11 2011
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.felix.dm.DependencyManager;
 import org.json.JSONObject;
 import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogService;
 
 /**
  * This class parses files generated in OSGI-INF/*.dm by the DependencyManager bnd plugin.
@@ -49,7 +48,7 @@ public class DescriptorParser
 
         // The first line is a Service Component (a Service, an Aspect Service, etc ...)
         line = reader.readLine();
-        Log.instance().log(LogService.LOG_DEBUG, "DescriptorParser: parsing service %s", line);
+        Log.instance().debug("DescriptorParser: parsing service %s", line);
         JSONObject json = new JSONObject(line);
         JSONMetaData serviceMetaData = new JSONMetaData(json);
 
@@ -58,14 +57,14 @@ public class DescriptorParser
         if (builder == null)
         {
             throw new IllegalArgumentException("Invalid descriptor"
-                + ": no \"type\" parameter found in first line");
+                    + ": no \"type\" parameter found in first line");
         }
 
         // Parse the rest of the lines (dependencies)
         List<MetaData> serviceDependencies = new ArrayList<MetaData>();
         while ((line = reader.readLine()) != null)
         {
-            Log.instance().log(LogService.LOG_DEBUG, "Parsing dependency Ms", line);
+            Log.instance().debug("Parsing dependency Ms", line);
             JSONObject dep = new JSONObject(line);
             serviceDependencies.add(new JSONMetaData(dep));
         }

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactoryConfigurationAdapterServiceBuilder.java Thu Jan 27 22:00:11 2011
@@ -21,8 +21,8 @@ package org.apache.felix.dm.runtime;
 import java.util.Dictionary;
 import java.util.List;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
 
 public class FactoryConfigurationAdapterServiceBuilder extends AbstractBuilder

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactorySet.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactorySet.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactorySet.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/FactorySet.java Thu Jan 27 22:00:11 2011
@@ -27,11 +27,10 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.felix.dm.Component;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.Component;
 import org.osgi.framework.Bundle;
-import org.osgi.service.log.LogService;
 
 /**
  * This class implements a <code>java.util.Set</code> which acts as a service factory.
@@ -189,6 +188,7 @@ public class FactorySet extends Abstract
      * Create or Update a Service.
      */
     @Override
+    @SuppressWarnings("synthetic-access")
     public boolean add(final Dictionary configuration)
     {
         // Check parameter validity
@@ -230,6 +230,7 @@ public class FactorySet extends Abstract
      * (This avoid potential dead locks, especially when Service callback methods are invoked).
      */
     @Override
+    @SuppressWarnings("synthetic-access")
     public boolean remove(final Object configuration)
     {
         // Check parameter validity.
@@ -268,6 +269,7 @@ public class FactorySet extends Abstract
      * (This avoid potential dead locks, especially when Service callback methods are invoked).
      */
     @Override
+    @SuppressWarnings("synthetic-access")
     public void clear()
     {
         if (!m_active)
@@ -383,17 +385,15 @@ public class FactorySet extends Abstract
                     if (name == null)
                     {
                         DependencyBuilder depBuilder = new DependencyBuilder(dependency);
-                        Log.instance().log(
-                                           LogService.LOG_INFO,
-                                           "ServiceLifecycleHandler.init: adding dependency %s into service %s",
-                                           dependency, m_srvMeta);
+                        Log.instance().info("ServiceLifecycleHandler.init: adding dependency %s into service %s",
+                                            dependency, m_srvMeta);
                         Dependency d = depBuilder.build(m_bundle, m_dm, false);
                         s.add(d);
                     }
                 }
 
                 // Register the Service instance, and keep track of it.
-                Log.instance().log(LogService.LOG_INFO, "ServiceFactory: created service %s", m_srvMeta);
+                Log.instance().info("ServiceFactory: created service %s", m_srvMeta);
                 m_dm.add(s);
                 m_services.put(serviceKey, s);
             }
@@ -401,8 +401,8 @@ public class FactorySet extends Abstract
             {
                 // Make sure the SERVICE_CREATING flag is also removed
                 m_services.remove(serviceKey);
-                Log.instance().log(LogService.LOG_ERROR, "ServiceFactory: could not instantiate service %s",
-                                   t, m_srvMeta);
+                Log.instance().error("ServiceFactory: could not instantiate service %s",
+                                     t, m_srvMeta);
             }
         }
         else
@@ -410,7 +410,7 @@ public class FactorySet extends Abstract
             // Reconfigure an already existing Service.
             if (m_configure != null)
             {
-                Log.instance().log(LogService.LOG_INFO, "ServiceFactory: updating service %s", m_impl);
+                Log.instance().info("ServiceFactory: updating service %s", m_impl);
                 invokeConfigure(m_impl, m_configure, configuration);
             }
 
@@ -425,7 +425,7 @@ public class FactorySet extends Abstract
 
     private void doRemove(Dictionary configuraton)
     {
-        Log.instance().log(LogService.LOG_INFO, "ServiceFactory: removing service %s", m_srvMeta);
+        Log.instance().info("ServiceFactory: removing service %s", m_srvMeta);
         ServiceKey serviceKey = new ServiceKey(configuraton);
         Object service = m_services.remove(serviceKey);
         if (service != null && service != SERVICE_CREATING)

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/InvocationUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/InvocationUtil.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/InvocationUtil.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/InvocationUtil.java Thu Jan 27 22:00:11 2011
@@ -22,18 +22,22 @@ import java.lang.reflect.InvocationTarge
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 /**
- * Class copied from DM core (but, ultimately, the core should export this class so we could then 
- * import/reuse it).
+ * Java reflexion utility methods.
  */
 public class InvocationUtil
 {
-    public static Object invokeCallbackMethod(Object instance, String methodName, Class[][] signatures,
-                                            Object[][] parameters) 
-        throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
+    public static Object invokeCallbackMethod(Object instance,
+                                              String methodName,
+                                              Class<?>[][] signatures,
+                                              Object[][] parameters)
+        throws NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
+        InvocationTargetException
     {
-        Class currentClazz = instance.getClass();
+        Class<?> currentClazz = instance.getClass();
         while (currentClazz != null)
         {
             try
@@ -49,9 +53,14 @@ public class InvocationUtil
         throw new NoSuchMethodException(methodName);
     }
 
-    public static Object invokeMethod(Object object, Class clazz, String name, Class[][] signatures,
-                                      Object[][] parameters, boolean isSuper) 
-        throws NoSuchMethodException, InvocationTargetException, IllegalArgumentException, IllegalAccessException
+    public static Object invokeMethod(Object object,
+                                      Class<?> clazz,
+                                      String name,
+                                      Class<?>[][] signatures,
+                                      Object[][] parameters,
+                                      boolean isSuper)
+        throws NoSuchMethodException, InvocationTargetException, IllegalArgumentException,
+        IllegalAccessException
     {
         if (object == null)
         {
@@ -64,23 +73,29 @@ public class InvocationUtil
 
         // If we're talking to a proxy here, dig one level deeper to expose the
         // underlying invocation handler ...
-        
+
         if (Proxy.isProxyClass(clazz))
         {
             object = Proxy.getInvocationHandler(object);
             clazz = object.getClass();
         }
 
-        Method m = null;
         for (int i = 0; i < signatures.length; i++)
         {
-            Class[] signature = signatures[i];
+            Class<?>[] signature = signatures[i];
             try
             {
-                m = clazz.getDeclaredMethod(name, signature);
+                final Method m = clazz.getDeclaredMethod(name, signature);
                 if (!(isSuper && Modifier.isPrivate(m.getModifiers())))
                 {
-                    m.setAccessible(true);
+                    AccessController.doPrivileged(new PrivilegedAction<Object>()
+                    {
+                        public Object run()
+                        {
+                            m.setAccessible(true);
+                            return null;
+                        }
+                    });
                     return m.invoke(object, parameters[i]);
                 }
             }

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Log.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Log.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Log.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/Log.java Thu Jan 27 22:00:11 2011
@@ -25,7 +25,7 @@ import org.osgi.service.log.LogService;
  */
 public class Log
 {
-    /** The log service */
+    /** The wrap log service which is actually used (Injected by Activator) */
     private volatile LogService m_logService;
     
     /** Our sole instance */
@@ -36,17 +36,43 @@ public class Log
         return m_instance;
     }
     
-    public void setLogService(LogService logService) {
-        m_logService = logService;
+    public void error(String format, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_ERROR, String.format(format, args));
     }
-        
-    public void log(int level, String format, Object ... args) 
+    
+    public void error(String format, Throwable t, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_ERROR, String.format(format, args), t);
+    }
+    
+    public void warn(String format, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_WARNING, String.format(format, args));
+    }
+    
+    public void warn(String format, Throwable t, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_WARNING, String.format(format, args), t);
+    }
+    
+    public void info(String format, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_INFO, String.format(format, args));
+    }
+    
+    public void info(String format, Throwable t, Object ... args) 
+    {
+        m_logService.log(LogService.LOG_INFO, String.format(format, args), t);
+    }
+    
+    public void debug(String format, Object ... args) 
     {
-        m_logService.log(level, String.format(format, args));
+        m_logService.log(LogService.LOG_DEBUG, String.format(format, args));
     }
     
-    public void log(int level, String format, Throwable t, Object ... args) 
+    public void debug(String format, Throwable t, Object ... args) 
     {
-        m_logService.log(level, String.format(format, args), t);
+        m_logService.log(LogService.LOG_DEBUG, String.format(format, args), t);
     }
 }

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ResourceAdapterServiceBuilder.java Thu Jan 27 22:00:11 2011
@@ -21,8 +21,8 @@ package org.apache.felix.dm.runtime;
 import java.util.Dictionary;
 import java.util.List;
 
-import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.Component;
+import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.Bundle;
 
 public class ResourceAdapterServiceBuilder extends AbstractBuilder

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/SerialExecutor.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/SerialExecutor.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/SerialExecutor.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/SerialExecutor.java Thu Jan 27 22:00:11 2011
@@ -31,7 +31,7 @@ import java.util.LinkedList;
  */
 public final class SerialExecutor
 {
-    private final LinkedList m_workQueue = new LinkedList();
+    private final LinkedList<Runnable> m_workQueue = new LinkedList<Runnable>();
     private Runnable m_active;
 
     /**
@@ -44,6 +44,7 @@ public final class SerialExecutor
     {
         m_workQueue.addLast(new Runnable()
         {
+            @SuppressWarnings("synthetic-access")
             public void run()
             {
                 try

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ServiceLifecycleHandler.java Thu Jan 27 22:00:11 2011
@@ -31,18 +31,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.apache.felix.dm.BundleDependency;
-import org.apache.felix.dm.ConfigurationDependency;
+import org.apache.felix.dm.Component;
 import org.apache.felix.dm.Dependency;
 import org.apache.felix.dm.DependencyManager;
-import org.apache.felix.dm.ResourceDependency;
-import org.apache.felix.dm.Component;
-import org.apache.felix.dm.ServiceDependency;
-import org.apache.felix.dm.TemporalServiceDependency;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.log.LogService;
 
 /**
  * Allow Services to configure dynamically their dependency filters from their init() method.
@@ -152,7 +144,7 @@ public class ServiceLifecycleHandler
 
         if (starter != null)
         {
-            Log.instance().log(LogService.LOG_DEBUG, "Setting up a lifecycle controller for service %s", serviceInstance);
+            Log.instance().debug("Setting up a lifecycle controller for service %s", serviceInstance);
             String componentName = serviceInstance.getClass().getName();
             m_toggle = new ToggleServiceDependency();
             service.add(m_toggle);
@@ -178,9 +170,8 @@ public class ServiceLifecycleHandler
             }
         }
 
-        Log.instance().log(LogService.LOG_DEBUG,
-                           "ServiceLifecycleHandler.init: invoked init method from service %s " +
-                               ", returned map: %s", serviceInstance, customization);
+        Log.instance().debug("ServiceLifecycleHandler.init: invoked init method from service %s " +
+                             ", returned map: %s", serviceInstance, customization);
 
         for (MetaData dependency: m_depsMeta)
         {
@@ -207,8 +198,7 @@ public class ServiceLifecycleHandler
                 }
 
                 DependencyBuilder depBuilder = new DependencyBuilder(dependency);
-                Log.instance().log(LogService.LOG_INFO,
-                                   "ServiceLifecycleHandler.init: adding dependency %s into service %s",
+                Log.instance().info("ServiceLifecycleHandler.init: adding dependency %s into service %s",
                                    dependency, m_srvMeta);
                 Dependency d = depBuilder.build(m_bundle, dm, true);
                 m_namedDeps.add(d);
@@ -281,7 +271,7 @@ public class ServiceLifecycleHandler
             }
             catch (NoSuchMethodException e)
             {
-                Log.instance().log(LogService.LOG_ERROR, "Lifecycle handler could not reset instanceBound of dependency: %s", e, d);
+                Log.instance().error("Lifecycle handler could not reset instanceBound of dependency: %s", e, d);
             }
         }
     }
@@ -351,10 +341,10 @@ public class ServiceLifecycleHandler
     /**
      * Sets a field of an object by reflexion.
      */
-    private void setField(Object instance, String fieldName, Class fieldClass, Object fieldValue)
+    private void setField(Object instance, String fieldName, Class<?> fieldClass, Object fieldValue)
     {
         Object serviceInstance = instance;
-        Class serviceClazz = serviceInstance.getClass();
+        Class<?> serviceClazz = serviceInstance.getClass();
         if (Proxy.isProxyClass(serviceClazz))
         {
             serviceInstance = Proxy.getInvocationHandler(serviceInstance);
@@ -366,7 +356,7 @@ public class ServiceLifecycleHandler
             for (int j = 0; j < fields.length; j++)
             {
                 Field field = fields[j];
-                Class type = field.getType();
+                Class<?> type = field.getType();
                 if (field.getName().equals(fieldName) && type.isAssignableFrom(fieldClass))
                 {
                     try
@@ -378,7 +368,7 @@ public class ServiceLifecycleHandler
                             field.set(serviceInstance, fieldValue);
                         }
                     }
-                    catch (Exception e)
+                    catch (Throwable e)
                     {
                         throw new RuntimeException("Could not set field " + field, e);
                     }
@@ -396,11 +386,12 @@ public class ServiceLifecycleHandler
             m_componentName = name;
         }
 
+        @SuppressWarnings("synthetic-access")
         public void run()
         {
             if (m_started.compareAndSet(false, true)) {
-                Log.instance().log(LogService.LOG_DEBUG, "Lifecycle controller is activating the component %s",
-                                   m_componentName);
+                Log.instance().debug("Lifecycle controller is activating the component %s",
+                                     m_componentName);
                 m_toggle.setAvailable(true);
             }
         }
@@ -414,11 +405,12 @@ public class ServiceLifecycleHandler
             m_componentName = componentName;
         }
 
+        @SuppressWarnings("synthetic-access")
         public void run()
         {
             if (m_started.compareAndSet(true, false)) {
-                Log.instance().log(LogService.LOG_DEBUG, "Lifecycle controller is deactivating the component %s",
-                                   m_componentName);
+                Log.instance().debug("Lifecycle controller is deactivating the component %s",
+                                    m_componentName);
                 m_toggle.setAvailable(false);
             }
         }

Modified: felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ToggleServiceDependency.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ToggleServiceDependency.java?rev=1064329&r1=1064328&r2=1064329&view=diff
==============================================================================
--- felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ToggleServiceDependency.java (original)
+++ felix/trunk/dependencymanager/runtime/src/main/java/org/apache/felix/dm/runtime/ToggleServiceDependency.java Thu Jan 27 22:00:11 2011
@@ -33,7 +33,7 @@ import org.apache.felix.dm.DependencySer
  */
 public class ToggleServiceDependency implements Dependency, DependencyActivation
 {
-    private final List m_services = new ArrayList();
+    private final List<Object> m_services = new ArrayList<Object>();
     private volatile boolean m_isAvailable;
     private volatile boolean m_stopped;
 
@@ -106,11 +106,12 @@ public class ToggleServiceDependency imp
         return null;
     }
 
-    public Class getAutoConfigType()
+    public Class<?> getAutoConfigType()
     {
         return String.class;
     }
 
+    @SuppressWarnings("unchecked")
     public Dictionary getProperties()
     {
         return null;