You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2008/10/13 09:33:07 UTC

svn commit: r703957 [5/7] - in /felix/trunk/ipojo: ./ annotations/doc/ annotations/doc/media.data/ ant/doc/ ant/doc/media.data/ arch/doc/ arch/doc/media.data/ composite/doc/ core/doc/ core/doc/lifecycle-callback-handler.data/ core/doc/media.data/ core/...

Modified: felix/trunk/ipojo/core/doc/service-requirement-handler.html
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/service-requirement-handler.html?rev=703957&r1=703956&r2=703957&view=diff
==============================================================================
--- felix/trunk/ipojo/core/doc/service-requirement-handler.html (original)
+++ felix/trunk/ipojo/core/doc/service-requirement-handler.html Mon Oct 13 00:33:03 2008
@@ -2,31 +2,31 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <HTML>
   
- 
+<!-- Mirrored Site: felix.apache.org. File: /site/service-requirement-handler.html. Date: Mon, 13 Oct 2008 06:53:05 GMT -->
 <HEAD>
     <TITLE>Apache Felix - Service Requirement Handler</TITLE>
-    <LINK rel="stylesheet" href="http://felix.apache.org/site/media.data/site.css" type="text/css" media="all">
+    <LINK rel="stylesheet" href="media.data/site.css" type="text/css" media="all">
     <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
   </HEAD>
   <BODY>
-    <DIV class="title"><DIV class="logo"><A href="http://felix.apache.org/site/index.html"><IMG border="0" alt="Apache Felix" src="http://felix.apache.org/site/media.data/logo.png"></A></DIV><DIV class="header"><A href="http://www.apache.org/"><IMG border="0" alt="Apache" src="http://felix.apache.org/site/media.data/apache.png"></A></DIV></DIV>
+    <DIV class="title"><DIV class="logo"><A href="index.html"><IMG border="0" alt="Apache Felix" src="media.data/logo.png"></A></DIV><DIV class="header"><A href="http://www.apache.org/"><IMG border="0" alt="Apache" src="media.data/apache.png"></A></DIV></DIV>
     <DIV class="menu">
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                                <UL>
-	<LI><A href="http://felix.apache.org/site/news.html" title="news">news</A></LI>
-	<LI><A href="http://felix.apache.org/site/license.html" title="license">license</A></LI>
-	<LI><SPAN class="nobr"><A href="http://felix.apache.org/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">downloads<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><A href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</A></LI>
-	<LI><A href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</A></LI>
-	<LI><A href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</A></LI>
-	<LI><SPAN class="nobr"><A href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN>
+	<LI><A href="news.html" title="news">news</A></LI>
+	<LI><A href="license.html" title="license">license</A></LI>
+	<LI><SPAN class="nobr"><A href="downloads.html" title="Visit page outside Confluence" rel="nofollow">downloads<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="documentation.html" title="documentation">documentation</A></LI>
+	<LI><A href="mailinglists.html" title="mailinglists">mailing lists</A></LI>
+	<LI><A href="contributing.html" title="Contributing">contributing</A></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN>
 <!-- ApacheCon Ad -->
 <IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
 <P style="height: 100px">
 <!-- ApacheCon Ad --></LI>
 </UL>
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </DIV>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                </DIV>
     <DIV class="main">
 <TABLE class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><TBODY><TR>
 <TD class="confluenceTd" valign="top" width="80%">
@@ -45,6 +45,7 @@
 	<LI>Mandatory / Optional : a component can declare an      optional dependency</LI>
 	<LI>Filtered : a component can filter available      providers</LI>
 	<LI>Dynamic / Static / Dynamic-Priority : the      component can specify the binding policy</LI>
+	<LI>Specific : the dependency targets a specific service provider</LI>
 </UL>
 
 
@@ -63,8 +64,8 @@
 
 <P>The handler manages two types of injections:</P>
 <UL>
-	<LI>Field injection: 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</LI>
-	<LI>Method invocation: when a service appears, or      disappears a method in the component is invoked. For each dependency, bind      and unbind methods are invoke to notify the component of the event.</LI>
+	<LI>Field injection: 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</LI>
+	<LI>Method invocation: when a service appears, or disappears a method in the component is invoked. For each dependency, bind      and unbind methods are invoke to notify the component of the event.</LI>
 </UL>
 
 
@@ -143,6 +144,7 @@
      <SPAN class="code-keyword">public</SPAN> doSomething() { <SPAN class="code-object">System</SPAN>.out.println(m_hello.getMesage()); }
 }</PRE>
 </DIV></DIV>
+
 <P>For this component, metadata could be:</P>
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
@@ -175,10 +177,13 @@
 <PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class HelloConsumer {
      <SPAN class="code-keyword">private</SPAN> Hello m_hellos[];
      <SPAN class="code-keyword">public</SPAN> doSomething() {
-             <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.length; i++) { <SPAN class="code-object">System</SPAN>.out.println(m_hellos[i].getMessage());}
+             <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.length; i++) { 
+                 <SPAN class="code-object">System</SPAN>.out.println(m_hellos[i].getMessage());
+             }
        }
 }</PRE>
 </DIV></DIV>
+
 <P>For this component, metadata could be:</P>
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
@@ -186,10 +191,45 @@
     ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
+
 <P>To declare an aggregate field for field requirement, you only need to declare an array (instead of a scalar type). IPOJO will create and inject the service object array. IPOJO discover that the dependency is aggregate during the bytecode introspection.</P>
 
 <P><EM>Note:</EM> 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>
 
+<H4><A name="ServiceRequirementHandler-AggregateDependencywithfieldinjection%3Alist%2Cvector%2Ccollectionandset%5CNewinthe0.9.0SNAPSHOTversion%5C"></A>Aggregate Dependency with field injection: list, vector, collection and set [New in the 0.9.0-SNAPSHOT version]</H4>
+<P>It is also possible to inject service objects inside fields of the type:</P>
+<UL>
+	<LI>list</LI>
+	<LI>vector</LI>
+	<LI>collection</LI>
+	<LI>set</LI>
+</UL>
+
+
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class HelloConsumer {
+     <SPAN class="code-keyword">private</SPAN> List m_hellos;
+     <SPAN class="code-keyword">public</SPAN> doSomething() {
+             <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.size(); i++) { 
+                 <SPAN class="code-object">System</SPAN>.out.println(((Hello) m_hellos.get(i)).
+                 getMessage());
+             }
+       }
+}</PRE>
+</DIV></DIV>
+<P>For this component, metadata could be:</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
+    <SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_hellos&quot;</SPAN> interface=<SPAN class="code-quote">&quot;o.a.f.i.Hello&quot;</SPAN>/&gt;</SPAN>
+    ...
+<SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
+</DIV></DIV>
+<P>In this case, just use the supported type that you want. iPOJO will automatically understand that it is an aggregate dependency, and will create the collection object containing service objects.<BR>
+<EM>Note:</EM> The service interface cannot be discovered when using these types as the bytecode does not provide enough information. So, you have to indicate the required service interface (with the 'interface' attribute) in the requirement description.<BR>
+<EM>Note:</EM> 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.<BR>
+<EM>Note:</EM> The 0.9.0-SNAPSHOT version has changed the 'interface' attribute in 'specification'. The attribute semantic don't change.</P>
+
+
 <H4><A name="ServiceRequirementHandler-AggregateDependencywithmethodinvocation"></A>Aggregate Dependency with method invocation</H4>
 
 <DIV class="code"><DIV class="codeContent">
@@ -198,7 +238,10 @@
       <SPAN class="code-keyword">private</SPAN> void bindHello(Hello h) { m_hellos.add(h); }
       <SPAN class="code-keyword">private</SPAN> void unbindHello(Hello h) { m_hellos.remove(h); }
       <SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">synchronized</SPAN> doSomething() {
