Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/service-requirement-handler.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="requiring-services">Requiring services</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="requiring-services">Requiring services<a class="headerlink" 
href="#requiring-services" title="Permanent link">&para;</a></h1>
 <p><em>One of the main iPOJO feature is the service injection. So, a component 
can consume a service without managing the service discovery, tracking and 
binding. iPOJO manages all these interactions and injects required service into 
the component. This page explains how to use services.</em></p>
 <div class="toc">
 <ul>
@@ -221,8 +232,8 @@
 </li>
 </ul>
 </div>
-<h2 id="service-dependency">Service Dependency</h2>
-<h3 id="whats-a-service-dependency">What's a service dependency?</h3>
+<h2 id="service-dependency">Service Dependency<a class="headerlink" 
href="#service-dependency" title="Permanent link">&para;</a></h2>
+<h3 id="whats-a-service-dependency">What's a service dependency?<a 
class="headerlink" href="#whats-a-service-dependency" title="Permanent 
link">&para;</a></h3>
 <p>A required service is described by a service dependency. The dependency 
defines what kind of service is required, how to select the it, the resilience 
to its dynamism... iPOJO handles all these aspects for you, just tell, iPOJO 
tracks, selects, binds and injects the matching services directly in your code. 
Service dependencies can be:</p>
 <ul>
 <li>Scalar or Aggregate : the component can require one or several service 
providers</li>
@@ -230,14 +241,14 @@
 <li>Filtered : a component can filter available providers, and even choose a 
specific provider</li>
 <li>Resilient to dynamism : iPOJO supports three binding policy depending on 
your reaction to dynamism</li>
 </ul>
-<h3 id="dynamism-resilience-instance-lifecycle">Dynamism, Resilience &amp; 
Instance Lifecycle</h3>
+<h3 id="dynamism-resilience-instance-lifecycle">Dynamism, Resilience &amp; 
Instance Lifecycle<a class="headerlink" 
href="#dynamism-resilience-instance-lifecycle" title="Permanent 
link">&para;</a></h3>
 <p>In OSGi™, services can appear and disappear dynamically. This implies 
dependencies can target a provider which can appear or disappear dynamically. 
So, dependencies need to manage this dynamism by tracking every time available 
services. At any moment, a dependency can be unresolved (i.e. no more provider 
can fulfill the requirement). In the case of a mandatory requirement, the 
instance becomes invalid (an invalid instance is no more accessible externally, 
for example provided services are unpublished). If a service, resolving the 
unfilled dependency appears, the instance becomes valid. In consequence, 
dependencies affect directly the instance state, and must manage correctly OSGi 
dynamism to allow a complete unloading when a service goes away. As soon a 
mandatory dependency cannot be fulfilled, the instance is invalidated.</p>
 <p>By default, dependencies are managed dynamically (as previously explained). 
However, iPOJO supports two other types of binding policies:</p>
 <ul>
 <li>Static : if a bound service disappears, the instance is invalidated and 
cannot be revalidated (binding broken forever)</li>
 <li>Dynamic-Priority: at each injection, the <em>best</em> provider is 
injected, or the providers array is sorted according to the OSGi Ranking policy 
or to a specified sorting algorithm.</li>
 </ul>
-<h2 id="service-requirement-injection-mechanisms">Service Requirement 
Injection Mechanisms</h2>
+<h2 id="service-requirement-injection-mechanisms">Service Requirement 
Injection Mechanisms<a class="headerlink" 
href="#service-requirement-injection-mechanisms" title="Permanent 
link">&para;</a></h2>
 <p>iPOJO support several types of injections:</p>
 <p><strong>Field injection</strong>: a field contains the service object. As 
soon as the field is used, a consistent service object is      injected. This 
injection type fully hides the dynamism</p>
 <div class="codehilite"><pre><span class="nd">@Requires</span>
@@ -261,7 +272,7 @@
 
 
 <p>Moreover, the injections types can be mixed. A component can declare a 
requirement containing both a field and 'binding' methods.</p>
-<h3 id="field-injection">Field injection</h3>
+<h3 id="field-injection">Field injection<a class="headerlink" 
href="#field-injection" title="Permanent link">&para;</a></h3>
 <p>Let's imagine a Hello service with one method 'getMessage' returning a 
"Hello Message". The following component implementation can use this service by 
attaching this service to a field and by using the field:</p>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="nd">@Instantiate</span>
@@ -285,7 +296,7 @@
 
 
 <p>The metadata contains a 'requires' element (representing the service 
dependency) and specify a field used to inject the service. The implementation 
uses the field as a normal field without managing service interactions.</p>
-<h3 id="method-invocation">Method invocation</h3>
+<h3 id="method-invocation">Method invocation<a class="headerlink" 
href="#method-invocation" title="Permanent link">&para;</a></h3>
 <p>The second injection mechanism uses methods in the implementation class. By 
this way, the dynamics can be managed directly by the developer. Each 
dependency can declare three methods:</p>
 <ul>
 <li>A bind method called when a service appears</li>
@@ -408,7 +419,7 @@
 </pre></div>
 
 
-<h3 id="using-constructor-injection-170-snapshot">Using constructor injection 
(<em>1.7.0-SNAPSHOT</em>)</h3>
+<h3 id="using-constructor-injection-170-snapshot">Using constructor injection 
(<em>1.7.0-SNAPSHOT</em>)<a class="headerlink" 
href="#using-constructor-injection-170-snapshot" title="Permanent 
link">&para;</a></h3>
 <p>Services can also be injected using constructor parameters:</p>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">MyComponent</span> <span class="o">{</span>
@@ -421,7 +432,7 @@
 </pre></div>
 
 
-<h3 id="mixing-injections-types">Mixing injections types</h3>
+<h3 id="mixing-injections-types">Mixing injections types<a class="headerlink" 
href="#mixing-injections-types" title="Permanent link">&para;</a></h3>
 <p>The different mechanisms can be used together. In this case, the field 
receives the value before the bind method invocation. Constructor parameters 
get their values during the constructor invocation. So, if the field is used in 
the method, the returned value will be up to date. The following component 
implementation uses this mechanism:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">HelloConsumer</span> <span 
class="o">{</span>
      <span class="nd">@Requires</span><span class="o">(</span><span 
class="n">id</span><span class="o">=</span><span 
class="s">&quot;hello&quot;</span><span class="o">)</span>
@@ -455,15 +466,15 @@
 <li>for constructor parameter, it uses the parameter index</li>
 </ul>
 <p>So, it is strongly recommended to specify the id manually. </p>
-<h3 id="injection-mechanisms-lazy-object-creation">Injection mechanisms &amp; 
lazy object creation</h3>
+<h3 id="injection-mechanisms-lazy-object-creation">Injection mechanisms &amp; 
lazy object creation<a class="headerlink" 
href="#injection-mechanisms-lazy-object-creation" title="Permanent 
link">&para;</a></h3>
 <p>iPOJO creates objects only when required. When needed, iPOJO invokes the 
constructor of the implementation class. The implementation class can use field 
requirement because values are already injected and obviously constructor 
parameters. However, method dependencies are called <em>after</em> the 
constructor. If the service is available before the constructor call, the 
invocation of the bind methods is delayed until the a component class object is 
created.</p>
-<h2 id="examples">Examples</h2>
+<h2 id="examples">Examples<a class="headerlink" href="#examples" 
title="Permanent link">&para;</a></h2>
 <p>For all examples both annotations and XML forms are given. Just choose what 
you'd like to use.</p>
-<h3 id="simple-requirement">Simple Requirement</h3>
+<h3 id="simple-requirement">Simple Requirement<a class="headerlink" 
href="#simple-requirement" title="Permanent link">&para;</a></h3>
 <p>By default, a requirement is mandatory, non-filtered and simple 
(non-aggregate). The previous examples illustrate this kind of dependency. When 
services goes away and appears, the service substitution is hidden. Fields 
attached to simple requirement point always a consistent service object. For a 
simple dependency, the bind method is called once time when the service appears 
or just after the POJO constructor invocation is the service is available. When 
the service disappears the unbind method is called. The bind method is 
re-invoked as soon as another service provider is available. This invocation 
occurs immediately if another service provider if available. In this case, the 
instance is not invalidated.</p>
-<h3 id="aggregate-requirement">Aggregate Requirement</h3>
+<h3 id="aggregate-requirement">Aggregate Requirement<a class="headerlink" 
href="#aggregate-requirement" title="Permanent link">&para;</a></h3>
 <p>When a component requires several providers of the same service, it 
declares an aggregate dependency.</p>
-<h4 id="aggregate-dependency-with-field-injection">Aggregate Dependency with 
field injection</h4>
+<h4 id="aggregate-dependency-with-field-injection">Aggregate Dependency with 
field injection<a class="headerlink" 
href="#aggregate-dependency-with-field-injection" title="Permanent 
link">&para;</a></h4>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">HelloConsumer</span> <span class="o">{</span>
      <span class="nd">@Requires</span>
@@ -492,7 +503,7 @@
 <p>The synchronization is managed by iPOJO. As soon as you are 'touching' a 
dependency in a method, iPOJO ensure that you will keep these objects until the 
end of the method. Nested methods will share the same service object set.</p>
 </div>
 
-<h4 
id="aggregate-dependency-with-field-injection-list-vector-collection-and-set">Aggregate
 Dependency with field injection: list, vector, collection and set</h4>
+<h4 
id="aggregate-dependency-with-field-injection-list-vector-collection-and-set">Aggregate
 Dependency with field injection: list, vector, collection and set<a 
class="headerlink" 
href="#aggregate-dependency-with-field-injection-list-vector-collection-and-set"
 title="Permanent link">&para;</a></h4>
 <p>It is also possible to inject service objects inside fields of the type:</p>
 <ul>
 <li>list</li>
@@ -532,7 +543,7 @@ public class HelloConsumer {
 <p>As in the previous case, the synchronization is managed by iPOJO. As soon 
as you are *touching* a dependency in a method, iPOJO ensure that you will keep 
these objects until the end of the method. Nested methods will share the same 
service object set.</p>
 </div>
 
-<h4 id="aggregate-dependency-with-callbacks">Aggregate Dependency with 
callbacks</h4>
+<h4 id="aggregate-dependency-with-callbacks">Aggregate Dependency with 
callbacks<a class="headerlink" href="#aggregate-dependency-with-callbacks" 
title="Permanent link">&para;</a></h4>
 <div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">HelloConsumer</span> <span 
class="o">{</span>
   <span class="kd">private</span> <span class="n">List</span> <span 
class="n">m_hellos</span> <span class="o">=</span> <span class="k">new</span> 
<span class="n">ArrayList</span><span class="o">();</span>
   <span class="nd">@Bind</span><span class="o">(</span><span 
class="n">aggregate</span><span class="o">=</span><span 
class="kc">true</span><span class="o">)</span>
@@ -563,9 +574,9 @@ public class HelloConsumer {
 <p>To avoid the list modification during the loop, you need synchronized the 
block. Indeed, as the field is not an iPOJO requirement, iPOJO will not manage 
the synchronization.</p>
 </div>
 
-<h3 id="optional-requirement-scalar">Optional Requirement (Scalar)</h3>
+<h3 id="optional-requirement-scalar">Optional Requirement (Scalar)<a 
class="headerlink" href="#optional-requirement-scalar" title="Permanent 
link">&para;</a></h3>
 <p>An optional requirement does not invalidate the instance despite no 
providers are available. Moreover, it is possible to inject a default service 
implementation when no <em>real</em> providers are available.</p>
-<h4 id="optional-requirement-with-field-injection">Optional Requirement with 
field injection</h4>
+<h4 id="optional-requirement-with-field-injection">Optional Requirement with 
field injection<a class="headerlink" 
href="#optional-requirement-with-field-injection" title="Permanent 
link">&para;</a></h4>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">HelloConsumer</span> <span class="o">{</span>
          <span class="nd">@Requires</span><span class="o">(</span><span 
class="n">optional</span><span class="o">=</span><span 
class="kc">true</span><span class="o">)</span>
@@ -587,7 +598,7 @@ public class HelloConsumer {
 
 
 <p>To declare an optional requirement, you need to add the <em>'optional'</em> 
attribute. To avoid <code>null</code> pointer exception, iPOJO injects a 
<code>Nullable</code> object in the field when no service provider is 
available. The <em>nullable</em> object implements the service interface, but 
does nothing. Moreover, it is possible to set a <em>default-implementation</em> 
for the service. A default-implementation is a class implementing the service 
but used only when no others service providers are available. The 
default-implementation object will be injected instead of the <em>Nullable</em> 
objet. For further information <a 
href="#note-about-nullable-object-default-implementation">refer to the note 
about nullable object</a>.</p>
-<h4 id="optional-dependency-with-callbacks-invocation">Optional Dependency 
with callbacks invocation</h4>
+<h4 id="optional-dependency-with-callbacks-invocation">Optional Dependency 
with callbacks invocation<a class="headerlink" 
href="#optional-dependency-with-callbacks-invocation" title="Permanent 
link">&para;</a></h4>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">HelloConsumer</span> <span class="o">{</span>
      <span class="kd">private</span> <span class="n">Hello</span> <span 
class="n">m_hello</span><span class="o">;</span>
@@ -619,9 +630,9 @@ public class HelloConsumer {
 
 
 <p>As for field requirement, the dependency metadata needs to contain the 
optional attribute. iPOJO invokes the method only when a 'real' service is 
available, so you need to test if <code>m_hello</code> is <code>null</code> 
before to use it.</p>
-<h3 id="aggregate-optional-requirement">Aggregate &amp; Optional 
Requirement</h3>
+<h3 id="aggregate-optional-requirement">Aggregate &amp; Optional Requirement<a 
class="headerlink" href="#aggregate-optional-requirement" title="Permanent 
link">&para;</a></h3>
 <p>A dependency can be both aggregate and optional.</p>
-<h4 id="aggregate-optional-dependency-with-field-injection">Aggregate &amp; 
Optional Dependency with field injection</h4>
+<h4 id="aggregate-optional-dependency-with-field-injection">Aggregate &amp; 
Optional Dependency with field injection<a class="headerlink" 
href="#aggregate-optional-dependency-with-field-injection" title="Permanent 
link">&para;</a></h4>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">HelloConsumer</span> <span class="o">{</span>
      <span class="nd">@Requires</span><span class="o">(</span><span 
class="n">optional</span><span class="o">=</span><span 
class="kc">true</span><span class="o">)</span>
@@ -645,7 +656,7 @@ public class HelloConsumer {
 
 
 <p>To declare an optional &amp; aggregate field requirement you need to write 
the optional attribute in the dependency metadata and to point on a field 
array. If no service available, iPOJO injects an empty array.</p>
-<h4 id="aggregate-optional-requirement-with-callbacks">Aggregate &amp; 
Optional Requirement with callbacks</h4>
+<h4 id="aggregate-optional-requirement-with-callbacks">Aggregate &amp; 
Optional Requirement with callbacks<a class="headerlink" 
href="#aggregate-optional-requirement-with-callbacks" title="Permanent 
link">&para;</a></h4>
 <div class="codehilite"><pre><span class="nd">@Component</span>
 <span class="kd">public</span> <span class="kd">class</span> <span 
class="nc">HelloConsumer</span> <span class="o">{</span>
 
@@ -675,7 +686,7 @@ public class HelloConsumer {
 
 
 <p>In this case, you need to add the <em>'aggregate'</em> attribute and the 
<em>'optional'</em>attribute. The <code>bindHello</code> and 
<code>unbindHello</code> will be called each time a Hello service appears or 
disappears. These bind / unbind methods are not called when binding / unbinding 
a Nullable object (when both field and method are used).</p>
-<h3 id="filtered-requirement">Filtered Requirement</h3>
+<h3 id="filtered-requirement">Filtered Requirement<a class="headerlink" 
href="#filtered-requirement" title="Permanent link">&para;</a></h3>
 <p>A filtered dependency applies an LDAP filter on service provider. iPOJO 
reuses OSGi LDAP filter ability. The following metadata illustrates how to use 
filters:</p>
 <div class="codehilite"><pre><span class="nd">@Requires</span><span 
class="o">(</span><span class="n">filter</span><span class="o">=</span><span 
class="s">&quot;(language=fr)&quot;</span><span class="o">)</span>
 <span class="kd">private</span> <span class="n">String</span> <span 
class="n">DictionaryService</span> <span class="n">dict</span><span 
class="o">;</span>
@@ -730,7 +741,7 @@ public class HelloConsumer {
 
 
 <p>The component type declares a service dependency with the 'id1' id. This 
dependency has no filter by default. The first instance is just an instance of 
the FOO component type and does not modify the dependency. The second one adds 
a filter to the declared dependency to target providers with foo.property = 
BAR. The last one adds another filter to the declared dependency. By using 
instance filter customization, it is possible to create complex applications 
where you avoid binding problems by filtering dependencies instance by 
instance.</p>
-<h3 id="targeting-a-specific-provider">Targeting a specific provider</h3>
+<h3 id="targeting-a-specific-provider">Targeting a specific provider<a 
class="headerlink" href="#targeting-a-specific-provider" title="Permanent 
link">&para;</a></h3>
 <p>A service dependency can choose a specific provider. To achieve this, add a 
'from' attribute in your requirement description such as in:</p>
 <div class="codehilite"><pre><span class="nd">@Requires</span><span 
class="o">(</span><span class="n">from</span><span class="o">=</span><span 
class="s">&quot;MyHelloProvider&quot;</span><span class="o">)</span>
 <span class="kd">private</span> <span class="n">Hello</span> <span 
class="n">m_hello</span><span class="o">;</span>
@@ -770,7 +781,7 @@ public class HelloConsumer {
 
 
 <p>The FOO component type declares a service dependency with the 'id1' id. 
This dependency has no 'from' attribute by default. The first instance is just 
an instance of the FOO component type and does not modify the dependency. The 
second one adds a 'from' attribute to the declared dependency to target the 
'myprovider' provider. The last one adds another 'from' clause to the declared 
dependency.</p>
-<h2 id="managing-resilience-to-dynamism-binding-policies">Managing resilience 
to dynamism - Binding Policies</h2>
+<h2 id="managing-resilience-to-dynamism-binding-policies">Managing resilience 
to dynamism - Binding Policies<a class="headerlink" 
href="#managing-resilience-to-dynamism-binding-policies" title="Permanent 
link">&para;</a></h2>
 <p>Three binding policies are supported inside iPOJO.</p>
 <ul>
 <li>Dynamic policy (default): the binding are managed dynamically. At each 
injection, the same provider is injected if the provider is always available. 
Else a new one is chosen. For aggregate dependency, the array order does not 
change; new providers are placed at the end of the array.</li>
@@ -810,7 +821,7 @@ public class HelloConsumer {
 </pre></div>
 
 
-<h2 id="optional-scalar-dependencies-no-service-actions">Optional Scalar 
Dependencies - No Service actions</h2>
+<h2 id="optional-scalar-dependencies-no-service-actions">Optional Scalar 
Dependencies - No Service actions<a class="headerlink" 
href="#optional-scalar-dependencies-no-service-actions" title="Permanent 
link">&para;</a></h2>
 <p>When using optional dependencies a special case needs to be handled for 
field and contructor injection: what happen when there are no service providers 
available. By default, iPOJO uses <code>nullable</code> objects. It has the 
advantage to not require any additional code. However, iPOJO supports other 
options:</p>
 <ul>
 <li><code>null</code> : injects <code>null</code> instead of a nullable 
object, it requires <code>null</code> check before using the inject service</li>
@@ -870,7 +881,7 @@ public class HelloConsumer {
 </pre></div>
 
 
-<h2 id="wait-for-service-the-timeout-option">Wait for service : the timeout 
option</h2>
+<h2 id="wait-for-service-the-timeout-option">Wait for service : the timeout 
option<a class="headerlink" href="#wait-for-service-the-timeout-option" 
title="Permanent link">&para;</a></h2>
 <p>For scalar optional dependencies injected inside fields or constructors, 
you may want to wait for a service to arrive before injecting a <em>stub</em> 
(<code>nullable</code>, <code>null</code>, <code>default-implementation</code> 
or <code>exception</code>). The <code>timeout</code> attribute let you specify 
the amount of time (in milliseconds) to wait. If there are still no services 
available when the timeout is reached, then the no service action is 
applied.</p>
 <p>In the following example, the <code>AuthenticationService</code> is 
essential, but also may be subjected to updates. When the service is not there, 
you don't want to fail immediately, but give it a chance to re-appear 
<em>soon</em>:</p>
 <div class="codehilite"><pre><span class="nd">@Requires</span><span 
class="o">(</span><span class="n">optional</span><span class="o">=</span><span 
class="kc">true</span><span class="o">,</span> <span 
class="n">exception</span><span class="o">=</span><span 
class="n">UpdateInProgessException</span><span class="o">.</span><span 
class="na">class</span><span class="o">,</span> <span 
class="n">timeout</span><span class="o">=</span><span 
class="mi">1000</span><span class="o">)</span>
@@ -878,7 +889,7 @@ public class HelloConsumer {
 </pre></div>
 
 
-<h2 id="note-about-callbacks">Note about Callbacks</h2>
+<h2 id="note-about-callbacks">Note about Callbacks<a class="headerlink" 
href="#note-about-callbacks" title="Permanent link">&para;</a></h2>
 <p>Dependency manages two type of callback: bind and unbind. A callback with a 
type "bind" is called each type that a service provider arrives and the binding 
is necessary. According to the cardinality of the dependency it means:</p>
 <ul>
 <li>Simple dependency : at the firs binding and at each rebinding to another 
service provider</li>
@@ -886,7 +897,7 @@ public class HelloConsumer {
 </ul>
 <p>An unbind callback is called each time that a <em>used</em> service 
provider goes away. For a simple dependency this method is called each time 
that the used service provider goes away. For a multiple dependency this method 
is called each time that a service provider goes away.</p>
 <p>The method can receive in argument the service object or the service 
reference (in order to obtain service properties). The bind methods are delayed 
since a POJO object is created.</p>
-<h2 id="proxies">Proxies</h2>
+<h2 id="proxies">Proxies<a class="headerlink" href="#proxies" title="Permanent 
link">&para;</a></h2>
 <p>Since iPOJO 1.6, iPOJO injects proxy objects. Those proxies are by default 
smart proxies and are design to be lightweight:</p>
 <ul>
 <li>for scalar requirement : the service object is a proxy</li>
@@ -894,7 +905,7 @@ public class HelloConsumer {
 </ul>
 <p>The goal of the proxies is to hide the dynamism and more particularly the 
dynamism. So, you can gives a service dependency to another object, using the 
service object still supports the dynamism. For collections, you can iterate 
over the collection without managing the potential departures and arrivals of 
services. The proxy also manage that the component class and the delegate 
objects shared the same services is they are accessed in the same Thread.</p>
 <p>By default iPOJO injects proxy except for arrays. Moreover, it is possible 
to disable the proxy injection by adding <code>proxy=false</code> to the 
<code>requires</code> element (or to the <code>@Requires</code> and 
<code>@Bind</code> annotations). It is also possible to inject dynamic proxies 
(if the platform does not support dynamically generated classes). To enable 
dynamic proxies, set the system or bundle property 
<code>ipojo.proxy.type</code> to <code>dynamic-proxy</code>. You can also 
disable completely the proxy injection by setting the system property 
<code>ipojo.proxy</code> to <code>disabled</code>.</p>
-<h2 id="note-on-service-interface-discovery">Note on service interface 
discovery</h2>
+<h2 id="note-on-service-interface-discovery">Note on service interface 
discovery<a class="headerlink" href="#note-on-service-interface-discovery" 
title="Permanent link">&para;</a></h2>
 <p>The <code>specification</code> attribute is generally optional except when 
iPOJO cannot discover the type of the service. iPOJO cannot deduce the servce 
specification when the dependency has no field and callbacks do not receive the 
service object in parameters. In this case, you must the service specification 
(i.e. interface).</p>
         </div>
     </div>
@@ -910,7 +921,7 @@ public class HelloConsumer {
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1531515 by clement on Sat, 12 Oct 2013 08:32:37 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/temporal-service-dependency.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/temporal-service-dependency.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/temporal-service-dependency.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="the-temporal-dependency-handler">The temporal dependency 
handler</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="the-temporal-dependency-handler">The temporal dependency handler<a 
class="headerlink" href="#the-temporal-dependency-handler" title="Permanent 
link">&para;</a></h1>
 <p><em>Regular service dependencies participate to the instance lifecycle. 
Moreover, the injected service object is either available or not available. A 
temporal dependency handler is a little different and provides a different 
resolution pattern. Indeed, the temporal dependency does not invalidate the 
instance. Moreover, if not available, the temporal dependency waits (and so 
blocks the current thread) for a provider. Of course, the maximum waiting time 
can be specified. If a timeout occurs, the handler throws a Runtime 
Exception.</em></p>
 <div class="toc">
 <ul>
@@ -185,7 +196,7 @@
 </li>
 </ul>
 </div>
-<h2 id="using-the-handler">Using the handler</h2>
+<h2 id="using-the-handler">Using the handler<a class="headerlink" 
href="#using-the-handler" title="Permanent link">&para;</a></h2>
 <p>First of all, you need to configure the component type to use the handler 
such as:</p>
 <div class="codehilite"><pre><span class="nt">&lt;iPOJO</span> <span 
class="na">xmlns:temporal=</span><span 
class="s">&quot;org.apache.felix.ipojo.handler.temporal&quot;</span><span 
class="nt">&gt;</span>
 <span class="nt">&lt;component</span>
@@ -215,7 +226,7 @@ Using the field in your code will try to
 </pre></div>
 
 
-<h2 id="configuration">Configuration</h2>
+<h2 id="configuration">Configuration<a class="headerlink" 
href="#configuration" title="Permanent link">&para;</a></h2>
 <p>The handler has only one mandatory attributes:</p>
 <ul>
 <li>Field: the implementation field supporting the dependency (not needed with 
annotations)</li>
@@ -226,7 +237,7 @@ Using the field in your code will try to
 <li>OnTimeout: specifies the action to do when the timeout occurs. Four 
actions are supported: <code>null</code>, <code>nullable</code>, 
<code>empty-array</code>, <code>default-implementation</code>. By default, no 
action is specified, and an exception occurs when the timeout is reached.</li>
 </ul>
 <p>The attributes from "regular" dependencies are also supported (like 
filter).</p>
-<h2 id="ontimeout-actions">OnTimeout actions</h2>
+<h2 id="ontimeout-actions">OnTimeout actions<a class="headerlink" 
href="#ontimeout-actions" title="Permanent link">&para;</a></h2>
 <p>When a timeout occurs, you can specify what the handler must do. By 
default, it throws a runtime exception. However, four others actions can be set 
in the 'onTimeout' attribute.</p>
 <ul>
 <li>The null action (<code>onTimeout="null"</code>) will return 
<code>null</code> instead of the service object.</li>
@@ -260,7 +271,7 @@ Using the field in your code will try to
 </pre></div>
 
 
-<h2 id="collection-injection">Collection injection</h2>
+<h2 id="collection-injection">Collection injection<a class="headerlink" 
href="#collection-injection" title="Permanent link">&para;</a></h2>
 <p>Temporal dependencies can also be injected inside Collection. To achieve 
this, the 'specification' attribute must indicates the looked specification, 
and the field must be a Collection.</p>
 <div class="codehilite"><pre><span class="nt">&lt;iPOJO</span> <span 
class="na">xmlns:temporal=</span><span 
class="s">&quot;org.apache.felix.ipojo.handler.temporal&quot;</span><span 
class="nt">&gt;</span>
 <span class="nt">&lt;component</span>
@@ -287,7 +298,7 @@ Using the field in your code will try to
 </pre></div>
 
 
-<h2 id="proxy-injection">Proxy injection</h2>
+<h2 id="proxy-injection">Proxy injection<a class="headerlink" 
href="#proxy-injection" title="Permanent link">&para;</a></h2>
 <p>Temporal dependencies can also be injected as proxies. So it is possible to 
give the temporal dependency to helper object.
 On 'scalar' dependencies, the service lookup is executed during an operation 
invocation. Timeout policies are also executed is the lookup failed.
 On aggregate dependencies (necessary Collection), the service lookup is 
executed when the iterator(), and toArray(...) methods are invoked. Timeout 
policies are also executed if the lookup failed. Proxies are enabled by default 
since the 1.7.0 version.</p>
@@ -322,7 +333,7 @@ On aggregate dependencies (necessary Col
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1445489 by clement on Wed, 13 Feb 2013 07:25:24 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/white-board-pattern-handler.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/white-board-pattern-handler.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/white-board-pattern-handler.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="the-white-board-pattern-handler">The white board pattern 
handler</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="the-white-board-pattern-handler">The white board pattern handler<a 
class="headerlink" href="#the-white-board-pattern-handler" title="Permanent 
link">&para;</a></h1>
 <p>The objective of this handler is to simplify the development of white-board 
architecture. This architecture-style is based is very close to the extender 
architecture style but relies on services instead of bundles.</p>
 <div class="toc">
 <ul>
@@ -194,7 +205,7 @@
 <p>The 1.7.0 has introduced a new annotations allowing to declare several 
whiteboard patterns in the same class. The <code>@Whiteboards</code> annotation 
is not available in previous version.</p>
 </div>
 
-<h2 id="the-whiteboard-pattern">The whiteboard pattern</h2>
+<h2 id="the-whiteboard-pattern">The whiteboard pattern<a class="headerlink" 
href="#the-whiteboard-pattern" title="Permanent link">&para;</a></h2>
 <p>A whiteboard is based on two different roles:</p>
 <ul>
 <li>A consumer looking to special services or a services published with a 
special mark</li>
@@ -202,7 +213,7 @@
 </ul>
 <p>More information on this pattern is available in this <a 
href="http://www.osgi.org/wiki/uploads/Links/whiteboard.pdf";>document</a>
 Implementing a white board pattern could be complex as the extender needs to 
track these services dynamically. Indeed looked services can be highly dynamic; 
they can arrive, leave or be modified at runtime. Several services specified in 
the OSGi specification use white board pattern such as the Device Access 
Manager.</p>
-<h2 id="using-the-handler">Using the handler</h2>
+<h2 id="using-the-handler">Using the handler<a class="headerlink" 
href="#using-the-handler" title="Permanent link">&para;</a></h2>
 <p>First of all, you need to configure the component type to use the handler 
such as:</p>
 <div class="codehilite"><pre><span class="nt">&lt;ipojo</span> <span 
class="na">xmlns:wbp=</span><span 
class="s">&quot;org.apache.felix.ipojo.whiteboard&quot;</span><span 
class="nt">&gt;</span>
 <span class="nt">&lt;component</span> 
@@ -259,7 +270,7 @@ In the previous example, these methods c
 </pre></div>
 
 
-<h2 id="configuration">Configuration</h2>
+<h2 id="configuration">Configuration<a class="headerlink" 
href="#configuration" title="Permanent link">&para;</a></h2>
 <p>The handler has only three mandatory attributes:</p>
 <ul>
 <li>Filter: filter use to discover matching filter.</li>
@@ -272,7 +283,7 @@ In the previous example, these methods c
 The implementation will be notified of arrivals, modifications and departures, 
despite the instance is invalid. Indeed, the implementation must release all 
objects created from another bundle as soon it leaves.
 </div>
 
-<h2 id="configuring-the-handler-with-annotations">Configuring the handler with 
annotations</h2>
+<h2 id="configuring-the-handler-with-annotations">Configuring the handler with 
annotations<a class="headerlink" 
href="#configuring-the-handler-with-annotations" title="Permanent 
link">&para;</a></h2>
 <p>It is possible to configure the handler with a simple annotation available 
in the annotation pack ('annotation' project in the iPOJO trunk). Here is an 
example of usage:</p>
 <div class="codehilite"><pre><span class="kn">import</span> <span 
class="nn">org.apache.felix.ipojo.annotations.Component</span><span 
class="o">;</span>
 <span class="kn">import</span> <span 
class="nn">org.osgi.framework.ServiceReference</span><span class="o">;</span>
@@ -332,7 +343,7 @@ The implementation will be notified of a
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1445489 by clement on Wed, 13 Feb 2013 07:25:24 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/instance-vs-service-controller.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/instance-vs-service-controller.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/instance-vs-service-controller.html
 Tue Sep  1 06:05:17 2015
@@ -171,14 +171,25 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="instance-controller-or-service-controller">Instance 
Controller or Service Controller ?</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="instance-controller-or-service-controller">Instance Controller or 
Service Controller ?<a class="headerlink" 
href="#instance-controller-or-service-controller" title="Permanent 
link">&para;</a></h1>
 <p>When the component implementation needs to impact the instance container, 
it uses <em>controllers</em> on Boolean fields. iPOJO provides two 
controllers:</p>
 <ul>
 <li>Instance Lifecycle Controller (<code>@Controller</code>)</li>
 <li>Service Lifecycle Controller (<code>@ServiceController</code>)</li>
 </ul>
 <p>This page explains the differences between the two kinds of controllers.</p>
-<h2 id="the-instance-lifecycle-controller">The Instance Lifecycle 
Controller</h2>
+<h2 id="the-instance-lifecycle-controller">The Instance Lifecycle Controller<a 
class="headerlink" href="#the-instance-lifecycle-controller" title="Permanent 
link">&para;</a></h2>
 <p>The instance lifecycle controller impacts the instance state. Such 
controller must only be used if the instance code has detected an irremediable 
situation, where the instance cannot behave correctly.</p>
 <p>Such controller is generally used when the component code:</p>
 <ul>
@@ -210,7 +221,7 @@
 <li>the service exposed by the instance are withdrawn from the service 
registry</li>
 <li>the <code>@Invalidate</code> callback is called</li>
 </ul>
-<h2 id="the-service-lifecycle-controller">The service lifecycle controller</h2>
+<h2 id="the-service-lifecycle-controller">The service lifecycle controller<a 
class="headerlink" href="#the-service-lifecycle-controller" title="Permanent 
link">&para;</a></h2>
 <p>The service lifecycle controller impacts only the services exposed by the 
instance. It is used when the component implementation decides whether or not 
to publish the services. </p>
 <p>Unlike the instance lifecycle controller, such controller can:</p>
 <ul>
@@ -253,7 +264,7 @@
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1530198 by guillaume on Tue, 8 Oct 2013 09:18:27 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="advanced-topics">Advanced Topics</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="advanced-topics">Advanced Topics<a class="headerlink" 
href="#advanced-topics" title="Permanent link">&para;</a></h1>
 <p><em>This page presents some advanced features.</em></p>
 <ul>
 <li><a 
href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html">Combining
 iPOJO and Configuration Admin</a></li>
@@ -194,7 +205,7 @@
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1489150 by guillaume on Mon, 3 Jun 2013 20:20:03 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/combining-ipojo-and-configuration-admin.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="combining-ipojo-and-configuration-admin">Combining iPOJO 
and Configuration Admin</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="combining-ipojo-and-configuration-admin">Combining iPOJO and 
Configuration Admin<a class="headerlink" 
href="#combining-ipojo-and-configuration-admin" title="Permanent 
link">&para;</a></h1>
 <p><em>This page presents how creating, reconfiguring and destroying iPOJO 
component instance with the OSGi Configuration Admin.</em></p>
 <div class="toc">
 <ul>
@@ -190,9 +201,9 @@
 </li>
 </ul>
 </div>
-<h2 id="configuration-admin">Configuration Admin</h2>
+<h2 id="configuration-admin">Configuration Admin<a class="headerlink" 
href="#configuration-admin" title="Permanent link">&para;</a></h2>
 <p>The Configuration Admin service is a configuration manager describe in the 
OSGi R4 Compendium. It allows an operator to set the configuration information 
of deployed applications The Configuration Admin defines the Configuration as 
the process of defining the configuration data of applications and assuring 
that those applications receive that data when they are running. The 
Configuration Admin is becoming an important piece on OSGi Gateway. It is 
become the standard way to configure applications on OSGi gateways.</p>
-<h2 id="why-using-configuration-admin-with-ipojo">Why using Configuration 
Admin with iPOJO</h2>
+<h2 id="why-using-configuration-admin-with-ipojo">Why using Configuration 
Admin with iPOJO<a class="headerlink" 
href="#why-using-configuration-admin-with-ipojo" title="Permanent 
link">&para;</a></h2>
 <p>As the configuration admin offer an administration support, it seems 
reasonable to combine iPOJO and the Configuration Admin to control the gateway. 
Indeed, thanks to the configuration admin it should be possible to:
 <em> Create new component instances
 </em> Configuring / reconfiguring these instances
@@ -200,14 +211,14 @@
 </em> Reconfiguring instances by using Managed Services (not addressed in this 
page, see <a 
href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/configuration-handler.html">here</a>
 for further information)</p>
 <p>The configuration admin is persistent, so stored configuration will be 
reload it the framework restarts.
 Moreover, using the configuration admin allows avoiding describing instances 
inside iPOJO metadata file. These instances are created by inserting new 
configurations in the configuration admin.</p>
-<h2 id="combining-ipojo-and-the-configuration-admin">Combining iPOJO and the 
Configuration Admin</h2>
+<h2 id="combining-ipojo-and-the-configuration-admin">Combining iPOJO and the 
Configuration Admin<a class="headerlink" 
href="#combining-ipojo-and-the-configuration-admin" title="Permanent 
link">&para;</a></h2>
 <p>iPOJO has a component type concept. For each (public) component type, a 
<code>ManagedServiceFactory</code> is published. For each configurations 
matching with the component type from the Configuration Admin, a new component 
instance is created. Moreover, when this configuration is updated, the instance 
is dynamically reconfigured. If the configuration is removed, the instance is 
disposed.</p>
 <p>If a new Configuration is created:</p>
 <ul>
 <li>If the factory is available or an instance is create immediately,</li>
 <li>Else the factory is not available and the instance will be created as soon 
as the factory appears.</li>
 </ul>
-<h2 id="examples">Examples</h2>
+<h2 id="examples">Examples<a class="headerlink" href="#examples" 
title="Permanent link">&para;</a></h2>
 <p>This section presents 3 examples about the management of iPOJO instances 
with the configuration admin:</p>
 <ul>
 <li>A simple instantiation example and destruction</li>
@@ -221,7 +232,7 @@ Then, you can launch Felix by launching
 </pre></div>
 
 
-<h3 id="prerequisites">Prerequisites</h3>
+<h3 id="prerequisites">Prerequisites<a class="headerlink" 
href="#prerequisites" title="Permanent link">&para;</a></h3>
 <p>Let's take 4 Felix shell commands to manage configuration admin 
configurations (available in the example archive):</p>
 <ul>
 <li><code>create_conf &lt;type&gt;  &lt;property-key=property-value&gt;</code> 
allows to create a new Factory Configuration attached to the given type. The 
configuration contains the given properties.</li>
@@ -243,7 +254,7 @@ START LEVEL 1
 </pre></div>
 
 
-<h3 id="simple-instantiation">Simple Instantiation</h3>
+<h3 id="simple-instantiation">Simple Instantiation<a class="headerlink" 
href="#simple-instantiation" title="Permanent link">&para;</a></h3>
 <p>Imagine the following very simple component implementation:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">Hello1</span> <span class="o">{</span>
     <span class="kd">public</span> <span class="nf">Hello1</span><span 
class="o">()</span> <span class="o">{</span>
@@ -304,7 +315,7 @@ Instance ArchCommand -&gt; valid
 
 
 <p>So, arch does no more displayed any <em>hello</em> instances, the created 
instance was disposed.</p>
-<h3 id="reconfiguring-instances-with-the-configuration-admin">Reconfiguring 
instances with the Configuration Admin</h3>
+<h3 id="reconfiguring-instances-with-the-configuration-admin">Reconfiguring 
instances with the Configuration Admin<a class="headerlink" 
href="#reconfiguring-instances-with-the-configuration-admin" title="Permanent 
link">&para;</a></h3>
 <p>Imagine the following component implementation:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span 
class="kd">class</span> <span class="nc">Hello2</span> <span class="o">{</span>
      <span class="n">String</span> <span class="n">m_name</span><span 
class="o">;</span>
@@ -386,7 +397,7 @@ Instance org.apache.felix.ipojo.example.
 <p>you can delete all created configurations with the delete_conf all 
command</p>
 </div>
 
-<h3 id="property-propagation">Property Propagation</h3>
+<h3 id="property-propagation">Property Propagation<a class="headerlink" 
href="#property-propagation" title="Permanent link">&para;</a></h3>
 <p>It is possible to propagate the instance configuration to the published 
service properties. To activate property propagation you need to write the 
<em>'propagation'</em> attribute in the 'properties' element as in</p>
 <div class="codehilite"><pre><span class="nt">&lt;component</span> 
     <span class="na">classname=</span><span 
class="s">&quot;org.apache.felix.ipojo.example.ca.component.Hello3&quot;</span>
@@ -471,7 +482,7 @@ service.id <span class="o">=</span> 69
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1445489 by clement on Wed, 13 Feb 2013 07:25:24 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/constructing-pojo-objects-with-factory-methods.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/constructing-pojo-objects-with-factory-methods.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/constructing-pojo-objects-with-factory-methods.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="using-a-factory-method-to-create-pojo-object">Using a 
factory method to create POJO object</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="using-a-factory-method-to-create-pojo-object">Using a factory method 
to create POJO object<a class="headerlink" 
href="#using-a-factory-method-to-create-pojo-object" title="Permanent 
link">&para;</a></h1>
 <p><em>By default, iPOJO calls the POJO constructor to create objects. This 
constructor can either has no argument or receive the bundle context. However 
sometimes, you may want a more sophisticated object creation policy.</em></p>
 <p>iPOJO allows you describing a factory method called to create POJO objects 
instead of the  constructor. So, every time that iPOJO needs to create an 
instance of your POJO class, this method will be called to obtain the 
object.</p>
 <p>To use this feature you need to add the <code>factory-method</code> 
attribute in the Component element as illustrated below:</p>
@@ -216,7 +227,7 @@
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1530195 by guillaume on Tue, 8 Oct 2013 09:12:32 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/how-to-use-ipojo-factories.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/how-to-use-ipojo-factories.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/how-to-use-ipojo-factories.html
 Tue Sep  1 06:05:17 2015
@@ -171,7 +171,18 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="ipojo-factories-principles">iPOJO Factories Principles</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="ipojo-factories-principles">iPOJO Factories Principles<a 
class="headerlink" href="#ipojo-factories-principles" title="Permanent 
link">&para;</a></h1>
 <p><em>iPOJO defines a factory for each declared component type. These 
factories are used to create component instances. This document presents how to 
declare instances and configure them. The API to create, dispose and 
reconfigure instances is also explained.</em></p>
 <div class="toc">
 <ul>
@@ -194,8 +205,8 @@
 </li>
 </ul>
 </div>
-<h2 id="preliminary-concepts">Preliminary Concepts</h2>
-<h3 id="component-type">Component Type</h3>
+<h2 id="preliminary-concepts">Preliminary Concepts<a class="headerlink" 
href="#preliminary-concepts" title="Permanent link">&para;</a></h2>
+<h3 id="component-type">Component Type<a class="headerlink" 
href="#component-type" title="Permanent link">&para;</a></h3>
 <p>A component type is a kind of instance template. If we compare component 
concepts with object oriented programming, component types are classes and 
component instances are objects. A component type is declared inside a metadata 
file (generally named 'metadata.xml'). The next snippet shows you a component 
type declaration: </p>
 <div class="codehilite"><pre><span class="nt">&lt;component</span> <span 
class="na">classname=</span><span class="s">&quot;...&quot;</span> <span 
class="na">name=</span><span class="s">&quot;MyFactory&quot;</span><span 
class="nt">&gt;</span>
     ...
@@ -232,7 +243,7 @@ A factory can be public or private. A pu
 </ul>
 <p>The factory name will be used as the <code>service.pid</code> property for 
those services. The <code>service.pid</code> is unique and persists between 
framework restarts. The <code>service.pid</code> of the factory equals the 
factory name. This allows identifying factories exposed in the service registry.
 Factories are either valid or invalid. You can't create instances until a 
factory becomes valid. A factory is invalid if required handlers are missing. 
This issue occurs only if the component type uses external handlers.</p>
-<h3 id="component-instance">Component Instance</h3>
+<h3 id="component-instance">Component Instance<a class="headerlink" 
href="#component-instance" title="Permanent link">&para;</a></h3>
 <p>A component instance is an instance of a component type. For example, if a 
component type declares 'providing' and 'requiring' services, then the 
component instances will actually expose and require those services. Several 
instances can be created from one factory, but all these instances will be 
managed as different entities, and so are independent. A component instance is 
characterized by:</p>
 <ul>
 <li>a component type (the factory name)</li>
@@ -247,7 +258,7 @@ A factory can refuse the creation if the
 <li>A property required by the component type is missing inside the 
configuration</li>
 <li>A pushed property has a wrong type</li>
 </ul>
-<h2 id="how-to-declare-instances-inside-metadata-files">How-to declare 
instances inside metadata files</h2>
+<h2 id="how-to-declare-instances-inside-metadata-files">How-to declare 
instances inside metadata files<a class="headerlink" 
href="#how-to-declare-instances-inside-metadata-files" title="Permanent 
link">&para;</a></h2>
 <p>The main way to create instances is to declare those instances inside the 
iPOJO descriptor file (i.e. 'metadata.xml'). Those declarations can use either 
public factories from any bundle, or private factories from the same bundle. 
Private factories are generally used to guaranty singleton instance as 
instances can only be created inside the same bundle. </p>
 <p>When a instance declaration targets an external public factory, it will 
wait until the factory becomes available. So, the instance will be created only 
when the factory appears and is valid. If the factory disappears after the 
instance creation, the instance is disposed and will be recreated as soon as 
the factory comes back.
 The next snippet shows how to declare an instance in the metadata:</p>
@@ -317,7 +328,7 @@ Instance declaration properties can be m
 The <code>instance.name</code> and <code>factory.name</code> property should 
not be set directly. iPOJO manages those properties.
 </div>
 
-<h2 id="creating-disposing-and-reconfiguring-instances-with-the-api">Creating, 
disposing and reconfiguring instances with the API</h2>
+<h2 id="creating-disposing-and-reconfiguring-instances-with-the-api">Creating, 
disposing and reconfiguring instances with the API<a class="headerlink" 
href="#creating-disposing-and-reconfiguring-instances-with-the-api" 
title="Permanent link">&para;</a></h2>
 <p>A public factory is accessible through an exposed service (<a 
href="http://felix.apache.org/ipojo/api/1.12.1/org/apache/felix/ipojo/Factory.html";>org.apache.felix.ipojo.Factory</a>).
 This service is accessible as any other OSGi service, and could be an iPOJO 
dependency using a LDAP filter or the 'from' attribute such as in:</p>
 <div class="codehilite"><pre><span class="nt">&lt;component</span> <span 
class="na">classname=</span><span class="s">&quot;...&quot;</span><span 
class="nt">&gt;</span>
     <span class="c">&lt;!-- These two requirement descriptions are equivalent 
--&gt;</span>
@@ -327,7 +338,7 @@ The <code>instance.name</code> and <code
 </pre></div>
 
 
-<h3 id="creating-instances">Creating instances</h3>
+<h3 id="creating-instances">Creating instances<a class="headerlink" 
href="#creating-instances" title="Permanent link">&para;</a></h3>
 <p>Once you have a reference on the factory you can create instance with the 
'createComponentInstance' method.</p>
 <div class="codehilite"><pre>ComponentInstance 
createComponentInstance(java.util.Dictionary configuration)
                                           throws UnacceptableConfiguration,
@@ -363,13 +374,13 @@ The next snippet shows an example of ins
 </pre></div>
 
 
-<h3 id="disposing-created-instance">Disposing created instance</h3>
+<h3 id="disposing-created-instance">Disposing created instance<a 
class="headerlink" href="#disposing-created-instance" title="Permanent 
link">&para;</a></h3>
 <p>You can only disposed instances that you created. To dispose an instance, 
just call the 'dispose' method on the ComponentInstance object (returned by the 
createComponentInstance method).</p>
 <div class="codehilite"><pre><span class="n">instance</span><span 
class="o">.</span><span class="na">dispose</span><span class="o">();</span>
 </pre></div>
 
 
-<h3 id="reconfiguring-instance">Reconfiguring instance</h3>
+<h3 id="reconfiguring-instance">Reconfiguring instance<a class="headerlink" 
href="#reconfiguring-instance" title="Permanent link">&para;</a></h3>
 <p>To reconfigure an instance, call the <code>reconfigure</code> method on the 
ComponentInstance object. This method receives the new set of properties. Be 
aware that the <code>instance.name</code> property cannot be changed.</p>
 <div class="codehilite"><pre><span class="n">Properties</span> <span 
class="n">props2</span> <span class="o">=</span> <span class="k">new</span> 
<span class="n">Properties</span><span class="o">();</span>
 <span class="n">props2</span><span class="o">.</span><span 
class="na">put</span><span class="o">(</span><span 
class="s">&quot;foo&quot;</span><span class="o">,</span> <span 
class="s">&quot;abc&quot;</span><span class="o">);</span>
@@ -377,7 +388,7 @@ The next snippet shows an example of ins
 </pre></div>
 
 
-<h3 id="accessing-services-exposed-by-created-instances">Accessing services 
exposed by created instances</h3>
+<h3 id="accessing-services-exposed-by-created-instances">Accessing services 
exposed by created instances<a class="headerlink" 
href="#accessing-services-exposed-by-created-instances" title="Permanent 
link">&para;</a></h3>
 <p>You can obviously access services exposed by an instance that you create. 
 To do this just use the OSGi API and the bundle context in order to query 
service references in the service registry such as in</p>
 <div class="codehilite"><pre><span class="n">ComponentInstance</span> <span 
class="n">instance</span> <span class="o">=</span> <span class="o">...</span>
@@ -407,7 +418,7 @@ To do this just use the OSGi API and the
 
 
 <p>Take care to check the instance state before accessing the object. Indeed, 
the behavior of an invalid instance is not guaranty. The 'getPojoObject' method 
will return an already created implementation (pojo) object or create a new one 
(if none already created).</p>
-<h2 
id="how-to-use-the-managedservicefactory-to-create-disposed-and-reconfigure-instances">How
 to use the ManagedServiceFactory to create, disposed and reconfigure 
instances</h2>
+<h2 
id="how-to-use-the-managedservicefactory-to-create-disposed-and-reconfigure-instances">How
 to use the ManagedServiceFactory to create, disposed and reconfigure 
instances<a class="headerlink" 
href="#how-to-use-the-managedservicefactory-to-create-disposed-and-reconfigure-instances"
 title="Permanent link">&para;</a></h2>
 <p>The principle of the ManagedServiceFactory is the same as the iPOJO Factory 
Service. So, you can create, dispose and reconfigure instances with the 
Configuration Admin.
 For further information, read the OSGi R4.x Compendium - Configuration Admin 
chapter.</p>
 <p>Be aware that the <code>updated</code> method is used both for instance 
creation (if the given configuration is new) and to reconfigure an existing 
instance. The <code>deleted</code> method is used to dispose instances.</p>
@@ -425,7 +436,7 @@ For further information, read the OSGi R
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1530004 by clement on Mon, 7 Oct 2013 17:16:39 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>

Modified: 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-hierarchical-composition-overview.html
==============================================================================
--- 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-hierarchical-composition-overview.html
 (original)
+++ 
websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/ipojo-advanced-topics/ipojo-hierarchical-composition-overview.html
 Tue Sep  1 06:05:17 2015
@@ -171,14 +171,25 @@
 
     <div class="container">
         <div class="content">
-            <h1 id="introduction">Introduction</h1>
+            <style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+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>
+<h1 id="introduction">Introduction<a class="headerlink" href="#introduction" 
title="Permanent link">&para;</a></h1>
 <p><em>iPOJO is an extensible, service-oriented component model implemented on 
the top of the OSGi framework that aims to simplify the development of OSGi™ 
applications. iPOJO follows a POJO-based component approach using external 
metadata to describe how POJO components should be managed by the iPOJO 
runtime. Some of the standard features of iPOJO include automatic service 
dependency management, service publication, and configuration property 
injection.</em></p>
 <p>Another feature of iPOJO is component factories. As stated previously, an 
iPOJO component is described by its metadata. In iPOJO, the metadata describes 
a component type. For each component type, iPOJO registers a factory service 
that can be used to create instances of the component type described by the 
metadata.</p>
 <p>In addition to these features, iPOJO also provides a service-oriented 
composition model. iPOJO's composition model tries to merge:
 <em> Component-based composition and
 </em> Dynamic service flexibility.</p>
 <p>This document presents iPOJO's hierarchical service composition concepts 
and a simple example to illustrate them.</p>
-<h1 id="motivation">Motivation</h1>
+<h1 id="motivation">Motivation<a class="headerlink" href="#motivation" 
title="Permanent link">&para;</a></h1>
 <p>Component composition occurs in two fashions:
 <em> Horizontal composition: A provided interface from one component instance 
is bound to corresponding required interface of another component instance.
 </em> Vertical composition: Component instances are contained inside of 
another component instance.</p>
@@ -188,7 +199,7 @@
 </em> Service run-time dynamics.
 * Implementation evolution.</p>
 <p>The result is a flexible, yet easy-to-use service-oriented component 
model.</p>
-<h1 id="hierachical-service-composition">Hierachical Service Composition</h1>
+<h1 id="hierachical-service-composition">Hierachical Service Composition<a 
class="headerlink" href="#hierachical-service-composition" title="Permanent 
link">&para;</a></h1>
 <p>iPOJO essentially provides a kind of service-oriented architecture 
definition language (ADL). This service-oriented ADL allows you to define 
<em>composite</em> components. The main differences between a traditional 
component-oriented composite and an iPOJO composite is that the iPOJO 
composite's constituent entities are described in terms of abstract service 
interfaces instead of specific component types/instances and bindings are 
inferred from dependency metadata data rather than explicitly declared. This 
approach means that composite components in iPOJO are not concrete component 
implementations; rather, they are abstract implementations whose precise 
implementation selection is deferred until run time.</p>
 <p>Unlike a POJO component in iPOJO that has code associated with it, a 
composite component is completely described by its metadata. Similar to a POJO 
component, however, the metadata describes a component type for which iPOJO 
registers a factory service that can be used to create instances of the 
composite component.</p>
 <p>A composite can be thought of as a service registry or a scoping mechanism 
of the global OSGi™ service registry. Composites can contain other composite, 
creating a hierarchy of service registries. The OSGi™ service registry is the 
root composite.</p>
@@ -197,9 +208,9 @@
 </em> Require services from its parent composite.
 * Provide services to its parent composite.</p>
 <p>A service contained in a composite is a <em>sub-service</em>, which is 
isomorphic to sub-components in traditional component-oriented composites. A 
sub-service is a service instance created from a component factory. 
Sub-services are not visible outside of the composite and can only see other 
services that reside in the composite service registry. The set of services in 
the composite service registry are all sub-services as well as all required 
services. Sub-services are not aware of the fact that they are inside of a 
composite and provide and use services normally within their composite.</p>
-<h1 id="hello-world-composite">"Hello World" Composite</h1>
+<h1 id="hello-world-composite">"Hello World" Composite<a class="headerlink" 
href="#hello-world-composite" title="Permanent link">&para;</a></h1>
 <p>This section describes a simple composite example that requires an 
aggregated set of services from the parent composite, contains 3 sub-services, 
and provides one service to the parent composite.</p>
-<h2 id="the-killer-application">The "Killer" Application</h2>
+<h2 id="the-killer-application">The "Killer" Application<a class="headerlink" 
href="#the-killer-application" title="Permanent link">&para;</a></h2>
 <p>To illustrate composite we design a "Hello World" application named 
<em>HelloComposition</em>. This composite offers a service for dispatching a 
"Hello" message to each person listed in a Directory service. Each person is 
published as a service and is used by the composition to get the name of the 
person in order to write the message.!compo1.jpg|align=center!
 The composite provides the HelloDispatcher service:</p>
 <div class="codehilite"><pre><span class="n">public</span> <span 
class="n">interface</span> <span class="n">HelloDispatcher</span> <span 
class="p">{</span>
@@ -211,7 +222,7 @@ The composite provides the HelloDispatch
 
 
 <p>The next section describes the abstract composite implementation.</p>
-<h2 id="composite-design">Composite Design</h2>
+<h2 id="composite-design">Composite Design<a class="headerlink" 
href="#composite-design" title="Permanent link">&para;</a></h2>
 <p>To implement this composite, we reuse existing service implementations;we 
have three off-the-shelf services:
 <em> Hello service: Returns a "Hello" message in a particular language.
 </em> Directory service: Aggregates Person services.
@@ -250,7 +261,7 @@ The following code snippet shows the Hel
 
 
 <p>These services define the overall abstract implementation of the 
composite.</p>
-<h2 id="composite-description">Composite Description</h2>
+<h2 id="composite-description">Composite Description<a class="headerlink" 
href="#composite-description" title="Permanent link">&para;</a></h2>
 <p>To describe our composite, we use the iPOJO service-oriented ADL:</p>
 <div class="codehilite"><pre><span class="nt">&lt;composite</span> <span 
class="na">name=</span><span class="s">&quot;HelloComposition&quot;</span><span 
class="nt">&gt;</span>
     <span class="nt">&lt;requires</span> <span 
class="na">specification=</span><span 
class="s">&quot;org.apache.felix.ipojo.composition.ex1.person.Person&quot;</span>
 <span class="na">aggregate=</span><span class="s">&quot;true&quot;</span><span 
class="nt">/&gt;</span>
@@ -268,7 +279,7 @@ The following code snippet shows the Hel
 * A provided HelloDispatcher service to the parent composite.</p>
 <p>When this composite is instantiated, all Person services from the parent 
composite are made available in the composite service registry and instances of 
the Hello, Dispatcher, and Directory are created from available factory 
services and their corresponding services are published in the composite 
service registry. The provided HelloDispatcher service is based on method 
delagation to sub-service specifications as depicted in the following 
image:!compo3.jpg|align=center!
 The delegation of HelloDispatcher service methods to sub-service methods is 
automatically performed by iPOJO based on method name and method parameter 
matching.</p>
-<h3 id="composite-description-future-work">Composite Description Future 
Work</h3>
+<h3 id="composite-description-future-work">Composite Description Future Work<a 
class="headerlink" href="#composite-description-future-work" title="Permanent 
link">&para;</a></h3>
 <p>The composite description presented here does not entirely conform to the 
ideal model proposed in the earlier sections of this document. Specifically, 
while the composite is defined in terms of services, the composition as 
described only really makes sense if we were aware of implementation-specific 
dependencies of the eventual Dispatcher component type. In other words, for us 
to choose the Hello and Directory sub-services, we had to know that the 
eventual implementation of the Dispatcher sub-service would have dependencies 
on these other sub-services. Unfortunately, this violates the goal of iPOJO to 
define composites purely in terms of abstract services.</p>
 <p>The main reason for this limitation is that OSGi service specifications are 
comprised of only two parts:
 1. A human-readable document.
@@ -280,13 +291,13 @@ The delegation of HelloDispatcher servic
 </em> Implementation-level dependencies: Dependencies that are arbitrarily 
selected by the component developer for a specific component implementation and 
whose purpose is unknown.</p>
 <p>As part of the ongoing work of iPOJO, specification-level dependencies (as 
well as other service specification improvements) will be introduced to the 
iPOJO model to further refine its service-oriented component model. Using the 
current example as an illustration, the current approach under investigation 
for specification-level dependencies looks like this:</p>
 <p><a href="">Coming soon...</a></p>
-<h2 id="packaging">Packaging</h2>
+<h2 id="packaging">Packaging<a class="headerlink" href="#packaging" 
title="Permanent link">&para;</a></h2>
 <p>A composite component type is described in the metadata.xml file of an 
iPOJO bundle which means that iPOJO creates a factory service for the 
composite, like all iPOJO components. Also like all iPOJO components, it is 
possible to create an instance of the composite in the metadata file by 
declaring an instance, such as:</p>
 <div class="codehilite"><pre><span class="o">&lt;</span><span 
class="n">instance</span> <span class="n">component</span><span 
class="p">=</span>&quot;<span class="n">HelloComposition</span>&quot; <span 
class="n">name</span><span class="p">=</span>&quot;<span 
class="n">hello</span><span class="o">-</span><span 
class="n">composition</span>&quot;<span class="o">/&gt;</span>
 </pre></div>
 
 
-<h2 id="run-time">Run Time</h2>
+<h2 id="run-time">Run Time<a class="headerlink" href="#run-time" 
title="Permanent link">&para;</a></h2>
 <p>Imagine at run time you have:
 <em> Two factories that can create Hello service provider instances.
 </em> A factory that can create Dispatcher service provider instances.
@@ -299,9 +310,9 @@ The delegation of HelloDispatcher servic
 <p>If the factory which creates the Hello provider disappears (i.e., its 
instances become invalid), the composite will automatically switch to the 
second one to validate the composite service. If the second Hello provider 
disappears too, then the composite will be invalidated (i.e., the provided 
service will be revoked) and it will wait for new factory providing Hello 
service instances, which may themselves also be composite implementations.</p>
 <p>When a Person service appears in the parent composite, it is automatically 
inserted into the composite. Likewise, if a Person service disappears from the 
parent composite, it is automatically removed from the composite.</p>
 <p>A <a 
href="http://clement.plop-plop.net/animations/composite/composite.htm";>flash 
demo</a> of this composition is available.</p>
-<h1 id="composite-concepts-and-features">Composite Concepts and Features</h1>
+<h1 id="composite-concepts-and-features">Composite Concepts and Features<a 
class="headerlink" href="#composite-concepts-and-features" title="Permanent 
link">&para;</a></h1>
 <p>The following subsections define the various concepts and features of 
iPOJO's composite components.</p>
-<h2 id="service-requirement">Service Requirement</h2>
+<h2 id="service-requirement">Service Requirement<a class="headerlink" 
href="#service-requirement" title="Permanent link">&para;</a></h2>
 <p>The composite can require services from the parent composite. Each 
requirement is describe by an <code>&lt;requires&gt;</code> element in the 
composite description. An imported service must specify the target service 
specification. Additionally, required sub-services can specify:
 <em> Cardinality: Indicates whether a single provider instance is imported or 
an aggregated set of the available providers instances is imported.
 </em> Optionality: Indicates whether the imported sub-service is optional or 
mandatory.
@@ -311,7 +322,7 @@ The delegation of HelloDispatcher servic
 </pre></div>
 
 
-<h2 id="service-provisioning">Service Provisioning</h2>
+<h2 id="service-provisioning">Service Provisioning<a class="headerlink" 
href="#service-provisioning" title="Permanent link">&para;</a></h2>
 <p>The composite can provide services to its parent composite. Each provided 
service is described by a <code>&lt;provides&gt;</code> element in the 
composite description. A provide service must specify provided service 
specification.</p>
 <p>Service provision is realized by delegating method invocations on the 
service interface to methods on the sub-service instances contained in the 
composition. A delegation mapping is automatically created by matching method 
names and arguments types. If a delegation mapping cannot be determined, the 
composition is invalidated.</p>
 <p>Service specifications can also declare certain methods as optional in the 
service interface; this is done by declaring that a method throws an 
<code>UnsupportedOperationException</code>. Optional methods need not have a 
mapping for delegation purposes. If a non-optional service method does not have 
a mapping for delegation, then a warning message is issued.</p>
@@ -319,7 +330,7 @@ The delegation of HelloDispatcher servic
 </pre></div>
 
 
-<h2 id="sub-service-instantiation">Sub-Service Instantiation</h2>
+<h2 id="sub-service-instantiation">Sub-Service Instantiation<a 
class="headerlink" href="#sub-service-instantiation" title="Permanent 
link">&para;</a></h2>
 <p>A composite can contain sub-services, which result in private service 
instances at run time. The composite will track factories able to create 
targeted specification providers. The created service instances are accessible 
only inside the composite. Sub-service instances may also be composites. Each 
sub-service to instantiate is represented in the composite description by a 
<code>&lt;service&gt;</code> element. The sub-services must specify the desired 
service specification for the sub-service. Additionally, the sub-service may 
specify:
 <em> Cardinality: Indicates whether a single provider instance is created or 
an aggregated set of the available provider instances is imported.
 </em> Optionality: Indicates whether the created sub-service instance is 
optional or mandatory.
@@ -333,7 +344,7 @@ The delegation of HelloDispatcher servic
 </pre></div>
 
 
-<h2 id="instance-injection">Instance injection</h2>
+<h2 id="instance-injection">Instance injection<a class="headerlink" 
href="#instance-injection" title="Permanent link">&para;</a></h2>
 <p>A composite can contain instances. These instances does not need to provide 
any service and are identified by their component types. The composite will 
track the corresponding factories and create the instances. The instances are 
accessible only inside the composite and their service requirements are 
resolved inside the composite too. Each instance to instantiate is represented 
in the composite description by a <code>&lt;instance&gt;</code> element. The 
instance can specify the desired configuration. The following code snippet will 
inject an instance of the Hello factory with the configuration : 
language=en.</p>
 <div class="codehilite"><pre><span class="nt">&lt;composite</span> <span 
class="na">name=</span><span class="s">&quot;composite.bar &quot;</span><span 
class="nt">&gt;</span>
     <span class="nt">&lt;instance</span> <span 
class="na">component=</span><span class="s">&quot;Hello&quot;</span><span 
class="nt">&gt;</span>
@@ -355,7 +366,7 @@ The delegation of HelloDispatcher servic
 
 
 <p><em>Note:</em> To use instances as glue code be sure that your bundle, 
containing your composite, imports the implementation of the component type. 
Moreover, the factory allowing to create the instance must be available when 
starting your bundle to compute correctly the delegation mapping.</p>
-<h2 id="architecture">Architecture</h2>
+<h2 id="architecture">Architecture<a class="headerlink" href="#architecture" 
title="Permanent link">&para;</a></h2>
 <p>iPOJO composites can expose their internal architecture for reflection. 
This can be useful, for example, when debugging to understand why a given 
composite is currently invalid, such as when a given import cannot be 
satisfied. For a composite to expose its internal architecture, it must set the 
architecture flag, such as:</p>
 <div class="codehilite"><pre><span class="nt">&lt;composite</span> <span 
class="na">name=</span><span class="s">&quot;composite.bar &quot;</span> <span 
class="na">architecture=</span><span class="s">&quot;true&quot;</span><span 
class="nt">&gt;</span>
     <span class="nt">&lt;service</span> <span 
class="na">specification=</span><span 
class="s">&quot;org.apache.felix.ipojo.test.scenarios.service.Hello&quot;</span><span
 class="nt">&gt;</span>
@@ -366,7 +377,7 @@ The delegation of HelloDispatcher servic
 
 
 <p>With this flag set, iPOJO publishes an architecture service for the 
composite. The architecture of the composite can be examined using the "arch" 
shell command for Felix.</p>
-<h2 id="composition-model-extensibility">Composition Model Extensibility</h2>
+<h2 id="composition-model-extensibility">Composition Model Extensibility<a 
class="headerlink" href="#composition-model-extensibility" title="Permanent 
link">&para;</a></h2>
 <p>Like the rest of iPOJO, the composition model is extensible. The composite 
container is composed of a "composite handler", which is a special handler 
designed to support composite components. More documentation to come on this 
feature.</p>
         </div>
     </div>
@@ -382,7 +393,7 @@ The delegation of HelloDispatcher servic
                 may be trademarks or registered trademarks of their respective 
owners.
                 </div>
                 <div class="timestamp span3 offset2">
-                Rev. 1441864 by fmeschbe on Sun, 3 Feb 2013 06:44:40 +0000
+                Rev. 1700393 by cziegeler on Tue, 1 Sep 2015 06:04:06 +0000
                 </div>
             </div>
         </footer>


Reply via email to