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 2018/10/01 16:53:56 UTC

svn commit: r1035988 - in /websites/staging/felix/trunk/content: ./ documentation/subprojects/apache-felix-dependency-manager/reference/component-adapter.html

Author: buildbot
Date: Mon Oct  1 16:53:56 2018
New Revision: 1035988

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/reference/component-adapter.html

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Mon Oct  1 16:53:56 2018
@@ -1 +1 @@
-1842416
+1842518

Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-adapter.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-adapter.html (original)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-dependency-manager/reference/component-adapter.html Mon Oct  1 16:53:56 2018
@@ -90,20 +90,58 @@ h2:hover > .headerlink, h3:hover > .head
 h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
 <p>Adapters, like <a href="component-aspect.html">aspects</a>, are used to "extend" existing services, and can publish different services based on the existing one. An example would be implementing a management interface.</p>
 <p>An adapter will be applied to any service that matches the specified interface and filter. For each matching service an adapter will be created based on the adapter implementation class. The adapter will be registered with the specified interface and existing properties from the original service plus any extra properties you supply here. It will also inherit all dependencies, and if you declare the original service as a member it will be injected.</p>
-<p>An example:</p>
-<div class="codehilite"><pre><span class="n">manager</span><span class="p">.</span><span class="n">createAdapterService</span><span class="p">(</span><span class="n">AdapteeService</span><span class="p">.</span><span class="n">class</span><span class="p">,</span> &quot;<span class="p">(</span><span class="n">foo</span><span class="p">=</span><span class="n">bar</span><span class="p">)</span>&quot;<span class="p">)</span>
-    <span class="p">.</span><span class="n">setInterface</span><span class="p">(</span><span class="n">AdapterService</span><span class="p">.</span><span class="n">class</span><span class="p">,</span> <span class="n">new</span> <span class="n">Hashtable</span><span class="p">()</span> <span class="p">)</span>
-    <span class="p">.</span><span class="n">setImplementation</span><span class="p">(</span><span class="n">AdapterImpl</span><span class="p">.</span><span class="n">class</span><span class="p">);</span>
+<h2 id="usage-example-using-api">Usage example using API<a class="headerlink" href="#usage-example-using-api" title="Permanent link">&para;</a></h2>
+<p>Here is a sample showing a HelloServlet adapter component which creates a servlet each time a HelloService is registered in the osgi service registry with the "foo=bar" service property.</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">DependencyActivatorBase</span> <span class="o">{</span>
+    <span class="o">&amp;</span><span class="n">Override</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">context</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="n">adapterComponent</span> <span class="o">=</span> <span class="n">createAdapterComponent</span><span class="o">()</span>
+             <span class="o">.</span><span class="na">setAdaptee</span><span class="o">(</span><span class="n">HelloService</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="s">&quot;(foo=bar)&quot;</span><span class="o">)</span>
+             <span class="o">.</span><span class="na">setInterface</span><span class="o">(</span><span class="n">HttpServlet</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">(),</span> <span class="kc">null</span><span class="o">)</span>
+             <span class="o">.</span><span class="na">setImplementation</span><span class="o">(</span><span class="n">HelloServlet</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+         <span class="n">dm</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="n">adapterComponent</span><span class="o">);</span>
+     <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="kd">interface</span> <span class="nc">HelloService</span> <span class="o">{</span>
+    <span class="n">String</span> <span class="nf">sayHello</span><span class="o">();</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloServlet</span> <span class="kd">extends</span> <span class="n">HttpServlet</span> <span class="o">{</span>
+    <span class="kd">volatile</span> <span class="n">HelloService</span> <span class="n">adatpee</span><span class="o">;</span> <span class="c1">// injected</span>
+
+    <span class="kt">void</span> <span class="nf">doGet</span><span class="o">(</span><span class="n">HttpServletRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpServletResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="o">{</span>
+        <span class="o">...</span>
+        <span class="n">resp</span><span class="o">.</span><span class="na">getWriter</span><span class="o">().</span><span class="na">println</span><span class="o">(</span><span class="n">adaptee</span><span class="o">.</span><span class="na">sayHello</span><span class="o">());</span>
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h2 id="example-using-lambda-api">Example using Lambda API<a class="headerlink" href="#example-using-lambda-api" title="Permanent link">&para;</a></h2>
+<p>Same example using the Dependency Manager Lambda API:</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">adapter</span><span class="o">(</span><span class="n">HelloService</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">adapt</span> <span class="o">-&gt;</span> <span class="n">adapt</span><span class="o">.</span><span class="na">impl</span><span class="o">(</span><span class="n">HelloServlet</span><span class="o">.</span><span class="na">class</span><span class="o">).</span><span class="na">filter</span><span class="o">(</span><span class="s">&quot;(foo=bar)&quot;</span><span class="o">).</span><span class="na">provides</span><span class="o">(</span><span class="n">HttpServlet</span><span class="o">.</span><span class="na">class</span><span class="o">));</span>                    
+   <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h2 id="example-using-annotations">Example using annotations<a class="headerlink" href="#example-using-annotations" title="Permanent link">&para;</a></h2>
+<p>Same example using Dependency Manager Annotations:</p>
+<div class="codehilite"><pre><span class="nd">@AdapterService</span><span class="o">(</span><span class="n">adapteeService</span> <span class="o">=</span> <span class="n">HelloService</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">adapteeFilter</span> <span class="o">=</span> <span class="s">&quot;(foo=bar)&quot;</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloServlet</span> <span class="kd">extends</span> <span class="n">HttpServlet</span> <span class="o">{</span>
+    <span class="kd">volatile</span> <span class="n">HelloService</span> <span class="n">adatpee</span><span class="o">;</span> <span class="c1">// injected</span>
+
+    <span class="kt">void</span> <span class="nf">doGet</span><span class="o">(</span><span class="n">HttpServletRequest</span> <span class="n">req</span><span class="o">,</span> <span class="n">HttpServletResponse</span> <span class="n">resp</span><span class="o">)</span> <span class="o">{</span>
+        <span class="o">...</span>
+        <span class="n">resp</span><span class="o">.</span><span class="na">getWriter</span><span class="o">().</span><span class="na">println</span><span class="o">(</span><span class="n">adaptee</span><span class="o">.</span><span class="na">sayHello</span><span class="o">());</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
-<h2 id="adapterservice">@AdapterService<a class="headerlink" href="#adapterservice" title="Permanent link">&para;</a></h2>
-<p>Adapters, like with <em>@AspectService</em>, are used to "extend" existing services, and can publish different services based on the existing one. When you annotate an adapter class with the <em>@AdapterService</em> 
-annotation, it will be applied to any service that matches the implemented 
-interface and filter. The adapter will be registered with the specified 
-interface and existing properties from the original service plus any extra
-properties you supply here. If you declare the original service as a member 
-it will be injected. </p>
 <h3 id="annotation-attributes">Annotation attributes:<a class="headerlink" href="#annotation-attributes" title="Permanent link">&para;</a></h3>
 <hr />
 <p><strong><code>adapteeService</code></strong>  <br />
@@ -133,21 +171,8 @@ By default, the adapter will inherit all
 <em>Default</em>: --</p>
 <p>Sets the static method used to create the adapter service implementation 
 instance. By default, the default constructor of the annotated class is used.</p>
-<h3 id="usage-example">Usage example<a class="headerlink" href="#usage-example" title="Permanent link">&para;</a></h3>
-<p>Here, the AdapterService is registered into the OSGI registry each time an AdapteeService is found from the registry. The AdapterImpl class adapts the AdapteeService to the AdapterService. The AdapterService will also have a service property (param=value), and will also include eventual service properties found from the AdapteeService:</p>
-<div class="codehilite"><pre> <span class="p">@</span><span class="n">AdapterService</span><span class="p">(</span><span class="n">adapteeService</span> <span class="p">=</span> <span class="n">AdapteeService</span><span class="p">.</span><span class="n">class</span><span class="p">,</span> <span class="k">properties</span><span class="p">={@</span><span class="n">Property</span><span class="p">(</span><span class="n">name</span><span class="p">=</span>&quot;<span class="n">param</span>&quot;<span class="p">,</span> <span class="n">value</span><span class="p">=</span>&quot;<span class="n">value</span>&quot;<span class="p">)})</span>
- <span class="n">class</span> <span class="n">AdapterImpl</span> <span class="n">implements</span> <span class="n">AdapterService</span> <span class="p">{</span>
-     <span class="o">//</span> <span class="n">The</span> <span class="n">service</span> <span class="n">we</span> <span class="n">are</span> <span class="n">adapting</span> <span class="p">(</span><span class="n">injected</span> <span class="n">by</span> <span class="n">reflection</span><span class="p">)</span>
-     <span class="n">protected</span> <span class="n">AdapteeService</span> <span class="n">adaptee</span><span class="p">;</span>
-
-     <span class="n">public</span> <span class="n">void</span> <span class="n">doWork</span><span class="p">()</span> <span class="p">{</span>
-        <span class="n">adaptee</span><span class="p">.</span><span class="n">mehod1</span><span class="p">();</span>
-        <span class="n">adaptee</span><span class="p">.</span><span class="n">method2</span><span class="p">();</span>
-     <span class="p">}</span>
- <span class="p">}</span>
-</pre></div>
       <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
-        Rev. 1665812 by marrs on Wed, 11 Mar 2015 09:02:04 +0000
+        Rev. 1842518 by pderop on Mon, 1 Oct 2018 16:52:52 +0000
       </div>
       <div class="trademarkFooter"> 
         Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project