-                     <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.size(); i++) { <SPAN class="code-object">System</SPAN>.out.println(m_hellos.get(i).getMessage());}
+                  <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.size(); i++) { 
+                    <SPAN class="code-object">System</SPAN>.out.println(m_hellos.get(i).
+                    getMessage());
+                  }
                 }
         }
 }</PRE>
@@ -222,7 +265,9 @@
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class HelloConsumer {
          <SPAN class="code-keyword">private</SPAN> Hello m_hello;
-         <SPAN class="code-keyword">public</SPAN> doSomething() {  <SPAN class="code-object">System</SPAN>.out.println(m_hello.getMesage());  }
+         <SPAN class="code-keyword">public</SPAN> doSomething() {  
+            <SPAN class="code-object">System</SPAN>.out.println(m_hello.getMesage());  
+         }
 }</PRE>
 </DIV></DIV>
 <P>For this component, metadata could be:</P>
@@ -232,7 +277,7 @@
     ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
-<P>To declare an optional requirement, you need to add the <EM>'optional'</EM> attribute. To avoid null pointer exception, iPOJO injects a <EM>Nullable</EM> 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 default-implementation 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="#ServiceRequirementHandler-nullable" title="nullable on Service Requirement Handler">refer to the note about nullable object</A>.</P>
+<P>To declare an optional requirement, you need to add the <EM>'optional'</EM> attribute. To avoid null pointer exception, iPOJO injects a <EM>Nullable</EM> 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 default-implementation 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="#ServiceRequirementHandler-nullable" title="nullable on Service Requirement Handler">refer to the note about nullable object</A>.</P>
 
 <H4><A name="ServiceRequirementHandler-OptionalDependencywithmethodinvocation"></A>Optional Dependency with method invocation</H4>
 
@@ -241,7 +286,11 @@
      <SPAN class="code-keyword">private</SPAN> Hello m_hello;
      <SPAN class="code-keyword">public</SPAN> void bindHello(Hello h) { m_hello = h; }
      <SPAN class="code-keyword">public</SPAN> void unbindHello() { m_hello = <SPAN class="code-keyword">null</SPAN>; }
-     <SPAN class="code-keyword">public</SPAN> doSomething() { <SPAN class="code-keyword">if</SPAN>(m_hello != <SPAN class="code-keyword">null</SPAN>) { <SPAN class="code-object">System</SPAN>.out.println(m_hello.getMesage()); } }
+     <SPAN class="code-keyword">public</SPAN> doSomething() { 
+          <SPAN class="code-keyword">if</SPAN>(m_hello != <SPAN class="code-keyword">null</SPAN>) { 
+              <SPAN class="code-object">System</SPAN>.out.println(m_hello.getMesage()); 
+          }
+    }
 }</PRE>
 </DIV></DIV>
 <P>For this component, metadata should be:</P>
@@ -266,7 +315,9 @@
 <PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class HelloConsumer {
      <SPAN class="code-keyword">private</SPAN> Hello m_hellos[];
      <SPAN class="code-keyword">public</SPAN> doSomething() {
-           <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.length; i++) { <SPAN class="code-object">System</SPAN>.out.println(m_hellos[i].getMessage());}
+           <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.length; i++) { 
+             <SPAN class="code-object">System</SPAN>.out.println(m_hellos[i].getMessage());
+           }
      }
 }</PRE>
 </DIV></DIV>
@@ -287,7 +338,9 @@
      <SPAN class="code-keyword">private</SPAN> void bindHello(Hello h) { m_hellos.add(h); }
      <SPAN class="code-keyword">private</SPAN> void unbindHello(Hello h) { m_hellos.remove(h); }
      <SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">synchronized</SPAN> doSomething() {
-               <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.size(); i++) { <SPAN class="code-object">System</SPAN>.out.println(m_hellos.get(i).getMessage());}
+               <SPAN class="code-keyword">for</SPAN>(<SPAN class="code-object">int</SPAN> I = 0; I &lt; m_hellos.size(); i++) { 
+                  <SPAN class="code-object">System</SPAN>.out.println(m_hellos.get(i).getMessage());
+               }
      }
 }</PRE>
 </DIV></DIV>
@@ -312,11 +365,13 @@
 ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
-<P>To add a filter, just add a 'filter' attribute in your dependency containing the LDAP filter. IPOJO will select only provider matching with this filter.</P>
+<P>To add a filter, just add a 'filter' attribute in your dependency containing the LDAP filter. iPOJO will select only provider matching with this filter.</P>
 
 <P>Moreover, filters can be customized instance by instance. It is possible to specialize / change / add the filter of a component in the instance description. It is useful when you want to create different instances of the same component, with different filter. To do it, you have to identify your dependency with an 'id' attribute. Then, you can adapt the filter of the dependency in the instance description by using the property &quot;requires.filters&quot;. In this property you can specify each dependency identified by its id and the new value of the filter.</P>
 <DIV class="code"><DIV class="codeContent">
-<PRE class="code-xml"><SPAN class="code-tag">&lt;component className=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.example.FilteredDependency&quot;</SPAN> name=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>&gt;</SPAN>
+<PRE class="code-xml">&lt;component 
+   className=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.example.FilteredDependency&quot;</SPAN> 
+   name=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>&gt;
 	<SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_foo&quot;</SPAN> fiter=<SPAN class="code-quote">&quot;(foo.property=FOO)&quot;</SPAN> id=<SPAN class="code-quote">&quot;id1&quot;</SPAN>&gt;</SPAN>
 		<SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;bind&quot;</SPAN> method=<SPAN class="code-quote">&quot;bind&quot;</SPAN>/&gt;</SPAN>
 		<SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;unbind&quot;</SPAN> method=<SPAN class="code-quote">&quot;unbind&quot;</SPAN>/&gt;</SPAN>
@@ -339,6 +394,49 @@
 </DIV></DIV>
 <P>The FOO 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><A name="ServiceRequirementHandler-Targetingaspecificprovider%5CNewinthe0.9.0SNAPSHOTversion%5C"></A>Targeting a specific provider [New in the 0.9.0-SNAPSHOT version]</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="code"><DIV class="codeContent">
