| <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html><head> |
| |
| |
| |
| <title>Apache Felix - Event Admin Handlers</title> |
| <link rel="stylesheet" href="event-admin-handlers_files/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 alt="Apache Felix" src="event-admin-handlers_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="event-admin-handlers_files/apache.png" border="0"></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="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></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="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></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="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></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="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span> |
| <!-- ApacheCon Ad --> |
| <iframe src="event-admin-handlers_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" width="135" frameborder="0" height="135"></iframe> |
| <p style="height: 100px;"> |
| <!-- ApacheCon Ad --> |
| </p></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><b>UPDATE</b> : the 1.1.0-SNAPSHOT version has a new namespace : <tt>org.apache.felix.ipojo.handlers.event</tt> instead of <tt>org.apache.felix.ipojo.handlers.event.EventAdminHandler</tt></p> |
| |
| <p>Hereafter is presented a small example of the metadata.xml file :</p> |
| <div class="code"><div class="codeContent"> |
| <pre class="code-xml"><ipojo |
| <span class="code-keyword">xmlns:ev</span>=<span class="code-quote">"org.apache.felix.ipojo.handlers.event.EventAdminHandler"</span>> |
| <span class="code-tag"><component className=<span class="code-quote">"...MyComponent"</span>></span> |
| <ev:subscriber |
| name=<span class="code-quote">"mySubscriber"</span> |
| callback=<span class="code-quote">"receive"</span> |
| topics=<span class="code-quote">"foo"</span>/> |
| <ev:publisher |
| name=<span class="code-quote">"myPublisher"</span> |
| field=<span class="code-quote">"m_publisher"</span> |
| topics=<span class="code-quote">"bar,nuts"</span>/> |
| <span class="code-tag"></component></span> |
| <span class="code-tag"><instance component=<span class="code-quote">"...MyComponent"</span>/></span> |
| <span class="code-tag"></ipojo></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="http://felix.apache.org/site/download.html" title="Download">Download</a> page to download and compile these sources.</p> |
| |
| <h1><a name="EventAdminHandlers-Howdoesitwork?"></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* </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* </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>* 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* </td> |
| <td class="confluenceTd"> The comma-separated-list of the topics on which events will be sent. </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 "false". </td> |
| </tr> |
| </tbody></table> |
| <p>* 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_files/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"><ipojo |
| <span class="code-keyword">xmlns:ev</span>=<span class="code-quote">"org.apache.felix.ipojo.handlers.event.EventAdminHandler"</span>> |
| <span class="code-tag"><component className=<span class="code-quote">"...MyComponent"</span>></span> |
| <ev:subscriber |
| name=<span class="code-quote">"mySubscriber"</span> |
| callback=<span class="code-quote">"handleEvent"</span>/> |
| <ev:publisher |
| name=<span class="code-quote">"myPublisher"</span> |
| field=<span class="code-quote">"m_publisher"</span>/> |
| <span class="code-tag"></component></span> |
| <span class="code-tag"><instance component=<span class="code-quote">"...MyComponent"</span>></span> |
| <span class="code-tag"><property name=<span class="code-quote">"event.topics"</span>></span> |
| <span class="code-tag"><property name=<span class="code-quote">"mySubscriber"</span> value=<span class="code-quote">"foo"</span>/></span> |
| <span class="code-tag"><property name=<span class="code-quote">"myPublisher"</span> value=<span class="code-quote">"bar,nuts"</span>/></span> |
| <span class="code-tag"></property></span> |
| <span class="code-tag"><property name=<span class="code-quote">"event.filter"</span>></span> |
| <property name=<span class="code-quote">"mySubscriber"</span> |
| value=<span class="code-quote">"|((arg=Minibar)(arg=Coconuts))"</span>/> |
| <span class="code-tag"></property></span> |
| <span class="code-tag"></instance></span> |
| <span class="code-tag"></ipojo></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 "user.data" key.</p> |
| <div class="code"><div class="codeContent"> |
| <pre class="code-xml"><ipojo |
| <span class="code-keyword">xmlns:ev</span>=<span class="code-quote">"org.apache.felix.ipojo.handlers.event.EventAdminHandler"</span>> |
| <span class="code-tag"><component className=<span class="code-quote">"...DataPublisher"</span>></span> |
| <ev:publisher |
| name=<span class="code-quote">"myPublisher"</span> |
| field=<span class="code-quote">"m_publisher"</span> |
| topics=<span class="code-quote">"myTopic"</span> |
| data-key=<span class="code-quote">"my.data"</span>/> |
| <span class="code-tag"></component></span> |
| <span class="code-tag"><instance component=<span class="code-quote">"...DataPublisher"</span>/></span> |
| <span class="code-tag"></ipojo></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"><ipojo |
| <span class="code-keyword">xmlns:ev</span>=<span class="code-quote">"org.apache.felix.ipojo.handlers.event.EventAdminHandler"</span>> |
| <span class="code-tag"><component className=<span class="code-quote">"...DataEventSubscriber"</span>></span> |
| <ev:subscriber |
| name=<span class="code-quote">"mySubscriber"</span> |
| callback=<span class="code-quote">"handleData"</span> |
| topics=<span class="code-quote">"myTopic"</span> |
| data-key=<span class="code-quote">"my.data"</span> |
| data-type=<span class="code-quote">"my.package.MyFavoriteInterface"</span>/> |
| <span class="code-tag"></component></span> |
| <span class="code-tag"><instance component=<span class="code-quote">"...DataEventSubscriber"</span>/></span> |
| <span class="code-tag"></ipojo></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> |
| |
| |
| <h2><a name="EventAdminHandlers-Configuringthehandlerwithannotations\Newin1.1.0SNAPSHOT\"></a>Configuring the handler with annotations [New in 1.1.0-SNAPSHOT]</h2> |
| |
| <p>It is possible to configure the handler with a simple annotations |
| available in the annotation pack ('annotation' project in the iPOJO |
| trunk). Here is an example of usage:</p> |
| <div class="code"><div class="codeContent"> |
| <pre class="code-java"><span class="code-keyword">import</span> org.apache.felix.ipojo.annotations.Component; |
| <span class="code-keyword">import</span> org.apache.felix.ipojo.handlers.event.Subscriber; |
| <span class="code-keyword">import</span> org.osgi.service.event.Event; |
| |
| |
| @Component |
| <span class="code-keyword">public</span> class PubSub { |
| @org.apache.felix.ipojo.handlers.event.Publisher(name=<span class="code-quote">"p1"</span>, synchronous=<span class="code-keyword">true</span>) |
| org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher1; |
| |
| @org.apache.felix.ipojo.handlers.event.Publisher(name=<span class="code-quote">"p2"</span>, synchronous=<span class="code-keyword">false</span>, topics=<span class="code-quote">"foo,bar"</span>, data_key=<span class="code-quote">"data"</span>) |
| org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher2; |
| |
| @org.apache.felix.ipojo.handlers.event.Publisher(name=<span class="code-quote">"p3"</span>, synchronous=<span class="code-keyword">true</span>, topics=<span class="code-quote">"bar"</span>) |
| org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher3; |
| |
| @Subscriber(name=<span class="code-quote">"s1"</span>, data_key=<span class="code-quote">"data"</span>) |
| <span class="code-keyword">public</span> void receive1(<span class="code-object">Object</span> foo) { |
| <span class="code-comment">// <span class="code-object">Process</span> event |
| </span> } |
| |
| @Subscriber(name=<span class="code-quote">"s2"</span>, topics=<span class="code-quote">"foo,bar"</span>, filter=<span class="code-quote">"(foo=<span class="code-keyword">true</span>)"</span>) |
| <span class="code-keyword">public</span> void receive2(Event foo) { |
| <span class="code-comment">// <span class="code-object">Process</span> event |
| </span> } |
| |
| |
| @Subscriber(name=<span class="code-quote">"s3"</span>, topics=<span class="code-quote">"foo"</span>, data_key=<span class="code-quote">"data"</span>, data_type=<span class="code-quote">"java.lang.<span class="code-object">String</span>"</span>) |
| <span class="code-keyword">public</span> void receive3(<span class="code-object">String</span> foo) { |
| <span class="code-comment">// <span class="code-object">Process</span> event |
| </span> } |
| }</pre> |
| </div></div></td> |
| <td class="confluenceTd" valign="top" width="20%"> |
| <h6><a name="EventAdminHandlers-Overview"></a><b>Overview</b></h6> |
| <ul> |
| <li><a href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">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 & Install </a></li> |
| </ul> |
| |
| |
| <h6><a name="EventAdminHandlers-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/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-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">iPOJO Hello Word (Maven-Based) 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="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">iPOJO Composition Tutorial</a></li> |
| </ul> |
| |
| |
| <h6><a name="EventAdminHandlers-UserGuide"></a><b>User Guide</b></h6> |
| <ul> |
| <li><a href="http://felix.apache.org/site/describing-components.html" title="Describing components">Describing components (handler list) </a></li> |
| <li><a href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</a></li> |
| <li><a href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</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="http://felix.apache.org/site/ipojo-reference-card.html" title="iPOJO-Reference-Card">iPOJO Reference Card</a></li> |
| </ul> |
| |
| |
| <h6><a name="EventAdminHandlers-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-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-in</a></li> |
| <li><a href="http://felix.apache.org/site/ipojo-arch-command.html" title="iPOJO-Arch-Command">iPOJO Arch Command</a></li> |
| <li><a href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li> |
| <li><a href="http://felix.apache.org/site/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/%7Eclement/ipojo/api/1.0/" title="Visit page outside Confluence" rel="nofollow">1.0<sup><img class="rendericon" src="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li> |
| <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><a href="http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html" title="Dive into the iPOJO Manipulation depths">Dive into the iPOJO Manipulation depths</a></li> |
| </ul> |
| |
| |
| <h6><a name="EventAdminHandlers-Misc&Contact"></a><b>Misc & 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><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li> |
| <li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li> |
| <li><span class="nobr"><a href="http://ipojo-dark-side.blogspot.com/" title="Visit page outside Confluence" rel="nofollow">iPOJO's Dark Side Blog<sup><img class="rendericon" src="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li> |
| <li><a href="http://felix.apache.org/site/future-ideas.html" title="Future Ideas">Future Ideas</a></li> |
| <li><a href="http://felix.apache.org/site/contact.html" title="Contact">Contact</a></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 & Presentations</a></li> |
| </ul> |
| |
| |
| <hr> |
| <div class="" align="center"> |
| <p><span class="nobr"><a href="http://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&statuses=created&statuses=modified&spaces=FELIX&labelString=iPOJO&rssType=atom&maxResults=10&timeSpan=5&publicFeed=true&title=iPOJO%20Atom%20Feed" title="Stay tuned!" rel="nofollow"><img src="event-admin-handlers_files/feed-icon-32x32.png" align="absmiddle" border="0"><sup><img class="rendericon" src="event-admin-handlers_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></p></div> |
| |
| <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 src="event-admin-handlers_files/ga.js" type="text/javascript"></script> |
| <script type="text/javascript"> |
| var pageTracker = _gat._getTracker("UA-1518442-4"); |
| pageTracker._trackPageview(); |
| </script> |
| </td></tr></tbody></table> |
| </div> |
| </body></html> |