blob: 25249215eb20800c29d7caa2bde271f5daa47311 [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 - Apache Felix iPOJO Feature Overview</title>
7 <link rel="stylesheet" href="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_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="apache-felix-ipojo-feature-overview_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="ApacheFelixiPOJOFeatureOverview-ApacheFelixiPOJOFeatureOverview"></a>Apache Felix iPOJO Feature Overview</h1>
Clement Escoffier6b928e92008-05-16 20:33:54 +000031
Clement Escoffier8251f602009-01-15 15:35:17 +000032<p>This page is an attempt to put all of the features and benefits of
33iPOJO into a single high-level list so that it is easy to see why you
34will want to use iPOJO for your applications. This list is not
35exhaustive, but represents the set of features that are potentially
36most likely to be needed or are unique.</p>
Clement Escoffier6b928e92008-05-16 20:33:54 +000037
Clement Escoffier8251f602009-01-15 15:35:17 +000038<h2><a name="ApacheFelixiPOJOFeatureOverview-CoreFeatures"></a>Core Features</h2>
Clement Escoffier6b928e92008-05-16 20:33:54 +000039
Clement Escoffier8251f602009-01-15 15:35:17 +000040<ul>
41 <li><b>POJO-based approach</b> - Most components can simply be POJOs and need not have iPOJO- or OSGi-specific API in them.</li>
42 <li><b>Simple service provisioning</b> - iPOJO manages all aspects of providing an OSGi service.
43 <ul>
44 <li><b>Service property management</b>
45 <ul class="alternate" type="square">
46 <li>Can be controlled by configuration properties.</li>
47 <li>Can
48be mapped to member fields and automatically updated by the component
49instance at run time by just changing the member field value.</li>
50 </ul>
51 </li>
52 <li><b>Service life cycle participation</b>
53- The component instance can participate in the service life cycle by
54declaring a boolean member field that indicates when the service is
55actually valid (normally a service is assumed to be valid if the
56component instance's dependencies are satisfied).</li>
57 </ul>
58 </li>
59 <li><b>Rich service dependency model</b> - Automatically manages a full spectrum of service dependencies.
60 <ul>
61 <li><b>Optional/mandatory</b> service dependencies.</li>
62 <li><b>Singular/aggregate</b> service dependencies.</li>
63 <li><b>Default service implementations</b> - The component can provide default implementations of dependent services if no providers are available.</li>
64 <li><b>Member field or method injection</b> - Also supported in combination.
65 <ul class="alternate" type="square">
66 <li>Member field injection does not require cluttering component code with bind/unbind methods.</li>
67 <li>Member method injection supports various method signatures
68 <ul class="alternate" type="square">
69 <li>method() - Acts as a simple event-callback mechanism.</li>
70 <li>method(&lt;service-interface&gt; svc) - Receives the service object cast to the appropriate interface.</li>
71 <li>method(ServiceReference ref) - Receives the OSGi ServiceReference for the service object.</li>
72 <li>method(ServiceReference
73ref, &lt;service-interface&gt; svc) - Receives the OSGi
74ServiceReference and the service object cast to the appropriate
75interface.</li>
76 </ul>
77 </li>
78 </ul>
79 </li>
80 <li><b>Binding policies</b> - Allow components to control how/when their dependencies are bound.
81 <ul class="alternate" type="square">
82 <li><b>Static</b> - Static dependencies <b>cannot</b>
83change without invalidating the component instance, so injected
84services typically do not change at run time and service departures
85typically result in the component instance being destroyed and
86potentially recreated.</li>
87 <li><b>Dynamic</b> - Dynamic dependencies <b>can</b> change without invalidating the component instance, so injected services can change at run time, but <b>do not</b>
88change with respect to service priority changes (i.e., they do not
89automatically switch if a higher priority service appears).</li>
90 <li><b>Dynamic priority</b> - Dynamic priority dependencies <b>can</b> change without invalidating the component instance and <b>do</b> dynamically update based on service priority rankings at run time.</li>
91 </ul>
92 </li>
93 </ul>
94 </li>
95 <li><b>Configuration property management</b> - Integrated with OSGi Configuration Admin service.
96 <ul>
97 <li><b>Member field/member method injection</b> - Also supported in combination.</li>
98 <li><b>Service property propagation</b>
99- Configuration properties can be configured to update service
100properties if the component instance is providing a service.</li>
101 </ul>
102 </li>
103 <li><b>Sophisticated concurrency handling</b>
104- Externalizes concurrency issues so that component code does not need
105to worry about services changing while they are in use (i.e., no
106locking protocol in component code).</li>
107 <li><b>Deferred instance creation</b> - POJO instances are not created until they are actually needed, thus reducing start-up overhead.</li>
108 <li><b>Introspection support</b> - Supports introspecting a component instance and the state of its dependencies.
109 <ul>
110 <li>Interactive introspection is supported by an arch command for Felix' shell.</li>
111 </ul>
112 </li>
113 <li><b>Extensible</b>
114- All iPOJO features are implemented via a set of handlers, which is an
115extensibility mechanism open to developers by which they can support
116custom functionality (e.g., exporting a provided service remotely,
117etc.).</li>
118</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000119
120
Clement Escoffier8251f602009-01-15 15:35:17 +0000121<h2><a name="ApacheFelixiPOJOFeatureOverview-Advanced/ExperimentalFeatures"></a>Advanced/Experimental Features</h2>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000122
Clement Escoffier8251f602009-01-15 15:35:17 +0000123<ul>
124 <li><b>Composite model</b> - iPOJO supports a flexible architectural-like model for composing services.
125 <ul>
126 <li><b>Flexible composites</b> - A composite is an abstract component implementation.
127 <ul class="alternate" type="square">
128 <li><b>Sub-services and sub-components</b>
129- Unlike traditional component composition, an iPOJO composite can be
130described in terms of services in addition to sub-components; thus
131sub-service implementation selection is deferred until run time.</li>
132 <li><b>Optional/mandatory</b> sub-services and/or sub-components.</li>
133 <li><b>Singular/aggregate</b> sub-services and/or sub-components.</li>
134 </ul>
135 </li>
136 <li><b>Hierarchical</b> - A composite component may contain other composite components.
137 <ul class="alternate" type="square">
138 <li><b>Composite scoping</b>
139- A composite acts as a scoping mechanism where
140sub-services/sub-components are not visible externally and external
141services are not visible internally.</li>
142 </ul>
143 </li>
144 <li><b>Service dependencies</b>
145- A composite has the full expressive capabilities of primitive
146components when it comes to service dependencies (see above description
147of service dependencies in core features). <ul class="alternate" type="square">
148 <li>For a composite, a
149service dependency effectively imports an external service into the
150composite scope from its parent composite (which may be the OSGi
151service registry in the root case).</li>
152 </ul>
153 </li>
154 <li><b>Composite is just a component</b> - Composites can be instantiated and automatically managed just like a primitive component.</li>
155 </ul>
156 </li>
157</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000158
Clement Escoffier8251f602009-01-15 15:35:17 +0000159</td>
160<td class="confluenceTd" valign="top" width="20%">
161<h6><a name="ApacheFelixiPOJOFeatureOverview-Overview"></a><b>Overview</b></h6>
162<ul>
163 <li><a href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home Page</a></li>
164 <li><a href="" title="Apache Felix iPOJO Feature Overview">iPOJO Feature Overview</a></li>
165 <li><a href="http://felix.apache.org/site/download.html" title="Download">Download &amp; Install </a></li>
166</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000167
168
Clement Escoffier8251f602009-01-15 15:35:17 +0000169<h6><a name="ApacheFelixiPOJOFeatureOverview-GettingStarted"></a><b>Getting Started</b></h6>
170<ul>
171 <li><a href="http://felix.apache.org/site/ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</a></li>
172 <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>
173 <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>
174 <li><a href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</a></li>
175 <li><a href="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">iPOJO Composition Tutorial</a></li>
176</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000177
178
Clement Escoffier8251f602009-01-15 15:35:17 +0000179<h6><a name="ApacheFelixiPOJOFeatureOverview-UserGuide"></a><b>User Guide</b></h6>
180<ul>
181 <li><a href="http://felix.apache.org/site/describing-components.html" title="Describing components">Describing components (handler list) </a></li>
182 <li><a href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</a></li>
183 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</a></li>
184 <li><a href="http://felix.apache.org/site/ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</a></li>
185 <li><a href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</a></li>
186</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000187
188
Clement Escoffier8251f602009-01-15 15:35:17 +0000189<h6><a name="ApacheFelixiPOJOFeatureOverview-Tools"></a><b>Tools</b></h6>
190<ul>
191 <li><a href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug-in</a></li>
192 <li><a href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</a></li>
193 <li><a href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug-in</a></li>
194 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li>
195 <li><a href="http://felix.apache.org/site/ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</a></li>
196</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000197
198
Clement Escoffier8251f602009-01-15 15:35:17 +0000199<h6><a name="ApacheFelixiPOJOFeatureOverview-DeveloperGuide"></a><b>Developer Guide</b></h6>
200<ul>
201 <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="apache-felix-ipojo-feature-overview_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
202 <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>
203 <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>
204 <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>
205</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000206
207
Clement Escoffier8251f602009-01-15 15:35:17 +0000208<h6><a name="ApacheFelixiPOJOFeatureOverview-Misc&amp;Contact"></a><b>Misc &amp; Contact</b></h6>
209<ul>
210 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</a></li>
211 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li>
212 <li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li>
213 <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="apache-felix-ipojo-feature-overview_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
214 <li><a href="http://felix.apache.org/site/future-ideas.html" title="Future Ideas">Future Ideas</a></li>
215 <li><a href="http://felix.apache.org/site/contact.html" title="Contact">Contact</a></li>
216 <li><a href="http://felix.apache.org/site/related-works.html" title="Related Works">Related Works</a></li>
217 <li><a href="http://felix.apache.org/site/article-presentations.html" title="Article &amp; Presentations">Article &amp; Presentations</a></li>
218</ul>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000219
220
Clement Escoffier8251f602009-01-15 15:35:17 +0000221<hr>
222<div class="" align="center">
223<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="apache-felix-ipojo-feature-overview_files/feed-icon-32x32.png" align="absmiddle" border="0"><sup><img class="rendericon" src="apache-felix-ipojo-feature-overview_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></p></div>
224
225<script type="text/javascript">
226var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
227document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
228</script><script src="apache-felix-ipojo-feature-overview_files/ga.js" type="text/javascript"></script>
229<script type="text/javascript">
230var pageTracker = _gat._getTracker("UA-1518442-4");
231pageTracker._trackPageview();
232</script>
233</td></tr></tbody></table>
Clement Escoffier6b928e92008-05-16 20:33:54 +0000234
235
Clement Escoffier8251f602009-01-15 15:35:17 +0000236 </div>
237 </body></html>