+<PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
+<SPAN class="code-tag">&lt;requires from=<SPAN class="code-quote">&quot;MyHelloProvider&quot;</SPAN>&gt;</SPAN>
+     <SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;bind&quot;</SPAN> method=<SPAN class="code-quote">&quot;bindHello&quot;</SPAN>&gt;</SPAN>
+     <SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;unbind&quot;</SPAN> method=<SPAN class="code-quote">&quot;unbindHello&quot;</SPAN>&gt;</SPAN>
+<SPAN class="code-tag">&lt;/requires&gt;</SPAN>
+...
+<SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
+</DIV></DIV>
+<P>iPOJO maps the from attribute to a specific filter : '|(instance.name=MyHelloProvider)(service.pid=MyHelloProvider)'. Then the dependency can only be fulfilled by a service matching this filter.</P>
+
+<P>Moreover, from attributes can be customized instance by instance. It is possible to specialize / change / add a 'from' attribute of a component in the instance configuration. It is useful when you want to create different instances of the same component, with different 'from' clauses. To do it, you have to identify your dependency with an 'id' attribute. Then, you can adapt the 'from' of the dependency in the instance configuration by using the property &quot;requires.from&quot;. In this property you can specify each dependency identified by its id and the 'from' value.</P>
+
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml">&lt;component 
+   className=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.example.FilteredDependency&quot;</SPAN>
+   name=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>&gt;
+	<SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_foo&quot;</SPAN> id=<SPAN class="code-quote">&quot;id1&quot;</SPAN>&gt;</SPAN>
+		<SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;bind&quot;</SPAN> method=<SPAN class="code-quote">&quot;bind&quot;</SPAN>/&gt;</SPAN>
+		<SPAN class="code-tag">&lt;callback type=<SPAN class="code-quote">&quot;unbind&quot;</SPAN> method=<SPAN class="code-quote">&quot;unbind&quot;</SPAN>/&gt;</SPAN>
+	<SPAN class="code-tag">&lt;/requires&gt;</SPAN>
+<SPAN class="code-tag">&lt;/component&gt;</SPAN>
+
+<SPAN class="code-tag">&lt;instance name=<SPAN class="code-quote">&quot;FOO1&quot;</SPAN> component=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>/&gt;</SPAN>
+
+<SPAN class="code-tag">&lt;instance name=<SPAN class="code-quote">&quot;FOO2&quot;</SPAN> component=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>&gt;</SPAN>
+	<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;requires.from&quot;</SPAN>&gt;</SPAN>
+		<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;id1&quot;</SPAN> value=<SPAN class="code-quote">&quot;myprovider&quot;</SPAN>/&gt;</SPAN>
+	<SPAN class="code-tag">&lt;/property&gt;</SPAN>
+<SPAN class="code-tag">&lt;/instance&gt;</SPAN>
+
+<SPAN class="code-tag">&lt;instance name=<SPAN class="code-quote">&quot;FOO3&quot;</SPAN> component=<SPAN class="code-quote">&quot;FOO&quot;</SPAN>&gt;</SPAN>
+	<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;requires.from&quot;</SPAN>&gt;</SPAN>
+		<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;id1&quot;</SPAN> value=<SPAN class="code-quote">&quot;myotherprovider&quot;</SPAN>/&gt;</SPAN>
+	<SPAN class="code-tag">&lt;/property&gt;</SPAN>
+<SPAN class="code-tag">&lt;/instance&gt;</SPAN></PRE>
+</DIV></DIV>
+
+<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><A name="ServiceRequirementHandler-BindingPolicies"></A>Binding Policies</H2>
 
 <P>Three binding policies are supported inside iPOJO.</P>
@@ -350,12 +448,14 @@
 
 
 <P>A static binding is declared as following:</P>
+
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
     <SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_hellos&quot;</SPAN> policy=<SPAN class="code-quote">&quot;static&quot;</SPAN>/&gt;</SPAN>
     ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
+
 <P>A dynamic-priority binding is declared as following:</P>
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
@@ -366,7 +466,7 @@
 <P>By default, the dynamic-priority policy uses the OSGi service ranking policy. However, it is possible to customize the policy by adding the '<EM>comparator</EM>' attribute. This attribute indicates the class name of a class implementing the java.util.Comparator interface. IPOJO will create an instance of your comparator and use it to sort service references (so your customized comparator needs to be able to sort OSGi Service Reference).</P>
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...HelloConsumer&quot;</SPAN>&gt;</SPAN>
-    <SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_hellos&quot;</SPAN> policy=<SPAN class="code-quote">&quot;dynamic-priority&quot;</SPAN> comparator=<SPAN class="code-quote">&quot;my.comparator&quot;</SPAN>/&gt;</SPAN>
+    <SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_hellos&quot;</SPAN> policy=<SPAN class="code-quote">&quot;dynamic-priority&quot;</SPAN> comparator=<SPAN class="code-quote">&quot;my.great.Comparator&quot;</SPAN>/&gt;</SPAN>
     ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
@@ -394,12 +494,14 @@
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
 
-<P>However, you can also indicate a <EM>default-implementation</EM> for your optional service. In this case, if no providers are found, iPOJO creates an instance of the default-implementation and injects it. The default-implementation attribute describes the class name of your implementation. The given class <B>MUST</B>implement the required service interface.</P>
+<P>However, you can also indicate a <EM>default-implementation</EM> for your optional service. In this case, if no providers are found, iPOJO creates an instance of the default-implementation and injects it. The default-implementation attribute describes the class name of your implementation. The given class <B>MUST</B> implement the required service interface.</P>
 
 <P>For example, the following component uses a default implementation for a Log Service dependency:</P>
 <DIV class="code"><DIV class="codeContent">
 <PRE class="code-xml"><SPAN class="code-tag">&lt;component classname=<SPAN class="code-quote">&quot;...LogExample&quot;</SPAN>&gt;</SPAN>
-    <SPAN class="code-tag">&lt;requires field=<SPAN class="code-quote">&quot;m_log&quot;</SPAN> optional=<SPAN class="code-quote">&quot;true&quot;</SPAN> default-implementation=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.example.default.MyLogService&quot;</SPAN>/&gt;</SPAN>
+    &lt;requires field=<SPAN class="code-quote">&quot;m_log&quot;</SPAN> optional=<SPAN class="code-quote">&quot;true&quot;</SPAN> 
+    default-implementation=
+       <SPAN class="code-quote">&quot;org.apache.felix.ipojo.example.default.MyLogService&quot;</SPAN>/&gt;
     ...
 <SPAN class="code-tag">&lt;/component&gt;</SPAN></PRE>
 </DIV></DIV>
@@ -422,73 +524,69 @@
 <P><A name="ServiceRequirementHandler-discovery"></A></P>
 <H2><A name="ServiceRequirementHandler-Noteonserviceinterfacediscovery"></A>Note on service interface discovery</H2>
 
-<P>The <EM>'interface'</EM> attribute is generally optional except when iPOJO cannot discover the type of the service. IPOJO cannot infer the type when the dependency has no field and callbacks do not receive the service object in parameter. In this case, you need to declare the service interface.</P>
+<P>The <EM>'interface'</EM> (replaced by 'specification' during the 0.9.0-SNASPHOT version development) attribute is generally optional except when iPOJO cannot discover the type of the service. iPOJO cannot infer the type when the dependency has no field and callbacks do not receive the service object in parameter. In this case, you need to declare the service interface.</P>
 </TD>
 <TD class="confluenceTd" valign="top" width="20%">
-<FORM method="get" class="confluence-searchbox marginlessForm " action="http://felix.apache.org/confluence/dosearchsite.action">
-    <INPUT type="hidden" name="searchQuery.spaceKey" value="FELIX">
-    <INPUT type="text" name="searchQuery.queryString">
-    <INPUT type="submit" value="Search">
-</FORM>
-<HR>
 <H6><A name="ServiceRequirementHandler-Overview"></A><B>Overview</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/apache-felix-ipojo-2.html" title="Apache Felix iPOJO-2">Home Page</A></LI>
-	<LI><A href="http://felix.apache.org/site/apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">iPOJO Feature Overview</A></LI>
-	<LI><A href="http://felix.apache.org/site/download.html" title="Download">Download &amp; Install </A></LI>
+	<LI><A href="apache-felix-ipojo.html" title="Apache Felix iPOJO">Home Page</A></LI>
+	<LI><A href="apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">iPOJO Feature Overview</A></LI>
+	<LI><A href="download.html" title="Download">Download &amp; Install </A></LI>
 </UL>
 
 
 <H6><A name="ServiceRequirementHandler-GettingStarted"></A><B>Getting Started</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">iPOJO Hello Word &#40;Maven&#45;Based&#41; tutorial</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</A></LI>
+	<LI><A href="ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</A></LI>
+	<LI><A href="ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">iPOJO Hello Word &#40;Maven&#45;Based&#41; tutorial</A></LI>
+	<LI><A href="ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</A></LI>
 </UL>
 
 
 <H6><A name="ServiceRequirementHandler-UserGuide"></A><B>User Guide</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/describing-components.html" title="Describing components">Describing components</A></LI>
