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 2013/02/07 16:34:14 UTC

svn commit: r849770 [1/3] - in /websites/staging/felix/trunk/content: ./ documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/

Author: buildbot
Date: Thu Feb  7 15:34:14 2013
New Revision: 849770

Log:
Staging update by buildbot for felix

Added:
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app1.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app2.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app3.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app4.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app5.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app6.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/design.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ss-comp.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/vendor.png   (with props)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/wsdl.png   (with props)
Modified:
    websites/staging/felix/trunk/content/   (props changed)
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-advanced-tutorial.html
    websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/ipojo-composition-tutorial.html

Propchange: websites/staging/felix/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Feb  7 15:34:14 2013
@@ -1 +1 @@
-1443382
+1443557

Modified: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html (original)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/apache-felix-ipojo-dosgi.html Thu Feb  7 15:34:14 2013
@@ -153,27 +153,40 @@
         <div class="content">
             <h1 id="using-distributed-services-with-ipojo">Using Distributed Services with iPOJO</h1>
 <p><em>Distributed Service defines how to deal with remote services in OSGi. This page describes the CXF Distributed OSGi with iPOJO demo.This demo uses iPOJO to create a remote OSGi service from an iPOJO component. The consumer side also uses iPOJO to create a component that consumes the remote OSGi service. By using iPOJO, you don't need to write code to interact with the OSGi Service Registry at all. That's all handled through injection, which hugely simplifies the code. Moreover thanks to iPOJO's advanced features such as property propagation, the service is exported without any impact on its implementation.</em></p>
-<p>In this demo, you will show how to use iPOJO:
-<em> to expose a service 
-</em> to propagate properties to make the service remotely accessible
-* to use a "remote" service</p>
+<p>In this demo, you will show how to use iPOJO:</p>
+<ul>
+<li>to expose a service </li>
+<li>to propagate properties to make the service remotely accessible</li>
+<li>to use a "remote" service</li>
+</ul>
 <p>This demo can be used with any DOSGi distribution, in this document the single-bundle distribution (1.1) is used with iPOJO 1.6.0 and Felix (2.0.5)</p>
-<p>{div:class=toc}
-[TOC]
-{div}</p>
+<div class="toc">
+<ul>
+<li><a href="#using-distributed-services-with-ipojo">Using Distributed Services with iPOJO</a><ul>
+<li><a href="#demo-design">Demo design</a></li>
+<li><a href="#sources">Sources</a></li>
+<li><a href="#the-adder-service-implementation">The Adder Service Implementation</a></li>
+<li><a href="#the-adder-service-consumer">The Adder Service Consumer</a></li>
+<li><a href="#conclusion">Conclusion</a></li>
+</ul>
+</li>
+</ul>
+</div>
 <h2 id="demo-design">Demo design</h2>
-<p>This demo is quite similar to the DS demo of DOSGi demo in structure. It consists of 5 bundles:
-<em> An interface bundle defining the Adder Service interface. 
-</em> This bundle is deployed on both sides.
-<em> An Adder Service implementation bundle. (The service will be exported)
-</em> An Adder Service importer bundle containing the remote-service file explaining to DOSGi how to import and from where to import the Adder service.
-* An Adder Service consumer bundle.</p>
-<p>!design.png!</p>
+<p>This demo is quite similar to the DS demo of DOSGi demo in structure. It consists of 5 bundles:</p>
+<ul>
+<li>An interface bundle defining the Adder Service interface. </li>
+<li>This bundle is deployed on both sides.</li>
+<li>An Adder Service implementation bundle. (The service will be exported)</li>
+<li>An Adder Service importer bundle containing the remote-service file explaining to DOSGi how to import and from where to import the Adder service.</li>
+<li>An Adder Service consumer bundle.</li>
+</ul>
+<p><img src="design.png"></p>
 <p>The service implementation and consumer bundle are built using iPOJO.
 The Adder Service interface is as follows:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">interface</span> <span class="n">AdderService</span> <span class="p">{</span>
-    <span class="nb">int</span> <span class="n">add</span><span class="p">(</span><span class="nb">int</span> <span class="n">a</span><span class="p">,</span><span class="nb">int</span> <span class="n">b</span><span class="p">);</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">interface</span> <span class="nc">AdderService</span> <span class="o">{</span>
+    <span class="kt">int</span> <span class="nf">add</span><span class="o">(</span><span class="kt">int</span> <span class="n">a</span><span class="o">,</span><span class="kt">int</span> <span class="n">b</span><span class="o">);</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -190,31 +203,36 @@ The Adder Service interface is as follow
 </pre></div>
 
 
-<p>So let's install the server side in Felix. Launch Felix from the <code>felix</code> directory with:
-{div:class=shell}
-java -jar bin/felix.jar server
-{div}</p>
-<p>Once the shell prompt appears, execute the following command in the shell:
-{div:class=shell}
-start file:../AdderServiceInterface/target/AdderServiceInterface-0.0.1-SNAPSHOT.jar
+<p>So let's install the server side in Felix. Launch Felix from the <code>felix</code> directory with:</p>
+<div class="codehilite"><pre>java -jar bin/felix.jar server
+</pre></div>
+
+
+<p>Once the shell prompt appears, execute the following command in the shell:</p>
+<div class="codehilite"><pre>start file:../AdderServiceInterface/target/AdderServiceInterface-0.0.1-SNAPSHOT.jar
 start file:../AdderServiceProvider/target/AdderServiceProvider-0.0.1-SNAPSHOT.jar
