blob: 50d5ee620ce1e543ce48ddc84b4c45541f948174 [file] [log] [blame]
Clement Escoffier6b928e92008-05-16 20:33:54 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Clement Escoffier8251f602009-01-15 15:35:17 +00002<html><head>
3
4
Clement Escoffier6b928e92008-05-16 20:33:54 +00005
Clement Escoffier8251f602009-01-15 15:35:17 +00006 <title>Apache Felix - Providing OSGi services</title>
7 <link rel="stylesheet" href="providing-osgi-services_files/site.css" type="text/css" media="all">
8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
9 </head><body>
10 <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="providing-osgi-services_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="providing-osgi-services_files/apache.png" border="0"></a></div></div>
11 <div class="menu">
12<ul>
13 <li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
14 <li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
15 <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="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
16 <li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
17 <li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
18 <li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
19 <li><span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<sup><img class="rendericon" src="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
20 <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="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
21 <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="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span>
Clement Escoffier6b928e92008-05-16 20:33:54 +000022<!-- ApacheCon Ad -->
Clement Escoffier8251f602009-01-15 15:35:17 +000023<iframe src="providing-osgi-services_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" width="135" frameborder="0" height="135"></iframe>
24<p style="height: 100px;">
25<!-- ApacheCon Ad -->
26</p></li></ul> </div>
27 <div class="main">
28<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
29<td class="confluenceTd" valign="top" width="80%">
30<h1><a name="ProvidingOSGiservices-ProvidingOSGiservices"></a>Providing OSGi services</h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +000031
Clement Escoffier8251f602009-01-15 15:35:17 +000032<p>This handler allows publishing OSGi services. It manages:</p>
33<ul>
34 <li>service publication</li>
35 <li>service object creation</li>
36 <li>service un-registration</li>
37 <li>configuration property propagation</li>
38</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +000039
40
Clement Escoffier8251f602009-01-15 15:35:17 +000041<p><img src="providing-osgi-services_files/ps-simple.png" handler="" overview="" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000042
Clement Escoffier8251f602009-01-15 15:35:17 +000043<h1><a name="ProvidingOSGiservices-Asimpleexample"></a><b>A simple example</b></h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +000044
Clement Escoffier8251f602009-01-15 15:35:17 +000045<p>The following code snippet shows a simple class implementing the FooService interface:</p>
46<div class="code"><div class="codeContent">
47<pre class="code-java"><span class="code-keyword">public</span> class FooProviderType1 <span class="code-keyword">implements</span> FooService {
48 <span class="code-keyword">private</span> <span class="code-object">String</span> m_foo = <span class="code-quote">"foo"</span>;
Clement Escoffier6b928e92008-05-16 20:33:54 +000049
Clement Escoffier8251f602009-01-15 15:35:17 +000050 <span class="code-keyword">public</span> void foo() {
51 <span class="code-object">System</span>.out.println(<span class="code-quote">"foo "</span> + m_foo);
Clement Escoffier6b928e92008-05-16 20:33:54 +000052 }
53
Clement Escoffier8251f602009-01-15 15:35:17 +000054}</pre>
55</div></div>
56<p>To provide a service, the implementation class <b>NEEDS</b> to implement the service interface. By the way, it guaranties that each methods of the service interface are implemented.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000057
Clement Escoffier8251f602009-01-15 15:35:17 +000058<p>To provide the service, the component type needs to declare the providing:</p>
59<div class="code"><div class="codeContent">
60<pre class="code-xml"><span class="code-tag">&lt;component className=<span class="code-quote">"...FooProviderType1"</span>&gt;</span>
61 <span class="code-tag">&lt;provides/&gt;</span>
62<span class="code-tag">&lt;/component&gt;</span></pre>
63</div></div>
64<p><img src="providing-osgi-services_files/ps-foo.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000065
Clement Escoffier8251f602009-01-15 15:35:17 +000066<p>The &lt;provides/&gt; element suffice to declare that each instance
67of this type will provide the FooService. Indeed, the provided
68specification can be discovered by analyzing the implementation class.
69By default, all implemented interface are published in the same service
70registration. iPOJO looks down the entire inheritance tree.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000071
Clement Escoffier8251f602009-01-15 15:35:17 +000072<h1><a name="ProvidingOSGiservices-ServicePublication"></a><b>Service Publication</b></h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +000073
Clement Escoffier8251f602009-01-15 15:35:17 +000074<p>The provided service handler manages the service publication and providing. For each declared <em>provides</em>,
75the handler register a service. The service is published as long as the
76instance is valid. If the instance becomes invalid, the service is
77removed from the service registry.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000078
Clement Escoffier8251f602009-01-15 15:35:17 +000079<p>By default, it publishes all interfaces implemented by the
80implementation class of the component class. It collects all
81super-interfaces (interfaces implemented by implemented interfaces and
82by the super class). However it is possible to set exposed
83specifications with the <tt>specifications</tt> attribute to avoid to expose all collected interfaces.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000084
Clement Escoffier8251f602009-01-15 15:35:17 +000085<p><em>Note</em>: In the 1.0.0 version, the <tt>specifications</tt> attribute was named <tt>interface</tt>.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000086
Clement Escoffier8251f602009-01-15 15:35:17 +000087<p>The following xml snippet is equivalent to the previous example:</p>
88<div class="code"><div class="codeContent">
89<pre class="code-xml"><span class="code-tag">&lt;component className=<span class="code-quote">"...FooProviderType1"</span>&gt;</span>
90 <span class="code-tag">&lt;provides specifications=<span class="code-quote">"...FooService "</span>/&gt;</span>
91<span class="code-tag">&lt;/component&gt;</span></pre>
92</div></div>
93<p>If the implementation class implements several interfaces, all these
94interfaces are published by default in the same service publication.
95You can use the <tt>specifications</tt> attribute to set published service interfaces. If you want to publish several interfaces, you can use the following syntax:</p>
96<div class="code"><div class="codeContent">
97<pre class="code-xml"><span class="code-tag">&lt;component className=<span class="code-quote">"...FooProviderType1"</span>&gt;</span>
98 <span class="code-tag">&lt;provides specifications=<span class="code-quote">"{...FooService, ...BarService}"</span>/&gt;</span>
99<span class="code-tag">&lt;/component&gt;</span></pre>
100</div></div>
101<p><img src="providing-osgi-services_files/ps-foobar.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000102
Clement Escoffier8251f602009-01-15 15:35:17 +0000103<p><em>Note</em>: if you use the <tt>specifications</tt> attribute, the
104handler check that all declared interfaces are really implemented by
105the implementation class. If an interface is not implemented, the
106handler throws an error.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000107
Clement Escoffier8251f602009-01-15 15:35:17 +0000108<p><em>Note</em>: if the implementation class does not implement any
109interface, you cannot provide a service. In this case, the handler
110throws an error.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000111
Clement Escoffier8251f602009-01-15 15:35:17 +0000112<h1><a name="ProvidingOSGiservices-ServiceProperties"></a><b>Service Properties</b></h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000113
Clement Escoffier8251f602009-01-15 15:35:17 +0000114<p>The handler can manage service properties. Service properties are
115attached to published service and allow consumer filtering providers. A
116property can be attached to a field (contained in the component
117implementation class), and so by handle dynamically.</p>
118
119<p>Let's take a new example very closed of the last one:</p>
120<div class="code"><div class="codeContent">
121<pre class="code-java"><span class="code-keyword">public</span> class FooProviderType1 <span class="code-keyword">implements</span> FooService {
122 <span class="code-keyword">private</span> <span class="code-object">String</span> m_foo;
123 <span class="code-keyword">public</span> void foo() {
124 <span class="code-object">System</span>.out.println(<span class="code-quote">"foo "</span> + m_foo);
125 m_foo = <span class="code-quote">"bar"</span>;
Clement Escoffier6b928e92008-05-16 20:33:54 +0000126 }
Clement Escoffier8251f602009-01-15 15:35:17 +0000127}</pre>
128</div></div>
129<p>Remark that the m_foo field does not have any value. The following snippet shows a component publishing the <em>FooService</em> with two properties:</p>
130<div class="code"><div class="codeContent">
131<pre class="code-xml"><span class="code-tag">&lt;component className=<span class="code-quote">"...FooProviderType1"</span>&gt;</span>
132 <span class="code-tag">&lt;provides&gt;</span>
133 <span class="code-tag">&lt;property name=<span class="code-quote">"foo"</span> field=<span class="code-quote">"m_foo"</span> value=<span class="code-quote">"Foo"</span>/&gt;</span>
134 <span class="code-tag">&lt;property name=<span class="code-quote">"intProps"</span> type=<span class="code-quote">"int"</span> value=<span class="code-quote">"5"</span>/&gt;</span>
135 <span class="code-tag">&lt;/provides&gt;</span>
136<span class="code-tag">&lt;/component&gt;</span></pre>
137</div></div>
138<p>The first declared property will be attached to the m_foo field. This property is published with the name <em>foo</em>.
139This property has a default value "Foo". This value will be injected in
140the _m_foo_ field, when this field asks for a value. A property with a
141field attribute does not need to declare a type (the type can be
142discovered by analyzing the implementation class).</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000143
Clement Escoffier8251f602009-01-15 15:35:17 +0000144<p>The second property is published with the name <em>intProps</em>.
145This property is not attached to a field, so, we need to declare the
146property type. All primitive types or objects can be used has property
147type (for object, the qualified name of the class is used as
148java.lang.String).</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000149
Clement Escoffier8251f602009-01-15 15:35:17 +0000150<p><img src="providing-osgi-services_files/ps-foo2.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000151
Clement Escoffier8251f602009-01-15 15:35:17 +0000152<p>The implementation class set a new value to the _m_foo_ field in the
153code. When this action occurs, the handler will modify the service
154publication to update the <em>foo</em> property published value. If a published property value becomes <em>null</em>, the property is unpublished since it has a new value.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000155
Clement Escoffier8251f602009-01-15 15:35:17 +0000156<p><img src="providing-osgi-services_files/ps-foo3.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000157
Clement Escoffier8251f602009-01-15 15:35:17 +0000158<p>If property does not have default value, the instance configuration
159needs to set a value for each unvalued property. Moreover, the instance
160can override the property value. The following xml snippet shows the
161declaration of an instance overriding the property values:</p>
162<div class="code"><div class="codeContent">
163<pre class="code-xml"><span class="code-tag">&lt;instance component=<span class="code-quote">"...FooProviderType1"</span> name=<span class="code-quote">"myFooServiceProvider"</span>&gt;</span>
164 <span class="code-tag">&lt;property name=<span class="code-quote">"foo"</span> value=<span class="code-quote">"baz"</span>/&gt;</span>
165 <span class="code-tag">&lt;property name=<span class="code-quote">"intProps"</span> value=<span class="code-quote">"2"</span>/&gt;</span>
166<span class="code-tag">&lt;/instance&gt;</span></pre>
167</div></div>
168<p><img src="providing-osgi-services_files/ps-foo4.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000169
Clement Escoffier8251f602009-01-15 15:35:17 +0000170<h1><a name="ProvidingOSGiservices-Advancedfeatures"></a>Advanced features</h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000171
Clement Escoffier8251f602009-01-15 15:35:17 +0000172<h2><a name="ProvidingOSGiservices-ServiceServing&amp;ObjectCreation"></a><b>Service Serving &amp; Object Creation</b></h2>
173
174<p>When a consumer requires the published service, the handler sends an
175object (instance) of the implementation class. By default, it is always
176the same instance. If no instance already exists, an instance is
177created.</p>
178
179<p>However, the handler supports the OSGi <em>Service Factory</em>. In this case, for each requester bundle, the handler sends a new object. To activate this policy, add the <em>factory</em> attribute in the <em>provides</em> element:</p>
180<div class="code"><div class="codeContent">
181<pre class="code-xml"><span class="code-tag">&lt;provides factory=<span class="code-quote">"SERVICE"</span>/&gt;</span></pre>
182</div></div>
183
184<p><b>NOTE [New in the 1.1.0-SNAPSHOT]</b>: The <tt>factory</tt> attribute became <tt>strategy</tt>. </p>
185<div class="code"><div class="codeContent">
186<pre class="code-xml"><span class="code-tag">&lt;provides strategy=<span class="code-quote">"SERVICE"</span>/&gt;</span></pre>
187</div></div>
188<p>Moreover, several features appeared:</p>
189<ul>
190 <li><tt>strategy="instance"</tt> allows creating one service object per asking iPOJO instance (despite they are in the same bundle)</li>
191 <li>it is possible to create your own creation strategy by extending the <tt>org.apache.felix.ipojo.handlers.providedservice.CreationStrategy</tt> class and by indicating the qualified class name in the <tt>strategy</tt> attribute.</li>
192</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000193
194
Clement Escoffier8251f602009-01-15 15:35:17 +0000195<h2><a name="ProvidingOSGiservices-SeveralServiceProviding"></a><b>Several Service Providing</b></h2>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000196
Clement Escoffier8251f602009-01-15 15:35:17 +0000197<p>You can declare several <em>provides</em> inside the same component.
198All this provided service will be manage by the same handler but
199separately. Several services will be published (with different service
200registrations). This case is useful when service properties are
201different for the different services.</p>
202<div class="code"><div class="codeContent">
203<pre class="code-java">&lt;component className=<span class="code-quote">"...FooProviderType1"</span>&gt;
204 &lt;provides <span class="code-keyword">interface</span>=<span class="code-quote">"...Foo"</span>/&gt;
205 &lt;provides <span class="code-keyword">interface</span>=<span class="code-quote">"...Bar"</span>&gt;
206 &lt;property name=<span class="code-quote">"foo"</span> value=<span class="code-quote">"baz"</span>/&gt;
Clement Escoffier6b928e92008-05-16 20:33:54 +0000207 &lt;/provides&gt;
Clement Escoffier8251f602009-01-15 15:35:17 +0000208&lt;/component&gt;</pre>
209</div></div>
210<p><img src="providing-osgi-services_files/ps-foobar2.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000211
Clement Escoffier8251f602009-01-15 15:35:17 +0000212<h2><a name="ProvidingOSGiservices-ServicePropertyPropagation"></a><b>Service Property Propagation</b></h2>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000213
Clement Escoffier8251f602009-01-15 15:35:17 +0000214<p>The configuration handler has the possibility to propagate received
215properties to service publication. So, when the propagation is
216activated, all properties received by the configuration handler will be
217propagated to all published service. If some properties are mapped on
218methods, these methods are invoked with the new value in argument.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000219
Clement Escoffier8251f602009-01-15 15:35:17 +0000220<p><img src="providing-osgi-services_files/ps-propagation.png" align="absmiddle" border="0"></p>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000221
Clement Escoffier8251f602009-01-15 15:35:17 +0000222<h2><a name="ProvidingOSGiservices-Instancereconfiguration"></a><b>Instance reconfiguration</b></h2>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000223
Clement Escoffier8251f602009-01-15 15:35:17 +0000224<p>The handler supports instance reconfiguration. When an instance is
225dynamically reconfigured, if the new configuration updates property
226values, these value are take into account (both for field, and service
227publication). If some of these properties have methods, these methods
228are invoked with the new value in argument.</p>
229</td>
230<td class="confluenceTd" valign="top" width="20%">
231<h6><a name="ProvidingOSGiservices-Overview"></a><b>Overview</b></h6>
232<ul>
233 <li><a href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home Page</a></li>
234 <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>
235 <li><a href="http://felix.apache.org/site/download.html" title="Download">Download &amp; Install </a></li>
236</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000237
238
Clement Escoffier8251f602009-01-15 15:35:17 +0000239<h6><a name="ProvidingOSGiservices-GettingStarted"></a><b>Getting Started</b></h6>
240<ul>
241 <li><a href="http://felix.apache.org/site/ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</a></li>
242 <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>
243 <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>
244 <li><a href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</a></li>
245 <li><a href="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">iPOJO Composition Tutorial</a></li>
246</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000247
248
Clement Escoffier8251f602009-01-15 15:35:17 +0000249<h6><a name="ProvidingOSGiservices-UserGuide"></a><b>User Guide</b></h6>
250<ul>
251 <li><a href="http://felix.apache.org/site/describing-components.html" title="Describing components">Describing components (handler list) </a></li>
252 <li><a href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</a></li>
253 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</a></li>
254 <li><a href="http://felix.apache.org/site/ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</a></li>
255 <li><a href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</a></li>
256</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000257
258
Clement Escoffier8251f602009-01-15 15:35:17 +0000259<h6><a name="ProvidingOSGiservices-Tools"></a><b>Tools</b></h6>
260<ul>
261 <li><a href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug-in</a></li>
262 <li><a href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</a></li>
263 <li><a href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug-in</a></li>
264 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li>
265 <li><a href="http://felix.apache.org/site/ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</a></li>
266</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000267
268
Clement Escoffier8251f602009-01-15 15:35:17 +0000269<h6><a name="ProvidingOSGiservices-DeveloperGuide"></a><b>Developer Guide</b></h6>
270<ul>
271 <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="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
272 <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>
273 <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>
274 <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>
275</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000276
277
Clement Escoffier8251f602009-01-15 15:35:17 +0000278<h6><a name="ProvidingOSGiservices-Misc&amp;Contact"></a><b>Misc &amp; Contact</b></h6>
279<ul>
280 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</a></li>
281 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li>
282 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li>
283 <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="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
284 <li><a href="http://felix.apache.org/site/future-ideas.html" title="Future Ideas">Future Ideas</a></li>
285 <li><a href="http://felix.apache.org/site/contact.html" title="Contact">Contact</a></li>
286 <li><a href="http://felix.apache.org/site/related-works.html" title="Related Works">Related Works</a></li>
287 <li><a href="http://felix.apache.org/site/article-presentations.html" title="Article &amp; Presentations">Article &amp; Presentations</a></li>
288</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000289
290
Clement Escoffier8251f602009-01-15 15:35:17 +0000291<hr>
292<div class="" align="center">
293<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="providing-osgi-services_files/feed-icon-32x32.png" align="absmiddle" border="0"><sup><img class="rendericon" src="providing-osgi-services_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></p></div>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000294
Clement Escoffier8251f602009-01-15 15:35:17 +0000295<script type="text/javascript">
296var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
297document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
298</script><script src="providing-osgi-services_files/ga.js" type="text/javascript"></script>
299<script type="text/javascript">
300var pageTracker = _gat._getTracker("UA-1518442-4");
301pageTracker._trackPageview();
302</script>
303</td></tr></tbody></table>
304 </div>
305 </body></html>