-	<LI><A href="http://felix.apache.org/site/how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">How to use iPOJO Annotations</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</A></LI>
+	<LI><A href="describing-components.html" title="Describing components">Describing components (handler list) </A></LI>
+	<LI><A href="how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">How to use iPOJO Annotations</A></LI>
+	<LI><A href="using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</A></LI>
+	<LI><A href="ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</A></LI>
+	<LI><A href="ipojo-faq.html" title="iPOJO FAQ">FAQ</A></LI>
 </UL>
 
 
 <H6><A name="ServiceRequirementHandler-Tools"></A><B>Tools</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug&#45;in</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug&#45;in</A></LI>
-	<LI><A href="http://felix.apache.org/site/ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</A></LI>
+	<LI><A href="ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug&#45;in</A></LI>
+	<LI><A href="ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</A></LI>
+	<LI><A href="ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug&#45;in</A></LI>
+	<LI><A href="ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</A></LI>
 </UL>
 
 
 <H6><A name="ServiceRequirementHandler-DeveloperGuide"></A><B>Developer Guide</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/how-to-write-your-own-handler.html" title="How to write your own handler">How to write your own handler</A></LI>
-	<LI><A href="http://felix.apache.org/site/how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">How to use iPOJO Manipulation Metadata</A></LI>
+	<LI>API: <SPAN class="nobr"><A href="http://people.apache.org/~clement/ipojo/api/0.8/" title="Visit page outside Confluence" rel="nofollow">0.8<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="how-to-write-your-own-handler.html" title="How to write your own handler">How to write your own handler</A></LI>
+	<LI><A href="how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">How to use iPOJO Manipulation Metadata</A></LI>
 </UL>
 
 
 <H6><A name="ServiceRequirementHandler-Misc%26Contact"></A><B>Misc &amp; Contact</B></H6>
 <UL>
-	<LI><A href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</A></LI>
-	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=FELIX&amp;title=Supported%20JVMs&amp;linkCreation=true&amp;fromPageId=82824" title="Create Page: Supported JVMs" class="createlink">Supported JVMs<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=FELIX&amp;title=Supported%20OSGi%20Implementations&amp;linkCreation=true&amp;fromPageId=82824" title="Create Page: Supported OSGi Implementations" class="createlink">Supported OSGi Implementations<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><A href="http://felix.apache.org/site/future-ideas.html" title="Future Ideas">Future Ideas</A></LI>
-	<LI><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=FELIX&amp;title=Contact&amp;linkCreation=true&amp;fromPageId=82824" title="Create Page: Contact" class="createlink">Contact<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
-	<LI><A href="http://felix.apache.org/site/related-works.html" title="Related Works">Related Works</A></LI>
-	<LI><A href="http://felix.apache.org/site/article-presentations.html" title="Article & Presentations">Article &amp; Presentations</A></LI>
+	<LI><A href="apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</A></LI>
+	<LI><A href="apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</A></LI>
+	<LI><A href="apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</A></LI>
+	<LI><A href="future-ideas.html" title="Future Ideas">Future Ideas</A></LI>
+	<LI><A href="contact.html" title="Contact">Contact</A></LI>
+	<LI><A href="related-works.html" title="Related Works">Related Works</A></LI>
+	<LI><A href="article-presentations.html" title="Article & Presentations">Article &amp; Presentations</A></LI>
 </UL>
 
 
 <HR>
 <DIV class="" align="center">
-<P><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;statuses=created&amp;statuses=modified&amp;spaces=FELIX&amp;labelString=iPOJO&amp;rssType=atom&amp;maxResults=10&amp;timeSpan=5&amp;publicFeed=true&amp;title=iPOJO%20Atom%20Feed" title="Stay tuned!" rel="nofollow"><IMG src="http://cwiki.apache.org/confluence/images/icons/feed-icon-32x32.png" align="absmiddle" border="0"><SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></P></DIV></TD></TR></TBODY></TABLE>
+<P><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;statuses=created&amp;statuses=modified&amp;spaces=FELIX&amp;labelString=iPOJO&amp;rssType=atom&amp;maxResults=10&amp;timeSpan=5&amp;publicFeed=true&amp;title=iPOJO%20Atom%20Feed" title="Stay tuned!" rel="nofollow"><IMG src="../../cwiki.apache.org/confluence/images/icons/feed-icon-32x32.png" align="absmiddle" border="0"><SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></P></DIV></TD></TR></TBODY></TABLE>
     </DIV>
   </BODY>
 
