Author: pderop
Date: Mon Feb  1 10:05:32 2016
New Revision: 1727908

URL: http://svn.apache.org/viewvc?rev=1727908&view=rev
Log:
Added comments. Cleaned hello sample.

Modified:
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Activator.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Configurator.java
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/README
    
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/ServiceProviderImpl.java

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Activator.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Activator.java?rev=1727908&r1=1727907&r2=1727908&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Activator.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Activator.java
 Mon Feb  1 10:05:32 2016
@@ -33,22 +33,22 @@ public class Activator extends Dependenc
     public void activate() throws Exception {
        out.println("type \"log info\" to see the logs emitted by this test.");
        
-       // Creates a Service Provider
-        component(comp -> comp
-            .impl(ServiceProviderImpl.class)
-            .provides(ServiceProvider.class, property1 -> "value1", property2 
-> 123) // property names are deduced from lambda parameter names
+       // Creates a Service Provider (property names are deduced from lambda 
parameter names).
+       // (service dependencies are required by default)
+        component(comp -> comp.impl(ServiceProviderImpl.class)
+            .provides(ServiceProvider.class, p1 -> "v1", p2 -> 123)
             .withSrv(LogService.class));
-
+            
         // Creates a Service Consumer. we depend on LogService, EventAdmin and 
on our ServiceProvider.
         // (LogService and EventAdmin are declared in one single method call).
-        
-        component(comp -> comp
-            .impl(ServiceConsumer.class)
+        component(comp -> comp.impl(ServiceConsumer.class)
             .withSrv(LogService.class, EventAdmin.class)
-            .withSrv(ServiceProvider.class, srv -> 
srv.filter("(property1=value1)")) 
+            .withSrv(ServiceProvider.class, srv -> srv.filter("(p1=v1)")) 
             .withCnf(ServiceConsumer.class));  
         
         // Creates a component that populates some properties in the 
Configuration Admin.
-        component(comp -> 
comp.impl(Configurator.class).withSrv(ConfigurationAdmin.class));
+        // Here, we inject the CM (Configuration Admin) service dependency 
using a method reference:
+        component(comp -> comp.impl(Configurator.class)
+            .withSrv(ConfigurationAdmin.class, srv -> 
srv.cb(Configurator::bind)));
     }
 }

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Configurator.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Configurator.java?rev=1727908&r1=1727907&r2=1727908&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Configurator.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/Configurator.java
 Mon Feb  1 10:05:32 2016
@@ -8,7 +8,11 @@ import org.osgi.service.cm.Configuration
 import org.osgi.service.cm.ConfigurationAdmin;
 
 public class Configurator {
-    volatile ConfigurationAdmin m_cm; // injected by reflection.
+    ConfigurationAdmin m_cm; 
+    
+    void bind(ConfigurationAdmin cm) {
+        m_cm = cm;
+    }
     
     void start() throws IOException {
         // Configure the ServiceConsumer component

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/README
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/README?rev=1727908&r1=1727907&r2=1727908&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/README
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/README
 Mon Feb  1 10:05:32 2016
@@ -21,3 +21,9 @@ To see logs, just type this under gogo s
 
 g! log info|grep hello.annot
 
+and you should see the following logs:
+
+2016.02.01 10:12:02 INFO - Bundle: 
org.apache.felix.dependencymanager.lambda.samples.hello - 
ServiceProviderImpl.hello
+2016.02.01 10:12:02 INFO - Bundle: 
org.apache.felix.dependencymanager.lambda.samples.hello - 
ServiceConsumer.start: calling service.hello()
+
+

Modified: 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/ServiceProviderImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/ServiceProviderImpl.java?rev=1727908&r1=1727907&r2=1727908&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/ServiceProviderImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/org.apache.felix.dependencymanager.lambda.samples/src/org/apache/felix/dm/lambda/samples/hello/ServiceProviderImpl.java
 Mon Feb  1 10:05:32 2016
@@ -26,10 +26,24 @@ import org.osgi.service.log.LogService;
  * @author <a href="mailto:[email protected]";>Felix Project Team</a>
  */
 public class ServiceProviderImpl implements ServiceProvider {
+    /**
+     * Our log service, injected from Activator.
+     * If field is only accessed by callbacks, then you do not need to declare 
it as volatile, because the DM thread model
+     * ensures "safe publications" of objects when lifecycle or dependency 
callbacks are invoked.
+     * Here we declare the field using volatile because our hello method may 
be invoked from any thread, and declaring the field
+     * as volatile will ensure safe publication if the log service is replaced 
at runtime.
+     */
     volatile LogService log;
 
     void start() {
-        // default lifecycle start calback (all required dependencies have 
been injected when start is called.        
+        // Default lifecycle start calback (all required dependencies have 
been injected when start is called, 
+        // and all optional dependency callbacks will be invoked after the 
start method. This allows to easily 
+        // implement the whiteboard pattern: you are first injected with 
required dependencies, then you can initialize
+        // your component from the start callback, and then optional 
dependency callbacks are invoked.
+        
+        // Notice that all callbacks are serially executed and you don't need 
to synchronize your callbacks and
+        // you can perform any manual service registrations (using 
BundleContext.registerService) whithout dealing
+        // with synchronization, because no locks are held by DM when 
callbacks are invoked.
     }
     
     @Override


Reply via email to