-{div}</p>
+</pre></div>
+
+
 <p>At this point, the service should be available remotely (wait until the console stops printing stuff), you can check this by obtaining the WSDL: <a href="http://localhost:9090/adder?wsdl">http://localhost:9090/adder?wsdl</a></p>
-<p>!wsdl.png|width=600px!</p>
+<p><img src="wsdl.png" width="600px"></p>
 <h2 id="the-adder-service-consumer">The Adder Service Consumer</h2>
-<p>The service consumer is also created using iPOJO. Thanks to DOSGi, iPOJO can inject the service as any regular OSGi service. So, the code is pretty simple:
-{code:java}
-@Component
-public class AdderConsumer {</p>
-<p>@Requires
-  private AdderService adder;</p>
-<p>public AdderConsumer() {
-    System.out.println("Using adder service: 1 + 1 = "+ adder.add(1, 1));
- }
-}</p>
-<div class="codehilite"><pre><span class="n">This</span> <span class="n">implementation</span> <span class="k">use</span> <span class="n">iPOJO</span> <span class="n">field</span> <span class="n">injection</span> <span class="n">to</span> <span class="n">receive</span> <span class="n">the</span> <span class="n">AdderService</span><span class="o">.</span> <span class="n">Then</span><span class="p">,</span> <span class="n">it</span> <span class="n">uses</span> <span class="n">it</span> <span class="n">as</span> <span class="n">a</span> <span class="n">regular</span> <span class="n">field</span><span class="o">.</span> <span class="n">This</span> <span class="n">bundle</span> <span class="n">also</span> <span class="n">contains</span> <span class="n">a</span> <span class="p">[</span><span class="n">metadata</span><span class="o">.</span><span class="n">xml</span><span class="o">|</span><span class="n">http:</span><span class="sr">//s</span><span class="n">vn</span><span class="
 o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">org</span><span class="sr">/repos/</span><span class="n">asf</span><span class="sr">/felix/s</span><span class="n">andbox</span><span class="sr">/clement/i</span><span class="n">pojo</span><span class="o">-</span><span class="n">tutorials</span><span class="sr">/dosgi/</span><span class="n">AdderServiceConsumer</span><span class="sr">/src/m</span><span class="n">ain</span><span class="sr">/resources/m</span><span class="n">etadata</span><span class="o">.</span><span class="n">xml</span><span class="p">]</span> <span class="n">file</span> <span class="n">declaring</span> <span class="n">an</span> <span class="n">instance</span> <span class="n">of</span> <span class="n">this</span> <span class="n">type</span> <span class="n">without</span> <span class="n">any</span> <span class="n">special</span> <span class="n">configuration:</span>
-<span class="p">{</span><span class="n">code:xml</span><span class="p">}</span>
-<span class="o">&lt;</span><span class="n">instance</span> <span class="n">component</span><span class="o">=</span><span class="s">&quot;org.apache.felix.ipojo.remote.consumer.AdderConsumer&quot;</span><span class="o">/&gt;</span>
+<p>The service consumer is also created using iPOJO. Thanks to DOSGi, iPOJO can inject the service as any regular OSGi service. So, the code is pretty simple:</p>
+<div class="codehilite"><pre><span class="nd">@Component</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">AdderConsumer</span> <span class="o">{</span>
+
+  <span class="nd">@Requires</span>
+  <span class="kd">private</span> <span class="n">AdderService</span> <span class="n">adder</span><span class="o">;</span>
+
+  <span class="kd">public</span> <span class="nf">AdderConsumer</span><span class="o">()</span> <span class="o">{</span>
+    <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;Using adder service: 1 + 1 = &quot;</span><span class="o">+</span> <span class="n">adder</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">));</span>
+ <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<p>This implementation use iPOJO field injection to receive the AdderService. Then, it uses it as a regular field. This bundle also contains a [metadata.xml|http://svn.apache.org/repos/asf/felix/sandbox/clement/ipojo-tutorials/dosgi/AdderServiceConsumer/src/main/resources/metadata.xml] file declaring an instance of this type without any special configuration:</p>
+<div class="codehilite"><pre><span class="nt">&lt;instance</span> <span class="na">component=</span><span class="s">&quot;org.apache.felix.ipojo.remote.consumer.AdderConsumer&quot;</span><span class="nt">/&gt;</span>
 </pre></div>
 
 
@@ -230,26 +248,30 @@ public class AdderConsumer {</p>
 </pre></div>
 
 
-<p>Now, let's start another instance of Felix:
-{div:class=shell}
-java -jar bin/felix.jar client
-{div}
-Then, execute the following command in the shell:
-{div:class=shell}
-start file:../AdderServiceInterface/target/AdderServiceInterface-0.0.1-SNAPSHOT.jar
+<p>Now, let's start another instance of Felix:</p>
+<div class="codehilite"><pre>java -jar bin/felix.jar client
+</pre></div>
+
+
+<p>Then, execute the following command in the shell:</p>
+<div class="codehilite"><pre>start file:../AdderServiceInterface/target/AdderServiceInterface-0.0.1-SNAPSHOT.jar
 start file:../AdderServiceConsumer/target/AdderServiceConsumer-0.0.1-SNAPSHOT.jar
-start file:../AdderServiceImporter/target/AdderServiceImporter-0.0.1-SNAPSHOT.jar</p>
-<p>... log messages may appear, after a little while the following message appears:
-Using adder service: 1 + 1 = 2
-{div}</p>
+start file:../AdderServiceImporter/target/AdderServiceImporter-0.0.1-SNAPSHOT.jar
+
+... log messages may appear, after a little <span class="k">while </span>the following message appears:
+
+Using adder service: 1 + <span class="nv">1</span> <span class="o">=</span> 2
+</pre></div>
+
+
 <p>The remote adder service has now been invoked. You will see the following line on the server side window:</p>
-<div class="codehilite"><pre><span class="n">Adder</span> <span class="n">service</span> <span class="n">invoked:</span> <span class="mi">1</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">=</span> <span class="mi">2</span>
+<div class="codehilite"><pre>Adder service invoked: 1 + <span class="nv">1</span> <span class="o">=</span> 2
 </pre></div>
 
 
 <p>That's it !</p>
 <h2 id="conclusion">Conclusion</h2>
-<p>This tutorial has illustrated how to easily create remote services and consume them with iPOJO. Subscribe to the Felix users mailing list by sending a message to <a href="">mailto:users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to [mailto:users@felix.apache.org].</p>
+<p>This tutorial has illustrated how to easily create remote services and consume them with iPOJO. Subscribe to the Felix users mailing list by sending a message to <a href="mailto:users-subscribe@felix.apache.org">users-subscribe@felix.apache.org</a>; after subscribing, email questions or feedback to <a href="mailto:users@felix.apache.org">users@felix.apache.org</a>.</p>
         </div>
     </div>
 
@@ -264,7 +286,7 @@ Using adder service: 1 + 1 = 2
                 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. 1443557 by clement on Thu, 7 Feb 2013 15:34:03 +0000
                 </div>
             </div>
         </footer>           

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app1.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app1.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app2.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app2.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app3.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app3.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app4.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app4.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app5.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app5.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app6.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/app6.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/design.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/design.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html
==============================================================================
--- websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html (added)
+++ websites/staging/felix/trunk/content/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-gettingstarted/how-to-use-ipojo-annotations.html Thu Feb  7 15:34:14 2013
@@ -0,0 +1,538 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<head>
+    <title>Apache Felix - How to use iPOJO Annotations</title>
+    <link rel="icon" href="/res/favicon.ico">
+    
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="The most powerful component model for OSGi">
+
+    
+    <link href="/ipojo/web/bootstrap/css/bootstrap-cerulean.css" rel="stylesheet">
+    <link href="/ipojo/web/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
+    <link href="/ipojo/web/bootstrap/css/font-awesome.min.css" rel="stylesheet">
+    <link href="/ipojo/web/style.css" rel="stylesheet">
+
+
+    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
+    <script src="/ipojo/web/bootstrap/js/bootstrap.min.js"></script>
+    
+</head>
+
+<body data-spy="scroll" data-target=".subnav">
+    <div class="navbar navbar-fixed-top navbar-inverse">
+        <div class="navbar-inner">
+            <div class="container">
+               <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+                 <span class="icon-bar"></span>
+                 <span class="icon-bar"></span>
+                 <span class="icon-bar"></span>
+                </a>
+                <a class="brand" href="#">Apache Felix iPOJO</a>
+         
+                 <div class="nav-collapse" id="main-menu">
+                    <ul class="nav" id="main-menu-left">
+                        <li><a href="/documentation/subprojects/apache-felix-ipojo/ipojo-news.html">News</a></li>
+                        <li><a href="http://felix.apache.org/downloads.cgi">Downloads</a></li>
+                    
+                        <li class="dropdown">
+                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials <b class="caret"></b></a>
+                            <ul class="dropdown-menu" id="tutorials-menu">
+                                <li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-why-choose-ipojo.html">Why choose iPOJO</a></li>
+                                <li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-successstories.html">Success stories</a></li>
+                                <li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-feature-overview.html">Features</a></li>
+                                <li class="divider"></li>
+                                <li><a href="">iPOJO in 10 minutes</a></li>
+                                <li><a href="">Using Annotations</a></li>
+                                <li><a href="">Maven tutorial</a></li>
+                                <li><a href="">Advanced tutorial</a></li>
+                                <li><a href="">Using Distributed OSGi</a></li>
+                                <li><a href="">Application Composition</a></li>
+                            </ul>
+                        </li>
+
+                        <li class="dropdown">
+                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Documentation <b class="caret"></b></a>
+                            <ul class="dropdown-menu" id="user-guide-menu">
+                                <li><a href="">Requiring a service</a></li>
+                                <li><a href="">Providing a service</a></li>
+                                <li><a href="">Lifecycle management</a></li>
+                                <li><a href="">Configuration</a></li>
+                                <li><a href="">Introspection</a></li>
+                                <li><a href="">Impacting the lifecycle</a></li>
+                                <li class="divider"></li>
+                                <li class="dropdown-submenu">
+                                    <a tabindex="-1" href="#">External <em>handlers</em></a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="">Asynchronous communication</a></li>
+                                        <li><a href="">JMX management</a></li>
+                                        <li><a href="">Extender pattern</a></li>
+                                        <li><a href="">Whiteboard pattern</a></li>
+                                        <li><a href="">Temporal dependencies</a></li>
+                                    </ul>
+                                </li>                                            
+                                <li class="divider"></li>
+                                <li class="dropdown-submenu">
+                                    <a tabindex="-1" href="#">Advanced topics</a>
+                                    <ul class="dropdown-menu">
+                                        <li><a href="">iPOJO and config admin</a></li>
+                                        <li><a href="">Factories and Instances</a></li>
+                                        <li><a href="">XML Schemas</a></li>
+                                        <li><a href="">API</a></li>
+                                        <li><a href="">Testing components</a></li>
+                                        <li><a href="">Eclipse Integration</a></li>
+                                        <li><a href="">FAQ</a></li>
+                                        <li><a href="">Reference Card</a></li>
+                                        <li class="divider"></li>
+                                        <li><a href="">Handler development</a></li>
+                                        <li><a href="">Manipulation Metadata </a></li>
+                                        <li><a href="">Dive into the iPOJO Manipulation depths</a></li>
+                                    </ul>
+                                </li>
+                            </ul>
+                        </li>
+
+                        <li class="dropdown" id="tools-menu">
+                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Tools <b class="caret"></b></a>
+                            <ul class="dropdown-menu" id="swatch-menu">
+                                <li><a href="">Ant Task</a></li>
+                                <li><a href="">Eclipse Plugin</a></li>
+                                <li><a href="">Maven Plugin</a></li>
+                                <li><a href="">`arch` shell command</a></li>
+                                <li><a href="">Online Manipulator</a></li>
+                                <li><a href="">Webconsole plugin</a></li>
+                            </ul>
+                        </li>
+
+                        <li class="dropdown" id="community-menu">
+                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Community <b class="caret"></b></a>
+                            <ul class="dropdown-menu" id="swatch-menu">
+                                <li><a href="">Support</a></li>
+                                <li><a href="http://www.apache.org/">ASF</a></li>
+                                <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+                                <li><a href="http://www.apache.org/foundation/thanks.html">Sponsors</a></li>
+                            </ul>
+                        </li>
+
+                        <li class="dropdown" id="misc-menu">
+                            <a class="dropdown-toggle" data-toggle="dropdown" href="#">Misc <b class="caret"></b></a>
+                            <ul class="dropdown-menu" id="swatch-menu">
+                                <li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedvms.html">Supported JVMs</a></li>
+                                <li><a href="/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-supportedosgi.html">Supported OSGi Implementations</a></li>
+                                <li><a href="">Article & Presentations</a></li>
+                            </ul>
+                        </li>
+                    </ul>
+                    <ul class="nav pull-right" id="main-menu-right">
+                        <li><a rel="tooltip" target="_blank" href="http://felix.apache.org">Apache Felix <i class="icon-share-alt"></i></a></li>
+                    </ul>
+                </div>
+            </div>
+        </div>    
+    </div>
+
+    <div class="container">
+        <div class="content">
+            <h1 id="how-to-use-ipojo-annotations">How to use iPOJO annotations</h1>
+<p><em>You can use annotations to define your component types. This page presents supported annotations.</em></p>
+<div class="toc">
+<ul>
+<li><a href="#how-to-use-ipojo-annotations">How to use iPOJO annotations</a><ul>
+<li><a href="#getting-ipojo-annotations">Getting iPOJO Annotations:</a><ul>
+<li><a href="#in-eclipse">In Eclipse</a></li>
+<li><a href="#in-maven">In Maven</a></li>
+<li><a href="#in-ant">In Ant</a></li>
+</ul>
+</li>
+<li><a href="#an-example-of-usage">An example of usage</a><ul>
+<li><a href="#hello-service-provider">Hello Service Provider</a></li>
+<li><a href="#hello-service-consumer">Hello Service Consumer</a></li>
+</ul>
+</li>
+<li><a href="#defined-annotations">Defined Annotations</a><ul>
+<li><a href="#component">@Component</a></li>
+<li><a href="#provides">@Provides</a></li>
+<li><a href="#requires">@Requires</a></li>
+<li><a href="#serviceproperty">@ServiceProperty</a></li>
+<li><a href="#servicecontroller">@ServiceController</a></li>
+<li><a href="#property">@Property</a></li>
+<li><a href="#updated">@Updated</a></li>
+<li><a href="#bind">@Bind</a></li>
+<li><a href="#unbind">@Unbind</a></li>
+<li><a href="#modified">@Modified</a></li>
+<li><a href="#validate">@Validate</a></li>
+<li><a href="#invalidate">@Invalidate</a></li>
+<li><a href="#postregistration">@PostRegistration</a></li>
+<li><a href="#postunregistration">@PostUnregistration</a></li>
+<li><a href="#instantiate">@Instantiate</a></li>
+<li><a href="#temporal-dependencies-external-handler">Temporal Dependencies (external handler)</a></li>
+<li><a href="#exposing-instances-as-a-jmx-mbean-external-handler">Exposing instances as a JMX MBean (external handler)</a></li>
+</ul>
+</li>
+<li><a href="#advanced-topics-and-faq">Advanced topics and FAQ</a><ul>
+<li><a href="#metadata-file-and-annotation-merge">Metadata file and annotation merge</a></li>
+<li><a href="#instance-creation">Instance creation</a></li>
+<li><a href="#using-custom-annotations">Using Custom Annotations</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<h2 id="getting-ipojo-annotations">Getting iPOJO Annotations:</h2>
+<p>iPOJO Annotations are defines inside the org.apache.felix.ipojo.annotations project. You can download the Jar file of this project from the <a href="/documentation/subprojects/apache-felix-ipojo/download.html">download</a> page. Sources are available on the [Felix trunk|http://felix.apache.org/site/sourcecode.html].
+Once added to your class path / build path / dependencies, you can use the annotations as normal annotations. These annotations are automatically processed by the iPOJO manipulator.</p>
+<h3 id="in-eclipse">In Eclipse</h3>
+<p>Add the org.apache.felix.ipojo.annotations jar file in your build path. Do not forget to use a Java compiler accepting annotations (1.5 or higher).</p>
+<h3 id="in-maven">In Maven</h3>
+<p>Add the following dependency:</p>
+<div class="codehilite"><pre><span class="nt">&lt;dependency&gt;</span>
+      <span class="nt">&lt;groupId&gt;</span>org.apache.felix<span class="nt">&lt;/groupId&gt;</span>
+      <span class="nt">&lt;artifactId&gt;</span>org.apache.felix.ipojo.annotations<span class="nt">&lt;/artifactId&gt;</span>
+      <span class="nt">&lt;version&gt;</span>1.8.0<span class="nt">&lt;/version&gt;</span>
+<span class="nt">&lt;/dependency&gt;</span>
+</pre></div>
+
+
+<p>Moreover, you need to set that the source code and the target code are Java 1.5 code. To achieve this, just add the following plugin in your plugins section:</p>
+<div class="codehilite"><pre><span class="nt">&lt;plugin&gt;</span>
+  <span class="nt">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="nt">&lt;/groupId&gt;</span>
+    <span class="nt">&lt;artifactId&gt;</span>maven-compiler-plugin<span class="nt">&lt;/artifactId&gt;</span>
+    <span class="nt">&lt;configuration&gt;</span>
+      <span class="nt">&lt;source&gt;</span>1.5<span class="nt">&lt;/source&gt;</span>
+      <span class="nt">&lt;target&gt;</span>1.5<span class="nt">&lt;/target&gt;</span>
+    <span class="nt">&lt;/configuration&gt;</span>
+<span class="nt">&lt;/plugin&gt;</span>
+</pre></div>
+
+
+<h3 id="in-ant">In Ant</h3>
+<p>Just add the org.apache.felix.ipojo.annotations jar file  in your class path.</p>
+<h2 id="an-example-of-usage">An example of usage</h2>
+<p>To illustrate annotations usage, let taking the tutorial example. In this tutorial, there are two components:
+<em> The first one provides the hello service
+</em> The second one uses the provided hello service
+You can download the archive containing the examples and a preconfigured version of Felix <a href="http://people.apache.org/~clement/ipojo/tutorials/annotations/annotation-tutorial.zip">here</a>.</p>
+<h3 id="hello-service-provider">Hello Service Provider</h3>
+<p>The provider uses two annotations. The "component" annotation is mandatory and defines that the class defines a component type. Then the "provides" annotation just declare that the defined component type provides a service.</p>
+<div class="codehilite"><pre><span class="kn">package</span> <span class="n">ipojo</span><span class="o">.</span><span class="na">example</span><span class="o">.</span><span class="na">hello</span><span class="o">.</span><span class="na">impl</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">ipojo.example.hello.Hello</span><span class="o">;</span>
+
+<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.apache.felix.ipojo.annotations.Provides</span><span class="o">;</span>
+
+<span class="cm">/**</span>
+<span class="cm">  * Component implementing the Hello service.</span>
+<span class="cm"> **/</span>
+<span class="nd">@Component</span>
+<span class="nd">@Provides</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloImpl</span> <span class="kd">implements</span> <span class="n">Hello</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="n">String</span> <span class="nf">sayHello</span><span class="o">(</span><span class="n">String</span> <span class="n">name</span><span class="o">)</span> <span class="o">{</span> 
+     <span class="k">return</span> <span class="s">&quot;hello &quot;</span> <span class="o">+</span> <span class="n">name</span><span class="o">;</span> 
+    <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h3 id="hello-service-consumer">Hello Service Consumer</h3>
+<p>The Hello Service Consumer use more annotations. First it used the component annotation. To defines its "immediate" behavior, it add the 'immediate' attribute.
+Then, it uses the requires annotation to define a service dependency. Finally, it uses the validate and invalidate annotations to define lifecycle callbacks.</p>
+<div class="codehilite"><pre><span class="kn">package</span> <span class="n">ipojo</span><span class="o">.</span><span class="na">example</span><span class="o">.</span><span class="na">hello</span><span class="o">.</span><span class="na">client</span><span class="o">;</span>
+
+<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.apache.felix.ipojo.annotations.Invalidate</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.felix.ipojo.annotations.Requires</span><span class="o">;</span>
+<span class="kn">import</span> <span class="nn">org.apache.felix.ipojo.annotations.Validate</span><span class="o">;</span>
+
+<span class="kn">import</span> <span class="nn">ipojo.example.hello.Hello</span><span class="o">;</span>
+
+<span class="nd">@Component</span><span class="o">(</span><span class="n">name</span><span class="o">=</span><span class="s">&quot;AnnotedHelloClient&quot;</span><span class="o">,</span> <span class="n">immediate</span><span class="o">=</span><span class="kc">true</span><span class="o">)</span>
+<span class="kd">public</span> <span class="kd">class</span> <span class="nc">HelloClient</span> <span class="kd">implements</span> <span class="n">Runnable</span> <span class="o">{</span>
+
+<span class="nd">@Requires</span>
+<span class="kd">private</span> <span class="n">Hello</span><span class="o">[]</span> <span class="n">m_hello</span><span class="o">;</span> <span class="c1">// Service Dependency</span>
+
+<span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="kt">int</span> <span class="n">DELAY</span><span class="o">=</span><span class="mi">10000</span><span class="o">;</span>
+<span class="kd">private</span> <span class="kt">boolean</span> <span class="n">end</span><span class="o">;</span>
+
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">run</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">while</span> <span class="o">(!</span><span class="n">end</span><span class="o">)</span> <span class="o">{</span>
+               <span class="k">try</span> <span class="o">{</span>
+        <span class="n">invoke</span><span class="o">();</span>
+                <span class="n">Thread</span><span class="o">.</span><span class="na">sleep</span><span class="o">(</span><span class="n">DELAY</span><span class="o">);</span>
+              <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">InterruptedException</span> <span class="n">ie</span><span class="o">)</span> <span class="o">{</span> <span class="o">}</span>
+              <span class="cm">/* will recheck end */</span>
+     <span class="o">}</span>
+<span class="o">}</span>
+
+<span class="kd">public</span> <span class="kt">void</span> <span class="nf">invoke</span><span class="o">()</span> <span class="o">{</span>
+    <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">m_hello</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span> 
+          <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">m_hello</span><span class="o">[</span><span class="n">i</span><span class="o">].</span>
+             <span class="n">sayHello</span><span class="o">(</span><span class="s">&quot;Clement&quot;</span><span class="o">));</span> 
+        <span class="o">}</span>
+<span class="o">}</span>
+
+ <span class="nd">@Validate</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">starting</span><span class="o">()</span> <span class="o">{</span>    
+    <span class="n">Thread</span> <span class="n">T</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Thread</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>     
+    <span class="n">end</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>     
+    <span class="n">T</span><span class="o">.</span><span class="na">start</span><span class="o">();</span> 
+ <span class="o">}</span>
+
+ <span class="nd">@Invalidate</span>
+ <span class="kd">public</span> <span class="kt">void</span> <span class="nf">stopping</span><span class="o">()</span> <span class="o">{</span>    
+     <span class="n">end</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span> 
+ <span class="o">}</span>
+<span class="o">}</span>
+</pre></div>
+
+
+<h2 id="defined-annotations">Defined Annotations</h2>
+<p>This section lists defined annotations and how to use them.</p>
+<h3 id="component">@Component</h3>
+<p><em>Goal:</em> Defines a component type
+<em>Target:</em> The component implementation class
+<em>Attributes:</em></p>
+<ul>
+<li>name : defines the component type name (optional, default = the class name)</li>
+<li>immediate: defines the component type as immediate (optional, default = "false")</li>
+<li>architecture: enable the architecture exposition (optional, default = "false")</li>
+<li>propagation: enable configuration property propagation (on provided services) (optional, default = "false")</li>
+<li>managedservice : set the Managed Service PID. (optional, default = no PID (i.e. the managed service will not be exposed)). </li>
+<li>factoryMethod : set the factory-method. The specified method must be a static method and  return a pojo object.(optional,  default = iPOJO uses the 'regular' constructor). </li>
+<li>publicFactory : set if the component type is public. (optional, default = true). </li>
+</ul>
+<h3 id="provides">@Provides</h3>
+<p><em>Goal:</em> Defines that the component type provide services
+<em>Target:</em> The component implementation class
+<em>Attributes:</em></p>
+<ul>
+<li>specifications: defines the provided interface (optional, default = all implemented interfaces)</li>
+<li>strategy : the service object creation strategy. Possible values : SINGLETON, SERVICE, METHOD, INSTANCE or the strategy class name. With SINGLETON there is only one POJO per component instance, SERVICE means OSGi Service factory,  METHOD delegates the creation to the factory-method of the component, INSTANCE creates one service object per requiring instance. For other strategies, specify the qualified name of the CreationStrategy class. (optional, default =  SINGLETON) </li>
+<li>properties : array containing <code>@StaticServiceProperties</code> defining service properties not attached to fields.</li>
+</ul>
+<div class="alert alert-warning">
+    <strong>OSGi Service Factory</strong>
+    <br/>
+  The <tt>SERVICE</tt> strategy refers to the OSGi service factory. So, one service object per asking bundle will be created.
+</div>
+
+<h3 id="requires">@Requires</h3>
+<p><em>Goal:</em> Defines a service dependency
+<em>Target:</em> Field
+<em>Attributes:</em></p>
+<ul>
+<li>Filter: defines the LDAP filter (optional)</li>
+<li>Optional: defines if the dependency is optional (optional, default = "false")</li>
+<li>Id: defines the dependency Id (useful to identify bind &amp; unbind methods) (optional, default = field name) (if a dependency with the same id is already created (by a @bind or @unbind annotation), it merges the dependencies).</li>
+<li>Nullable: enable or disable the Null Object injection when the dependency is optional and no providers are available (optional, default = "true")</li>
+<li>Defaultimplementation: set the Default-Implmentation (optional, by default iPOJO uses a Null object)</li>
+<li>Policy: defines the binding policy (accepted value : dynamic, static, dynamic-priority) (optional, default = "dynamic")</li>
+<li>Comparator: defines the comparator to use to sort service references (optional, default = OSGi Service Reference Comparator)</li>
+<li>From : defines the specific provider to use</li>
+<li>Specification : the required service specification. This attribute is required for Collection field. (optional, default = annotated field type). </li>
+<li>Proxy : enables / disables the proxy injection (enabled by default)</li>
+</ul>
+<h3 id="serviceproperty">@ServiceProperty</h3>
+<p><em>Goal:</em> Defines a service property
+<em>Target:</em> Field
+<em>Attributes:</em></p>
+<ul>
+<li>name: property name (optional, default=field name</li>
+<li>value: property value (optional, default=no value)</li>
+<li>mandatory : is the property mandatory? (optional, default=false)</li>
+</ul>
+<div class="alert alert-warning">
+        <strong>Mandatory property</strong>
+     <br/>
+A mandatory property must receive a value either from the component type description (<tt>value</tt> attribute), or the instance configuration.
+</div>
+
+<h3 id="servicecontroller">@ServiceController</h3>
+<p><em>Goal:</em> Control the service exposition
+<em>Target:</em> Field (Boolean)
+<em>Attributes:</em></p>
+<ul>
+<li>value : the default value. If set to false, it disables the initial exposition</li>
+<li>specification : set the target of the controller, must be an exposed service interface. By default, the controller targets all services.</li>
+</ul>
+<h3 id="property">@Property</h3>
+<p><em>Goal:</em> Defines a property
+<em>Target:</em> Field or Method
+<em>Attributes:</em></p>
+<ul>
+<li>name: property name (optional, default=field name computed by removing "set" from the method name (for instance setFoo(String ff) will get the Foo name))</li>
+<li>value: property value (optional, default=no value)</li>
+<li>mandatory : is the property mandatory? (optional, default=false)</li>
+</ul>
+<div class="alert alert-warning">
+  <strong>Field and Method</strong>
+    <br/>
+  If another property with the same name is defined the method or the field is added to the existing property.
+</div>
+
+<h3 id="updated">@Updated</h3>
+<p><em>Goal:</em> Defines method called when a reconfiguration is completed.
+<em>Target:</em> a method (receiving a dictionary in argument)</p>
+<h3 id="bind">@Bind</h3>
+<p><em>Goal:</em> Defines a bind method
+<em>Target:</em> Method
+<em>Attributes:</em></p>
+<ul>
+<li>Id: Dependency Id, if the id is already defines in a "@requires " or "@unbind" annotation, it adds this method as a bind method of the already created dependency. (optional, default= no id, compute an id if the method name begin by "bind" (for instance "bindFoo" will have the "Foo" id))</li>
+<li>Specification : required dependency (optional)</li>
+<li>Aggregate : is the dependency an aggregate dependency (optional, default= "false")</li>
+<li>Optional: is the dependency an optional dependency (optional, default= "false")</li>
+<li>Filter: dependency LDAP filter (optional)</li>
+<li>Policy: defines the binding policy (accepted value : dynamic, static, dynamic-priority) (optional, default = "dynamic")</li>
+<li>Comparator: defines the comparator to use to sort service references (optional, default = OSGi Service Reference Comparator)</li>
+<li>From : defines the specific provider to use</li>
+</ul>
+<h3 id="unbind">@Unbind</h3>
+<p><em>Goal:</em> Defines an unbind method
+<em>Target:</em> Method
+<em>Attributes:</em></p>
+<ul>
+<li>Id: Dependency Id, if the id is already defines in a "@requires" or "@bind" annotation, it adds this method as an unbind method of the already created dependency. (optional, default= no id, compute an id if the method name begin by "unbind" (for instance "unbindFoo" will have the "Foo" id))</li>
+<li>Specification : required dependency (optional)</li>
+<li>Aggregate : is the dependency an aggregate dependency (optional, default= "false")</li>
+<li>Optional: is the dependency an optional dependency (optional, default= "false")</li>
+<li>Filter: dependency LDAP filter (optional)</li>
+<li>Policy: defines the binding policy (accepted value : dynamic, static, dynamic-priority) (optional, default = "dynamic")</li>
+<li>Comparator: defines the comparator to use to sort service references (optional, default = OSGi Service Reference Comparator)</li>
+<li>From : defines the specific provider to use</li>
+</ul>
+<h3 id="modified">@Modified</h3>
+<p><em>Goal:</em> Defines an <code>modified</code> method, called when a bound service is udpated.
+<em>Target:</em> Method
+<em>Attributes:</em></p>
+<ul>
+<li>Id: Dependency Id, if the id is already defines in a "@requires" or "@bind" annotation, it adds this method as an unbind method of the already created dependency. (optional, default= no id, compute an id if the method name begin by "unbind" (for instance "unbindFoo" will have the "Foo" id))</li>
+<li>Specification : required dependency (optional)</li>
+<li>Aggregate : is the dependency an aggregate dependency (optional, default= "false")</li>
+<li>Optional: is the dependency an optional dependency (optional, default= "false")</li>
+<li>Filter: dependency LDAP filter (optional)</li>
+<li>Policy: defines the binding policy (accepted value : dynamic, static, dynamic-priority) (optional, default = "dynamic")</li>
+<li>Comparator: defines the comparator to use to sort service references (optional, default = OSGi Service Reference Comparator)</li>
+<li>From : defines the specific provider to use</li>
+</ul>
+<h3 id="validate">@Validate</h3>
+<p><em>Goal:</em> defines a validate lifecycle callback
+<em>Target:</em> method</p>
+<h3 id="invalidate">@Invalidate</h3>
+<p><em>Goal:</em> defines a validate lifecycle callback
+<em>Target:</em> method</p>
+<h3 id="postregistration">@PostRegistration</h3>
+<p><em>Goal:</em> defines a callback invoked after service registration. The callback must have the following signature : <code>public void name(ServiceReference ref)</code>
+<em>Target:</em> method</p>
+<h3 id="postunregistration">@PostUnregistration</h3>
+<p><em>Goal:</em> defines a callback invoked after service unregistration. The callback must have the following signature : <code>public void name(ServiceReference ref)</code>
+<em>Target:</em> method</p>
+<h3 id="instantiate">@Instantiate</h3>
+<p><em>Goal:</em> declare a simple instance (this is equivalent to <code>&lt;instance component="..."&gt;&lt;/instance&gt;</code>
+<em>Target:</em> class
+<em>Attribute:</em></p>
+<ul>
+<li>name: the instance name (optional)</li>
+</ul>
+<h3 id="temporal-dependencies-external-handler">Temporal Dependencies (external handler)</h3>
+<p>The temporal dependency handler is an external handler. However, it can be used with an annotation defined in the iPOJO annotations jar file. 
+The annotation is <code>org.apache.felix.ipojo.handler.temporal.Requires</code> and targets a field. 
+<em>Attributes:</em></p>
+<ul>
+<li>filter : specify the dependency filter</li>
+<li>timeout : specify the dependency timeout (optional)</li>
+<li>onTimeout : specify the onTimeout action (null, nullable, empty-array, default-implementation (specify the class name in this case) (optional).</li>
+<li>specification : the required service specification. This attribute is required for Collection field. (optional, default = annotated field type). </li>
+<li>proxy :  Inject a proxy instead of the real object. This allows passing this reference to collaborators. (Default = false) </li>
+</ul>
+<h3 id="exposing-instances-as-a-jmx-mbean-external-handler">Exposing instances as a JMX MBean (external handler)</h3>
+<p>The JMX Handler allows exposing an instance as a JMX MBean. To configure the JMX handler directly from your code, three annotations are provided. They are in the <code>org.apache.felix.ipojo.handlers.jmx</code> package</p>
+<p>The <code>@org.apache.felix.ipojo.handlers.jmx.Config</code> (<code>@Config</code> if the package it correctly imported) annotation is a type annotation (so placed on the <code>class</code> element. This annotation indicates that the instance will be exposed as an MBean. This annotation supports:</p>
+<ul>
+<li>usesMOSGi: set to <code>true</code> to use MOSGi. Otherwise, the MBean will be exposed in the MBean Platform Server (default: <code>false</code>).</li>
+<li>objectname: set the MBean objectname. The objectname must follow JMX specification. (default: <code>package-name:factory-name:instance-name</code>)</li>
+<li>domain: set the MBean domain. (default: <code>package-name</code>)</li>
+<li>name: set the MBean name. (default: <code>instance-name</code>).</li>
+</ul>
+<p>The <code>@org.apache.felix.ipojo.handlers.jmx.Property</code> (<code>@Property</code>) annotation is a field annotation indicating that the field is exposed in the MBean. The supported attributes are:</p>
+<ul>
+<li>name: set the property name</li>
+<li>rights: set the access permission. Possible values are <code>r</code> (read only) and <code>w</code> (read and write). By default, properties are in read-only mode.</li>
+<li>notification: enables notification on this property. By default notifications are disabled.</li>
+</ul>
+<p>The <code>@org.apache.felix.ipojo.handlers.jmx.Method</code> (<code>@Method</code>) annotation is a method annotation indicating that the method is exposed in the MBean. Only one attribute can be customized:</p>
+<ul>
+<li>description: set the method description.</li>
+</ul>
+<h2 id="advanced-topics-and-faq">Advanced topics and FAQ</h2>
+<h3 id="metadata-file-and-annotation-merge">Metadata file and annotation merge</h3>
+<p>It is possible to defines component type both in the metadata file (in XML) and by using annotation. However, if a component type defined by using annotations has the same name than a type define in the XML file, the XML descriptor override the annotation defined type. However, a warning message is launched during the manipulation.</p>
+<h3 id="instance-creation">Instance creation</h3>
+<p>The @Instantiate annotation allows creating an instance, but this declaration is limited:</p>
+<ul>
+<li>it does not support configuration</li>
+<li>it does not allow naming</li>
+<li>the instance is created in the global scope (so no composition)</li>
+</ul>
+<p>To define instances, you should use the XML descriptor. Instance can refer to annotated types by referring to their names.</p>
+<div class="codehilite"><pre><span class="nt">&lt;instance</span> <span class="na">component=</span><span class="s">&quot;ipojo.example.hello.impl.HelloImpl&quot;</span><span class="nt">/&gt;</span>
+<span class="nt">&lt;instance</span> <span class="na">component=</span><span class="s">&quot;AnnotedHelloClient&quot;</span><span class="nt">/&gt;</span>
+</pre></div>
+
+
+<h3 id="using-custom-annotations">Using Custom Annotations</h3>
+<p>External handlers can provides their own annotations. Using these annotations just requires to add them to your build path. To external handlers annotations, please refer to the external handler documentation.</p>
+        </div>
+    </div>
+
+    <hr/>
+
+    <div class="container">
+        <footer id="footer">
+            <div class="row">
+                <div class="trademarkFooter span7"> 
+                Apache Felix, Felix, Apache, the Apache feather logo, and the Apache Felix project
+                logo are trademarks of The Apache Software Foundation. All other marks mentioned
+                may be trademarks or registered trademarks of their respective owners.
+                </div>
+                <div class="timestamp span3 offset2">
+                Rev. 1443557 by clement on Thu, 7 Feb 2013 15:34:03 +0000
+                </div>
+            </div>
+        </footer>           
+    </div>
+</body>
+
+<script type="text/javascript">
+    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+
+<script type="text/javascript">
+    try{
+        var pageTracker = _gat._getTracker("UA-1518442-4");
+        pageTracker._trackPageview();
+    } catch(err) {}
+</script>
+
+</html>