- 
+<!-- Mirrored Site: felix.apache.org. File: /site/service-requirement-handler.html. Date: Mon, 13 Oct 2008 06:53:05 GMT -->
 </HTML>

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/EventDispatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/EventDispatcher.java?rev=703957&r1=703956&r2=703957&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/EventDispatcher.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/EventDispatcher.java Mon Oct 13 00:33:03 2008
@@ -39,33 +39,76 @@
  */
 public class EventDispatcher implements ServiceListener {
     
+    /**
+     * The internal event dispatcher.
+     * This dispatcher is a singleton.
+     */
+    private static EventDispatcher m_dispatcher;
+    
+    /**
+     * The list of listeners.
+     * Service interface -> List of {@link ServiceListener}
+     */
     private Map m_listeners;
+    /**
+     * The global bundle context.
+     */
     private BundleContext m_context;
     
-    private static EventDispatcher m_dispatcher;
-    public static EventDispatcher getDispatcher() {
-        return m_dispatcher;
-    }
-    
+    /**
+     * Creates the EventDispatcher.
+     * @param bc the bundle context used to register and unregister
+     * {@link ServiceListener}.
+     */
     public EventDispatcher(BundleContext bc) {
         m_context = bc;
         m_listeners = new HashMap();
     }
     
+    /**
+     * Gets the iPOJO event dispatcher.
+     * @return the event dispatcher or
+     * <code>null</code> if not created.
+     */
+    public static EventDispatcher getDispatcher() {
+        return m_dispatcher;
+    }
+    
+    /**
+     * Starts the event dispatcher.
+     * This method sets the {@link EventDispatcher#m_dispatcher}.
+     * This method also registers the iPOJO {@link ServiceListener}
+     * receiving events to dispatch them to iPOJO instances.
+     */
     public void start() {
         // Only one thread can call the start method.
         m_context.addServiceListener(this);
         m_dispatcher = this; // Set the dispatcher.
     }
     
+    /**
+     * Stops the event dispatcher.
+     * This method unregisters the {@link ServiceListener}.
+     * This methods must be called only when the iPOJO bundle
+     * stops.
+     */
     public void stop() {
-        synchronized(this) {
+        synchronized (this) {
             m_dispatcher = null; 
             m_context.removeServiceListener(this);
             m_listeners.clear();
         }
     }
 
+    /**
+     * Method called when a {@link ServiceEvent} is
+     * fired by the OSGi framework. 
+     * According to the event, this method dispatches
+     * to interested registered listers from
+     * the {@link EventDispatcher#m_listeners} map.
+     * @param event the service event
+     * @see org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
+     */
     public void serviceChanged(ServiceEvent event) {
         String[] itfs = (String[]) event.getServiceReference().getProperty(Constants.OBJECTCLASS);
         for (int s = 0; s < itfs.length; s++) {
@@ -84,6 +127,12 @@
         }
     }
     
+    /**
+     * Adds a new service listener to the {@link EventDispatcher#m_listeners}
+     * map. This method specifies the listen service interface
+     * @param itf the service interface
+     * @param listener the service listener
+     */
     public void addListener(String itf, ServiceListener listener) {
         synchronized (this) {
             List list = (List) m_listeners.get(itf);
@@ -97,6 +146,12 @@
         }
     }
     
+    /**
+     * Removes a service listener.
+     * @param listener the service listener to remove
+     * @return <code>true</code> if the listener is 
+     * successfully removed.
+     */
     public boolean removeListener(ServiceListener listener) {
         boolean removed = false;
         synchronized (this) {

Modified: felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java?rev=703957&r1=703956&r2=703957&view=diff
==============================================================================
--- felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java (original)
+++ felix/trunk/ipojo/core/src/main/java/org/apache/felix/ipojo/Extender.java Mon Oct 13 00:33:03 2008
@@ -472,7 +472,7 @@
     /**
      * Computes the bundle context from the bundle class by introspection.
      * @param bundle the bundle.
-     * @return the bundle context object or null if not found.
+     * @return the bundle context object or <code>null</code> if not found.
      */
     public BundleContext getBundleContext(Bundle bundle) {
         if (bundle == null) { return null; }

Modified: felix/trunk/ipojo/handler/eventadmin/NOTICE
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/NOTICE?rev=703957&r1=703956&r2=703957&view=diff
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/NOTICE (original)
+++ felix/trunk/ipojo/handler/eventadmin/NOTICE Mon Oct 13 00:33:03 2008
@@ -7,6 +7,11 @@
 The Apache Software Foundation (http://www.apache.org/).
 Licensed under the Apache License 2.0.
 
+This product includes software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright 2006 The OSGi Alliance.
+Licensed under the Apache License 2.0.
+
 II. Used Software
 
 This product uses software developed at

Added: felix/trunk/ipojo/handler/eventadmin/doc/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/changelog.txt?rev=703957&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/doc/changelog.txt (added)
+++ felix/trunk/ipojo/handler/eventadmin/doc/changelog.txt Mon Oct 13 00:33:03 2008
@@ -0,0 +1,3 @@
+Version 1.0.0
+-------------
+    * Initial release (XXXX-XX-XX)
\ No newline at end of file

Added: felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.data/handler-arch.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.data/handler-arch.png?rev=703957&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.data/handler-arch.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.html
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.html?rev=703957&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.html (added)
+++ felix/trunk/ipojo/handler/eventadmin/doc/event-admin-handlers.html Mon Oct 13 00:33:03 2008
@@ -0,0 +1,365 @@
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<HTML>
+  
+<!-- Mirrored Site: felix.apache.org. File: /site/event-admin-handlers.html. Date: Mon, 13 Oct 2008 06:53:08 GMT -->
+<HEAD>
+    <TITLE>Apache Felix - Event Admin Handlers</TITLE>
+    <LINK rel="stylesheet" href="media.data/site.css" type="text/css" media="all">
+    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </HEAD>
+  <BODY>
+    <DIV class="title"><DIV class="logo"><A href="index.html"><IMG border="0" alt="Apache Felix" src="media.data/logo.png"></A></DIV><DIV class="header"><A href="http://www.apache.org/"><IMG border="0" alt="Apache" src="media.data/apache.png"></A></DIV></DIV>
+    <DIV class="menu">
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                <UL>
+	<LI><A href="news.html" title="news">news</A></LI>
+	<LI><A href="license.html" title="license">license</A></LI>
+	<LI><SPAN class="nobr"><A href="downloads.html" title="Visit page outside Confluence" rel="nofollow">downloads<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="documentation.html" title="documentation">documentation</A></LI>
+	<LI><A href="mailinglists.html" title="mailinglists">mailing lists</A></LI>
+	<LI><A href="contributing.html" title="Contributing">contributing</A></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><SPAN class="nobr"><A href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN>
+<!-- ApacheCon Ad -->
+<IFRAME src="http://www.apache.org/ads/button.html" style="border-width:0; float: left" frameborder="0" scrolling="no" width="135" height="135"></IFRAME>
+<P style="height: 100px">
+<!-- ApacheCon Ad --></LI>
+</UL>
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            </DIV>
+    <DIV class="main">
+<TABLE class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><TBODY><TR>
+<TD class="confluenceTd" valign="top" width="80%">
+
+<H1><A name="EventAdminHandlers-EventAdminHandlers"></A>Event Admin Handlers</H1>
+
+<P>The goal of the Event Admin Handlers is to allow event communications between iPOJO component instances. The implementation of these handlers relies on an event admin services. It enables the iPOJO component to listen to a list of topics and to receive all related event. It also allows components to send events in an easy way.</P>
+
+<P>Hereafter is presented a small example of the metadata.xml file :</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml">&lt;ipojo
+    <SPAN class="code-keyword">xmlns:ev</SPAN>=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.handlers.event.EventAdminHandler&quot;</SPAN>&gt;
+	<SPAN class="code-tag">&lt;component className=<SPAN class="code-quote">&quot;...MyComponent&quot;</SPAN>&gt;</SPAN>
+		&lt;ev:subscriber
+			name=<SPAN class="code-quote">&quot;mySubscriber&quot;</SPAN>
+			callback=<SPAN class="code-quote">&quot;receive&quot;</SPAN>
+			topics=<SPAN class="code-quote">&quot;foo&quot;</SPAN>/&gt;
+		&lt;ev:publisher
+			name=<SPAN class="code-quote">&quot;myPublisher&quot;</SPAN>
+			field=<SPAN class="code-quote">&quot;m_publisher&quot;</SPAN>
+			topics=<SPAN class="code-quote">&quot;bar,nuts&quot;</SPAN>/&gt;
+	<SPAN class="code-tag">&lt;/component&gt;</SPAN>
+	<SPAN class="code-tag">&lt;instance component=<SPAN class="code-quote">&quot;...MyComponent&quot;</SPAN>/&gt;</SPAN>
+<SPAN class="code-tag">&lt;/ipojo&gt;</SPAN></PRE>
+</DIV></DIV>
+<P>You need to specify the namespace of the Handler. You can find here one event subscriber (named mySubscriber) and one event publisher (named myPublisher). In these handler configurations, the name parameter is mandatory. The topics parameter is optional as it can be specified in the instance configuration. The callback parameter of the mySubscriber element is mandatory and indicates the method that handles received events. In this case, this method must have a single argument of type org.osgi.service.event.Event. The field parameter of the myPublisher element indicates the field (of type org.apache.felix.ipojo.handlers.event.publisher.Publisher) that is used by the POJO to send events on the specified topics. All type compliance will be checked by the handler at component instantiation time.</P>
+
+<P>Here is an example of the component implementation, compatible with the given description :</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-java"><SPAN class="code-keyword">import</SPAN> org.apache.felix.ipojo.handlers.event.publisher.Publisher;
+<SPAN class="code-keyword">import</SPAN> org.osgi.service.event.Event;
+
+<SPAN class="code-keyword">public</SPAN> class MyComponent ... {
+    <SPAN class="code-keyword">private</SPAN> Publisher m_publisher;
+    <SPAN class="code-keyword">public</SPAN> void receive(Event e) {
+       <SPAN class="code-comment">// Event received
+</SPAN>       <SPAN class="code-comment">// Do something with the event}
+</SPAN>
+    <SPAN class="code-keyword">public</SPAN> void doSomething() {
+        Dictionary e = <SPAN class="code-keyword">new</SPAN> Properties();
+        <SPAN class="code-comment">//...
+</SPAN>        <SPAN class="code-comment">// Fill out the event
+</SPAN>
+        <SPAN class="code-comment">// Send event
+</SPAN>        m_publisher.send(e);
+    }
+}</PRE>
+</DIV></DIV>
+
+<H1><A name="EventAdminHandlers-Download"></A>Download</H1>
+
+<P>The event admin handlers (to send and receive events) are available in the Felix trunk in the iPOJO project. See the <A href="download.html" title="Download">Download</A> page to download and compile these sources.</P>
+
+<H1><A name="EventAdminHandlers-Howdoesitwork%3F"></A>How does it work?</H1>
+
+<P>The handler will parse the description provided in the metadata, and register for you the EventHandler in the OSGi Registry. On one hand, your POJO will receive each event through the handler. With this handler you can specify different callback methods for different topics. On the other side, the handler instantiates and injects configured Publisher references in your POJO, so you can send events transparently through these publishers.</P>
+
+<H1><A name="EventAdminHandlers-EventHandlerSpecification"></A>EventHandler Specification</H1>
+
+<P>Here you can find all configuration options of the EventAdmin handler. As seen before, the handler contains two components : the event subscriber and the event publisher. These components can be configured, using several attributes, as described below. Some of these attributes can be (re)defined in the instance configuration.</P>
+
+<P>Handler namespace : org.apache.felix.ipojo.handlers.event.EventAdminHandler</P>
+
+<H2><A name="EventAdminHandlers-Eventsubscriberattributes"></A>Event subscriber attributes</H2>
+
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Attribute name </TH>
+<TH class="confluenceTh"> Required </TH>
+<TH class="confluenceTh"> Description </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>name</EM> </TD>
+<TD class="confluenceTd"> YES </TD>
+<TD class="confluenceTd"> The name of the event subscriber, acting as a unique 			identifier. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>callback</EM> </TD>
+<TD class="confluenceTd"> YES </TD>
+<TD class="confluenceTd"> The name of the POJO's method that will be called each time an 			event is received. This method takes only one parameter, of typeorg.osgi.service.event.Eventby default, but this type can be overridden by defining the 			data-key and/or the data-type attributes. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>topics</EM> </TD>
+<TD class="confluenceTd"> YES&#42; </TD>
+<TD class="confluenceTd"> The comma-separated-list of the topics that the handler will 			listen to. Each event sent on a topic present in this list will be 			sent to the specified callback method. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>data-key</EM> </TD>
+<TD class="confluenceTd"> NO </TD>
+<TD class="confluenceTd"> The data key is used when you want to receive data events. This 			attribute's value is the key corresponding to the received data in 			the event's dictionary. <BR clear="all">
+If you use this attribute, the parameter passed to the callback 			method is the the value associated to this key, not the whole 			event. <BR clear="all">
+This attribute is generally used with the <EM>data-type</EM>attribute to specify the received object type. <BR clear="all">
+If an event is received and it does not contain such a key, it 			is ignored (with a warning message). </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>data-type</EM> </TD>
+<TD class="confluenceTd"> NO </TD>
+<TD class="confluenceTd"> This attribute is associated to the data-key attribute. It 			specifies the type of objects (java.lang.Objectby default) that the callback expects. It is used to determine the 			unique callback method (in case of multiple methods with the same 			name) and to check type compliance at event reception. <BR clear="all">
+Data events that are not corresponding to the specified type 			will be ignored (with a warning message). </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>filter</EM> </TD>
+<TD class="confluenceTd"> NO&#42; </TD>
+<TD class="confluenceTd"> The event filter is used to filter incoming events before 			sending them to the callback. The syntax of this field is 			described in the OSGi EventAdmin Specification. If you don't 			specify a filter, all events sent on the listened topics will be 			considered. </TD>
+</TR>
+</TBODY></TABLE>
+<P>&#42; These attributes can be (re)defined in the instance configuration.</P>
+
+<H2><A name="EventAdminHandlers-Eventpublisherattributes"></A>Event publisher attributes</H2>
+
+<TABLE class="confluenceTable"><TBODY>
+<TR>
+<TH class="confluenceTh"> Attribute name </TH>
+<TH class="confluenceTh"> Required </TH>
+<TH class="confluenceTh"> Description </TH>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>name</EM> </TD>
+<TD class="confluenceTd"> YES </TD>
+<TD class="confluenceTd"> The name of the event publisher, acting as a unique identifier. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>field</EM> </TD>
+<TD class="confluenceTd"> YES </TD>
+<TD class="confluenceTd"> The name of the POJO's field that will be used to send events. 			The field is initialized at component instantiation time. The type 			of the field must be : org.apache.felix.ipojo.handlers.event.publisher.Publisher. Despite it creates a dependency between the component code and the handler, this system allows hiding the 			whole complexity of event sending. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>topics</EM> </TD>
+<TD class="confluenceTd"> YES&#42; </TD>
+<TD class="confluenceTd"> The comma-separated-list of the topics on which events will be 			sent. All subscribers that are listening to one of these topics 			will receive the events. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>data-key</EM> </TD>
+<TD class="confluenceTd"> NO </TD>
+<TD class="confluenceTd"> The data key is used when you want to send data events. This 			attribute's value is the key, in the event's dictionary, in which 			sent data are stored. When you use the <EM>sendData</EM> method of 			the Publisher, the given object is placed in the event dictionary, 			associated with the specified data-key. <BR clear="all">
+The default value of this attribute is user.data. </TD>
+</TR>
+<TR>
+<TD class="confluenceTd"> <EM>synchronous</EM> </TD>
+<TD class="confluenceTd"> NO </TD>
+<TD class="confluenceTd"> Determines if event sending is synchronous or not. By default, 			events are sent asynchronously, but you can specify there the 			desired behaviour of the Publisher. <BR clear="all">
+The default value of this attribute is &quot;false&quot;. </TD>
+</TR>
+</TBODY></TABLE>
+<P>&#42; These attributes can be (re)defined in the instance configuration.</P>
+
+<H2><A name="EventAdminHandlers-Instanceconfiguration"></A>Instance configuration</H2>
+
+<P>Some of the described attributes can be (re)defined in the instance configuration section of your metadata file. Its permits to configure event management instance by instance. The following properties are used by the handler :</P>
+<UL>
+	<LI><EM>event.topics</EM> : overrides <EM>topics</EM> attribute, 	available for both subscribers and publishers configuration</LI>
+	<LI><EM>event.filter</EM> : overrides <EM>filter</EM> attribute, 	available for subscribers configuration only.</LI>
+</UL>
+
+
+<H2><A name="EventAdminHandlers-Publisherinterface"></A>Publisher interface</H2>
+
+<P>The Publisher interface is the link between the component code and the handler. It permits to publish events on the topics specified in the component's description (or instance configuration). The implemented methods are :</P>
+<UL>
+	<LI>public void send<FONT color="#000000">(Dictionary 	content);</FONT><BR>
+This method is used to send a 	standard event, with the specified content. Some specific properties 	may be added in the content to satisfy EventAdmin specification. 	(e.g., event.topic).</LI>
+	<LI>public void sendData<FONT color="#000000">(Object 	o);</FONT><BR>
+This method is the easier way to send 	data. The given object is placed in the event dictionary according 	to the <EM>data-key</EM> attribute (or its default value). Then, this 	dictionary is sent as a normal event.</LI>
+</UL>
+
+
+<H1><A name="EventAdminHandlers-HandlerArchitecture"></A>Handler Architecture</H1>
+
+<P>Here is shown the global architecture of the EventHandler : the interactions between the user components (i.e., POJO), the handler and the OSGi runtime environment.</P>
+
+<P><IMG src="event-admin-handlers.data/handler-arch.png" align="absmiddle" border="0"></P>
+
+<H1><A name="EventAdminHandlers-EventHandlerFeatures"></A>EventHandler Features</H1>
+
+<P>In this section, you will find some examples of the handler's features.</P>
+
+<H2><A name="EventAdminHandlers-Instancecustomization"></A>Instance customization</H2>
+
+<P>As described in the 'Instance configuration' section, you can (re)define some of the subscribers or publishers attributes. You can notice that required attributes that are not defined in the component description must be defined in the instance configuration section. Hereafter is an example of an instance configuration of this handler :</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml">&lt;ipojo
+    <SPAN class="code-keyword">xmlns:ev</SPAN>=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.handlers.event.EventAdminHandler&quot;</SPAN>&gt;
+	<SPAN class="code-tag">&lt;component className=<SPAN class="code-quote">&quot;...MyComponent&quot;</SPAN>&gt;</SPAN>
+		&lt;ev:subscriber
+			name=<SPAN class="code-quote">&quot;mySubscriber&quot;</SPAN>
+			callback=<SPAN class="code-quote">&quot;handleEvent&quot;</SPAN>/&gt;
+		&lt;ev:publisher
+			name=<SPAN class="code-quote">&quot;myPublisher&quot;</SPAN>
+			field=<SPAN class="code-quote">&quot;m_publisher&quot;</SPAN>/&gt;
+	<SPAN class="code-tag">&lt;/component&gt;</SPAN>
+	<SPAN class="code-tag">&lt;instance component=<SPAN class="code-quote">&quot;...MyComponent&quot;</SPAN>&gt;</SPAN>
+		<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;event.topics&quot;</SPAN>&gt;</SPAN>
+			<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;mySubscriber&quot;</SPAN> value=<SPAN class="code-quote">&quot;foo&quot;</SPAN>/&gt;</SPAN>
+			<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;myPublisher&quot;</SPAN> value=<SPAN class="code-quote">&quot;bar,nuts&quot;</SPAN>/&gt;</SPAN>
+		<SPAN class="code-tag">&lt;/property&gt;</SPAN>
+		<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;event.filter&quot;</SPAN>&gt;</SPAN>
+			&lt;property name=<SPAN class="code-quote">&quot;mySubscriber&quot;</SPAN>
+				    value=<SPAN class="code-quote">&quot;|((arg=Minibar)(arg=Coconuts))&quot;</SPAN>/&gt;
+		<SPAN class="code-tag">&lt;/property&gt;</SPAN>
+	<SPAN class="code-tag">&lt;/instance&gt;</SPAN>
+<SPAN class="code-tag">&lt;/ipojo&gt;</SPAN></PRE>
+</DIV></DIV>
+
+<H2><A name="EventAdminHandlers-Dataevents"></A>Data events</H2>
+
+<P>One of the most important features of the EventHandler is the capability of sending and receiving data events. You may know that the OSGi EventAdmin Service allows bundles to send custom objects in events, inserting them in the event's dictionary. The EventHandler hides the dictionary manipulation and allows iPOJO components to receive custom objects at any time.</P>
+
+<P>First, you have define the <EM>data-key</EM> attribute in the publisher configuration. Sent objects will be contained in the event dictionary and are accessible with the &quot;user.data&quot; key.</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml">&lt;ipojo
+    <SPAN class="code-keyword">xmlns:ev</SPAN>=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.handlers.event.EventAdminHandler&quot;</SPAN>&gt;
+    <SPAN class="code-tag">&lt;component className=<SPAN class="code-quote">&quot;...DataPublisher&quot;</SPAN>&gt;</SPAN>
+		&lt;ev:publisher
+			name=<SPAN class="code-quote">&quot;myPublisher&quot;</SPAN>
+			field=<SPAN class="code-quote">&quot;m_publisher&quot;</SPAN>
+			topics=<SPAN class="code-quote">&quot;myTopic&quot;</SPAN>
+			data-key=<SPAN class="code-quote">&quot;my.data&quot;</SPAN>/&gt;
+	<SPAN class="code-tag">&lt;/component&gt;</SPAN>
+	<SPAN class="code-tag">&lt;instance component=<SPAN class="code-quote">&quot;...DataPublisher&quot;</SPAN>/&gt;</SPAN>
+<SPAN class="code-tag">&lt;/ipojo&gt;</SPAN></PRE>
+</DIV></DIV>
+<P>Then you can use the <EM>sendData</EM> method of your configured publisher.</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-java"><SPAN class="code-keyword">import</SPAN> org.apache.felix.ipojo.handlers.event.publisher.Publisher;
+<SPAN class="code-comment">//...
+</SPAN><SPAN class="code-keyword">public</SPAN> class DataPublisher ... {
+    <SPAN class="code-keyword">private</SPAN> Publisher m_publisher;
+
+    <SPAN class="code-keyword">public</SPAN> void doSomething() {
+      <SPAN class="code-comment">// MyFavoriteType <SPAN class="code-keyword">extends</SPAN> MyFavoriteInterface
+</SPAN>      MyFavoriteType data = <SPAN class="code-keyword">new</SPAN> MyFavoriteType(...);
+      <SPAN class="code-comment">//...
+</SPAN>      <SPAN class="code-comment">// Send a data event
+</SPAN>      m_publisher.sendData(data);
+    }
+}</PRE>
+</DIV></DIV>
+<P>The second step is to configure an event subscriber to receive such events. The <EM>data-key</EM> attribute's  value of the subscriber must be the same than the publisher's one. The <EM>data-type</EM>describe the type of received data events, and thus, must be compatible with the sent object's type (i.e., super-class or inherited interface). Then you can finally receive the sent object in the callback method. The parameter type of the callback must be the same than the data-type attribute value.</P>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-xml">&lt;ipojo
+   <SPAN class="code-keyword">xmlns:ev</SPAN>=<SPAN class="code-quote">&quot;org.apache.felix.ipojo.handlers.event.EventAdminHandler&quot;</SPAN>&gt;
+	<SPAN class="code-tag">&lt;component className=<SPAN class="code-quote">&quot;...DataEventSubscriber&quot;</SPAN>&gt;</SPAN>
+		&lt;ev:subscriber
+			name=<SPAN class="code-quote">&quot;mySubscriber&quot;</SPAN>
+			callback=<SPAN class="code-quote">&quot;handleData&quot;</SPAN>
+			topics=<SPAN class="code-quote">&quot;myTopic&quot;</SPAN>
+			data-key=<SPAN class="code-quote">&quot;my.data&quot;</SPAN>
+			data-type=<SPAN class="code-quote">&quot;my.package.MyFavoriteInterface&quot;</SPAN>/&gt;
+	<SPAN class="code-tag">&lt;/component&gt;</SPAN>
+	<SPAN class="code-tag">&lt;instance component=<SPAN class="code-quote">&quot;...DataEventSubscriber&quot;</SPAN>/&gt;</SPAN>
+<SPAN class="code-tag">&lt;/ipojo&gt;</SPAN></PRE>
+</DIV></DIV>
+<DIV class="code"><DIV class="codeContent">
+<PRE class="code-java"><SPAN class="code-keyword">import</SPAN> my.<SPAN class="code-keyword">package</SPAN>.MyFavoriteInterface;
+<SPAN class="code-comment">//...
+</SPAN><SPAN class="code-keyword">public</SPAN> class DataEventSubscriber ... {
+  <SPAN class="code-keyword">public</SPAN> void handleData(MyFavoriteInterface o) {
+     <SPAN class="code-comment">// <SPAN class="code-object">Object</SPAN> received
+</SPAN>     <SPAN class="code-comment">//...
+</SPAN>   }
+}</PRE>
+</DIV></DIV>
+
+<H2><A name="EventAdminHandlers-Noteonsynchronouseventsending"></A>Note on synchronous event sending</H2>
+
+<P>By default, events are sent using asynchronous sending (a.k.a.<EM>post</EM> in OSGi EventAdmin). You can use synchronous sending by defining the <EM>synchronous</EM> attribute of your publisher to true.</P>
+
+<P>The behaviour of synchronous event sending is particular when you specify several topics in the publisher description. The event is synchronously sent to each topic, one by one. So when you return from this function, you can be sure that the event has been delivered to each topic.</P>
+
+<H2><A name="EventAdminHandlers-Publisherinstanceinformation"></A>Publisher instance information</H2>
+
+<P>All events sent by a publisher contains the name of the component instance that sent them. Its enables to filter received events depending the sender instance. The instance name is accessible in the event dictionary by the key <EM>publisher.instance.name</EM>. Despite it goes against MOM principles, this property is useful to trace events and especially event sources.</P></TD>
+<TD class="confluenceTd" valign="top" width="20%">
+<H6><A name="EventAdminHandlers-Overview"></A><B>Overview</B></H6>
+<UL>
+	<LI><A href="apache-felix-ipojo.html" title="Apache Felix iPOJO">Home Page</A></LI>
+	<LI><A href="apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">iPOJO Feature Overview</A></LI>
+	<LI><A href="download.html" title="Download">Download &amp; Install </A></LI>
+</UL>
+
+
+<H6><A name="EventAdminHandlers-GettingStarted"></A><B>Getting Started</B></H6>
+<UL>
+	<LI><A href="ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</A></LI>
+	<LI><A href="ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">iPOJO Hello Word &#40;Maven&#45;Based&#41; tutorial</A></LI>
+	<LI><A href="ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</A></LI>
+</UL>
+
+
+<H6><A name="EventAdminHandlers-UserGuide"></A><B>User Guide</B></H6>
+<UL>
+	<LI><A href="describing-components.html" title="Describing components">Describing components (handler list) </A></LI>
+	<LI><A href="how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">How to use iPOJO Annotations</A></LI>
+	<LI><A href="using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</A></LI>
+	<LI><A href="ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</A></LI>
+	<LI><A href="ipojo-faq.html" title="iPOJO FAQ">FAQ</A></LI>
+</UL>
+
+
+<H6><A name="EventAdminHandlers-Tools"></A><B>Tools</B></H6>
+<UL>
+	<LI><A href="ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug&#45;in</A></LI>
+	<LI><A href="ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</A></LI>
+	<LI><A href="ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug&#45;in</A></LI>
+	<LI><A href="ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</A></LI>
+</UL>
+
+
+<H6><A name="EventAdminHandlers-DeveloperGuide"></A><B>Developer Guide</B></H6>
+<UL>
+	<LI>API: <SPAN class="nobr"><A href="http://people.apache.org/~clement/ipojo/api/0.8/" title="Visit page outside Confluence" rel="nofollow">0.8<SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></LI>
+	<LI><A href="how-to-write-your-own-handler.html" title="How to write your own handler">How to write your own handler</A></LI>
+	<LI><A href="how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">How to use iPOJO Manipulation Metadata</A></LI>
+</UL>
+
+
+<H6><A name="EventAdminHandlers-Misc%26Contact"></A><B>Misc &amp; Contact</B></H6>
+<UL>
+	<LI><A href="apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</A></LI>
+	<LI><A href="apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</A></LI>
+	<LI><A href="apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</A></LI>
+	<LI><A href="future-ideas.html" title="Future Ideas">Future Ideas</A></LI>
+	<LI><A href="contact.html" title="Contact">Contact</A></LI>
+	<LI><A href="related-works.html" title="Related Works">Related Works</A></LI>
+	<LI><A href="article-presentations.html" title="Article & Presentations">Article &amp; Presentations</A></LI>
+</UL>
+
+
+<HR>
+<DIV class="" align="center">
+<P><SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;statuses=created&amp;statuses=modified&amp;spaces=FELIX&amp;labelString=iPOJO&amp;rssType=atom&amp;maxResults=10&amp;timeSpan=5&amp;publicFeed=true&amp;title=iPOJO%20Atom%20Feed" title="Stay tuned!" rel="nofollow"><IMG src="../../cwiki.apache.org/confluence/images/icons/feed-icon-32x32.png" align="absmiddle" border="0"><SUP><IMG class="rendericon" src="../../cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN></P></DIV></TD></TR></TBODY></TABLE>
+    </DIV>
+  </BODY>
+
+<!-- Mirrored Site: felix.apache.org. File: /site/event-admin-handlers.html. Date: Mon, 13 Oct 2008 06:53:08 GMT -->
+</HTML>

Added: felix/trunk/ipojo/handler/eventadmin/doc/media.data/apache.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/media.data/apache.png?rev=703957&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/handler/eventadmin/doc/media.data/apache.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/handler/eventadmin/doc/media.data/gradient.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/media.data/gradient.png?rev=703957&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/handler/eventadmin/doc/media.data/gradient.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/handler/eventadmin/doc/media.data/logo.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/media.data/logo.png?rev=703957&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/handler/eventadmin/doc/media.data/logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/handler/eventadmin/doc/media.data/site.css
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/doc/media.data/site.css?rev=703957&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/doc/media.data/site.css (added)
+++ felix/trunk/ipojo/handler/eventadmin/doc/media.data/site.css Mon Oct 13 00:33:03 2008
@@ -0,0 +1,25 @@
+/* @override http://felix.apache.org/site/media.data/site.css */
+
+body { background-color: #ffffff; color: #3b3b3b; font-family: Tahoma, Arial, sans-serif; font-size: 10pt; line-height: 140% }
+h1, h2, h3, h4, h5, h6 { font-weight: normal; color: #000000; line-height: 100%; margin-top: 0px}
+h1 { font-size: 200% }
+h2 { font-size: 175% }
+h3 { font-size: 150% }
+h4 { font-size: 140% }
+h5 { font-size: 130% }
+h6 { font-size: 120% }
+a { color: #1980af }
+a:visited { color: #1980af }
+a:hover { color: #1faae9 }
+.title { position: absolute; left: 1px; right: 1px; top:25px; height: 81px; background: url(gradient.png) repeat-x; background-position: bottom; }
+.logo { position: absolute; width: 15em; height: 81px; text-align: center; }
+.header { text-align: right; margin-right: 20pt; margin-top: 30pt;}
+.menu { border-top: 10px solid #f9bb00; position: absolute; top: 107px; left: 1px; width: 15em; bottom: 0px; padding: 0px; background-color: #fcfcfc }
+.menu ul { background-color: #fdf5d9; list-style: none; padding-left: 4em; margin-top: 0px; padding-top: 2em; padding-bottom: 2em; margin-left: 0px; color: #4a4a43}
+.menu a { text-decoration: none; color: #4a4a43 }
+.main { position: absolute; border-top: 10px solid #cde0ea; top: 107px; left: 15em; right: 1px; margin-left: 2px; padding-right: 4em; padding-left: 1em; padding-top: 1em;}
+.code { background-color: #eeeeee; border: solid 1px black; padding: 0.5em }
+.code-keyword { color: #880000 }
+.code-quote { color: #008800 }
+.code-object { color: #0000dd }
+.code-java { margin: 0em }
\ No newline at end of file

Modified: felix/trunk/ipojo/handler/extender/doc/changelog.txt
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/extender/doc/changelog.txt?rev=703957&r1=703956&r2=703957&view=diff
==============================================================================
--- felix/trunk/ipojo/handler/extender/doc/changelog.txt (original)
+++ felix/trunk/ipojo/handler/extender/doc/changelog.txt Mon Oct 13 00:33:03 2008
@@ -1,3 +1,12 @@
+Changes from 0.8.0 to 1.0.0
+---------------------------
+** Bug
+    * [FELIX-613] - Extender pattern handler issue when bundles are leaving (2008-07-03)
+    
+** Improvement
+    * [FELIX-673] - Provide OBR description to iPOJO bundles (2008-08-07)
+    * [FELIX-716] - Provide XML schemas for iPOJO descriptors (2008-09-09)
+    
 Version 0.8.0
 -------------
-* [2008-05-16] Initial release
\ No newline at end of file
+    * Initial release (2008-05-16) 
\ No newline at end of file

Added: felix/trunk/ipojo/handler/extender/doc/extender-pattern-handler.data/extender.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/extender/doc/extender-pattern-handler.data/extender.png?rev=703957&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/handler/extender/doc/extender-pattern-handler.data/extender.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream