You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by bu...@apache.org on 2016/02/24 19:34:11 UTC

svn commit: r981091 - in /websites/staging/felix/trunk/content: ./ documentation/subprojects/apache-felix-dependency-manager/guides/dm-lambda.html

Author: buildbot
Date: Wed Feb 24 18:34:11 2016
New Revision: 981091

Log:
Staging update by buildbot for felix

Modified:
    websites/staging/felix/trunk/content/   (props changed)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/dm-lambda.html

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Wed Feb 24 18:34:11 2016
@@ -1 +1 @@
-1732132
+1732200

Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/dm-lambda.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/dm-lambda.html (original)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/guides/dm-lambda.html Wed Feb 24 18:34:11 2016
@@ -440,13 +440,14 @@ service properties as a suite of "<code>
 
 
 <h2 id="depending-on-a-configuration">Depending on a configuration.<a class="headerlink" href="#depending-on-a-configuration" title="Permanent link">&para;</a></h2>
-<p>Configuration dependency can be defined using the "<code>withCnf</code>" ComponentBuilder method.</p>
-<p>Two families of callbacks are supported:</p>
+<p>Configuration dependency can be defined using the "<code>withCnf</code>" ComponentBuilder method.
+Two families of callbacks are supported:</p>
 <ul>
 <li>reflection based callbacks: you specify a callback method name</li>
 <li>method reference callbacks: you specify a java8 method reference</li>
 </ul>
 <p>Callbacks may accept a Dictionary, a Component, or a user defined configuration type interface. If you only specify a pid, by default the callback method name is assumed to be "updated".</p>
+<h3 id="configuration-types">configuration types<a class="headerlink" href="#configuration-types" title="Permanent link">&para;</a></h3>
 <p>Configuration types are a new feature that allows you to specify an interface that is implemented by DM and such interface is then injected to your callback instead of the actual Dictionary. Using such configuration interface provides a way for creating type-safe configurations from a actual Dictionary that is normally injected by Dependency Manager. The callback accepts in argument an interface that you have to provide, and DM will inject a proxy that converts method calls from your configuration-type to lookups in the actual map or dictionary. The results of these lookups are then converted to the expected return type of the invoked configuration method.
 As proxies are injected, no implementations of the desired configuration-type are necessary!</p>
 <p>The lookups performed are based on the name of the method called on the configuration type. The method names are "mangled" to the following form: [lower case letter] [any valid character]*. Method names starting with get or is (JavaBean convention) are stripped from these prefixes. For example: given a dictionary with the key "foo" can be accessed from a configuration-type using the following method names: foo(), getFoo() and isFoo().</p>
@@ -464,15 +465,56 @@ As proxies are injected, no implementati
 <li>for arrays, collections and maps, an empty array/collection/map is returned;</li>
 <li>for other interface types that are treated as configuration type a null-object is returned. </li>
 </ul>
-<p>Sample codes:</p>
-<p>Code example with a component that defines a Configuration Dependency using a specific callback method reference, and the method accepts in argument a configuration type (the pid is assumed to be the fqdn of the configuration type):</p>
+<h3 id="multiple-ways-to-define-a-configuration-dependency">multiple ways to define a configuration dependency<a class="headerlink" href="#multiple-ways-to-define-a-configuration-dependency" title="Permanent link">&para;</a></h3>
+<p>You can first pass a configuration pid to the <code>withCnf</code> method:</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">))</span>
+</pre></div>
+
+
+<p>The above example assumes that your Hello component has an "<code>updated(Dictionary properties)</code>" method and will call it when configuration is available or updated.</p>
+<p>You can pass a "<code>configuration type</code>" to the <code>withCnf</code> method:</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">MyConfiguration</span><span class="o">.</span><span class="na">class</span><span class="o">))</span>
+</pre></div>
+
+
+<p>In the above example, the pid is assumed to be the fqdn of the type passed to the <code>withCnf</code> method, and the callback is assumed to be "<code>updated</code>"
+and to accept as argument an implementation of the specified configuration type.</p>
+<p>You can define the updated callback method explicitly using a ConfigurationDependencyBuilder lambda that you can pass to the "<code>withCnf</code>"
+method:</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">((</span><span class="n">ConfigurationDependencyBuilder</span> <span class="n">cnf</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="n">cnf</span><span class="o">.</span><span class="na">pid</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">).</span><span class="na">update</span><span class="o">(</span><span class="s">&quot;modified&quot;</span><span class="o">)));</span>
+</pre></div>
+
+
+<p>shorter version which does not declare the type of the lambda passed to the <code>withCnf</code> method:</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">cnf</span> <span class="o">-&gt;</span> <span class="n">cnf</span><span class="o">.</span><span class="na">pid</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">).</span><span class="na">update</span><span class="o">(</span><span class="s">&quot;modified&quot;</span><span class="o">)));</span>
+</pre></div>
+
+
+<p>You can also define the callback using a method reference:</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">cnf</span> <span class="o">-&gt;</span> <span class="n">cnf</span><span class="o">.</span><span class="na">pid</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">).</span><span class="na">update</span><span class="o">(</span><span class="nl">Hello:</span><span class="o">:</span><span class="n">modified</span><span class="o">)));</span>
+</pre></div>
+
+
+<p>And finally, you can define a configuration type, and callback using a method reference. Here, the updated callback has to take 
+in argument the configuration type parameter (the pid is assumed to be the fqdn of the configuration type):</p>
+<div class="codehilite"><pre><span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">Hello</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">cnf</span> <span class="o">-&gt;</span> <span class="n">cnf</span><span class="o">.</span><span class="na">update</span><span class="o">(</span><span class="n">MyConfiguration</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">Hello:</span><span class="o">:</span><span class="n">modified</span><span class="o">)));</span>
+
+<span class="kd">class</span> <span class="nc">Hello</span> <span class="o">{</span>
+    <span class="kt">void</span> <span class="nf">modified</span><span class="o">(</span><span class="n">MyConfiguration</span> <span class="n">properties</span><span class="o">)</span> <span class="o">{</span> <span class="o">...</span> <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h4 id="configuration-dependency-examples-based-on-method-references">Configuration Dependency Examples based on method references:<a class="headerlink" href="#configuration-dependency-examples-based-on-method-references" title="Permanent link">&para;</a></h4>
+<p>Code example with a component that defines a Configuration Dependency using a specific callback method reference, and the method accepts in argument a configuration type 
+(the pid is assumed to be the fqdn of the configuration type):</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">MyConfig</span> <span class="o">{</span>
     <span class="n">String</span> <span class="nf">getAddress</span><span class="o">();</span>
     <span class="kt">int</span> <span class="nf">getPort</span><span class="o">();</span>
 <span class="o">}</span>
 
 <span class="kd">public</span> <span class="kd">class</span> <span class="nc">ServiceImpl</span> <span class="o">{</span>
-    <span class="kt">void</span> <span class="nf">modified</span><span class="o">(</span><span class="n">MyConfig</span> <span class="n">cnf</span><span class="o">)</span> <span class="o">{</span>
+    <span class="kt">void</span> <span class="nf">updated</span><span class="o">(</span><span class="n">MyConfig</span> <span class="n">cnf</span><span class="o">)</span> <span class="o">{</span>
         <span class="k">if</span> <span class="o">(</span><span class="n">cnf</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
             <span class="n">String</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">cnf</span><span class="o">.</span><span class="na">getAddress</span><span class="o">();</span>
             <span class="kt">int</span> <span class="n">port</span> <span class="o">=</span> <span class="n">cnf</span><span class="o">.</span><span class="na">getPort</span><span class="o">();</span>
@@ -483,14 +525,14 @@ As proxies are injected, no implementati
 
 <span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">extends</span> <span class="n">DependencyManagerActivator</span> <span class="o">{</span>
     <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span> 
-        <span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">ServiceImpl</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">conf</span> <span class="o">-&gt;</span> <span class="n">conf</span><span class="o">.</span><span class="na">update</span><span class="o">(</span><span class="n">MyConfig</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">ServiceImpl:</span><span class="o">:</span><span class="n">modified</span><span class="o">)));</span>  
+        <span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">ServiceImpl</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="n">conf</span> <span class="o">-&gt;</span> <span class="n">conf</span><span class="o">.</span><span class="na">update</span><span class="o">(</span><span class="n">MyConfig</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="nl">ServiceImpl:</span><span class="o">:</span><span class="n">updated</span><span class="o">)));</span>  
     <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
 
 
-<p>Same example, using a shortcut for the <code>withCnf</code> dependency, which is only defining the configuration type (the pid is assumed to 
-be the fqdn of the config type, and the callback name is assumed to be "updated"):</p>
+<p>Same example, using a shortcut for the <code>withCnf</code> dependency, which is only defining the configuration type 
+(the pid is assumed to be the fqdn of the config type, and the callback name is assumed to be "updated"):</p>
 <div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">Activator</span> <span class="n">extends</span> <span class="n">DependencyManagerActivator</span> <span class="p">{</span>
     <span class="n">public</span> <span class="n">void</span> <span class="n">init</span><span class="p">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="p">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span> 
         <span class="n">component</span><span class="p">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="p">.</span><span class="n">impl</span><span class="p">(</span><span class="n">ServiceImpl</span><span class="p">.</span><span class="n">class</span><span class="p">).</span><span class="n">withCnf</span><span class="p">(</span><span class="n">MyConfig</span><span class="p">.</span><span class="n">class</span><span class="p">));</span>  
@@ -504,16 +546,18 @@ be the fqdn of the config type, and the
     <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span> 
         <span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span>
            <span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">ServiceImpl</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
-           <span class="o">.</span><span class="na">withCnf</span><span class="o">(</span><span class="n">conf</span> <span class="o">-&gt;</span> <span class="n">conf</span><span class="o">.</span><span class="na">pid</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">).</span><span class="na">update</span><span class="o">(</span><span class="nl">ServiceImpl:</span><span class="o">:</span><span class="n">modified</span><span class="o">)));</span>
+           <span class="o">.</span><span class="na">withCnf</span><span class="o">(</span><span class="n">conf</span> <span class="o">-&gt;</span> <span class="n">conf</span><span class="o">.</span><span class="na">pid</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">).</span><span class="na">update</span><span class="o">(</span><span class="nl">ServiceImpl:</span><span class="o">:</span><span class="n">setProperties</span><span class="o">)));</span>
     <span class="o">}</span>
  <span class="o">}</span>
 </pre></div>
 
 
-<p>Code example which defines a configuration dependency injected in the "ServiceImpl.updated(Dictionary)" callback:</p>
+<h4 id="configuration-dependency-examples-based-on-method-reflection">Configuration Dependency Examples based on method reflection:<a class="headerlink" href="#configuration-dependency-examples-based-on-method-reflection" title="Permanent link">&para;</a></h4>
+<p>Code example which defines a configuration dependency injected in the "ServiceImpl.updated(Dictionary)" callback
+(the pid is directly passed in argument to the <code>withCnf</code> method):</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">Activator</span> <span class="kd">extends</span> <span class="n">DependencyManagerActivator</span> <span class="o">{</span>
     <span class="kd">public</span> <span class="kt">void</span> <span class="nf">init</span><span class="o">(</span><span class="n">BundleContext</span> <span class="n">ctx</span><span class="o">,</span> <span class="n">DependencyManager</span> <span class="n">dm</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span> 
-        <span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">ServiceImpl</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">));</span>
+        <span class="n">component</span><span class="o">(</span><span class="n">comp</span> <span class="o">-&gt;</span> <span class="n">comp</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">ServiceImpl</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">withCnf</span><span class="o">(</span><span class="s">&quot;my.pid&quot;</span><span class="o">)));</span>
     <span class="o">}</span>
 <span class="o">}</span>
 </pre></div>
@@ -836,7 +880,7 @@ http proxy.</p>
 <h2 id="javadoc">Javadoc<a class="headerlink" href="#javadoc" title="Permanent link">&para;</a></h2>
 <p>You can find the javadoc for the new Dependency Manager Lambda library <a href="../../../../apidocs/">here</a>.</p>
       <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
-        Rev. 1732132 by pderop on Wed, 24 Feb 2016 12:42:02 +0000
+        Rev. 1732200 by pderop on Wed, 24 Feb 2016 18:33:42 +0000
       </div>
       <div class="trademarkFooter"> 
         Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project