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


Reply via email to