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">¶</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">¶</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">¶</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">-></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">"my.pid"</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">-></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">-></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">-></span> <span class="n">cnf</span><span
class="o">.</span><span class="na">pid</span><span class="o">(</span><span
class="s">"my.pid"</span><span class="o">).</span><span
class="na">update</span><span class="o">(</span><span
class="s">"modified"</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">-></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">-></span> <span class="n">cnf</span><span
class="o">.</span><span class="na">pid</span><span class="o">(</span><span
class="s">"my.pid"</span><span class="o">).</span><span
class="na">update</span><span class="o">(</span><span
class="s">"modified"</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">-></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">-></span> <span class="n">cnf</span><span
class="o">.</span><span class="na">pid</span><span class="o">(</span><span
class="s">"my.pid"</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">-></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">-></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">¶</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">-></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">-></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">-></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">-></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">-></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">-></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">-></span>
<span class="n">conf</span><span class="o">.</span><span
class="na">pid</span><span class="o">(</span><span
class="s">"my.pid"</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">-></span>
<span class="n">conf</span><span class="o">.</span><span
class="na">pid</span><span class="o">(</span><span
class="s">"my.pid"</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">¶</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">-></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">"my.pid"</span><span class="o">));</span>
+ <span class="n">component</span><span class="o">(</span><span
class="n">comp</span> <span class="o">-></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">"my.pid"</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">¶</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