blob: 82e762b178da9e358999019921b3a510c3bba1e9 [file] [log] [blame]
Clement Escoffier3575f072008-06-06 12:12:01 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Clement Escoffier3e0db1e2009-01-15 15:35:17 +00002<html><head>
3
4
Clement Escoffier3575f072008-06-06 12:12:01 +00005
Clement Escoffier3e0db1e2009-01-15 15:35:17 +00006 <title>Apache Felix - Temporal Service Dependency</title>
7 <link rel="stylesheet" href="temporal-service-dependency_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="temporal-service-dependency_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="temporal-service-dependency_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>
Clement Escoffier580d1902009-07-21 12:06:46 +000015 <li><a href="http://felix.apache.org/site/downloads.cgi" rel="nofollow">downloads</a></li>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +000016 <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>
Clement Escoffier580d1902009-07-21 12:06:46 +000019 <li><a href="http://www.apache.org/" rel="nofollow">asf</a></li>
20 <li><a href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">sponsorship</a></li>
21 <li><a href="http://www.apache.org/foundation/thanks.html" rel="nofollow">sponsors</a>
Clement Escoffier3575f072008-06-06 12:12:01 +000022<!-- ApacheCon Ad -->
Clement Escoffier580d1902009-07-21 12:06:46 +000023<iframe src="temporal-service-dependency_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" frameborder="0" height="135" width="135"></iframe>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +000024<p style="height: 100px;">
25<!-- ApacheCon Ad -->
26</p></li></ul> </div>
27 <div class="main">
Clement Escoffier580d1902009-07-21 12:06:46 +000028<style type="text/css">
29 @import url(http://people.apache.org/~clement/ipojo/site/superfish.css);
30</style>
31
32<style type="text/css">
33 @import url(http://people.apache.org/~clement/ipojo/site/style.css);
34</style>
35
36<p>
37<script class="javascript" src="temporal-service-dependency_files/shCore.js"></script>
38<script class="javascript" src="temporal-service-dependency_files/shBrushCSharp.js"></script>
39<script class="javascript" src="temporal-service-dependency_files/shBrushPhp.js"></script>
40<script class="javascript" src="temporal-service-dependency_files/shBrushJScript.js"></script>
41<script class="javascript" src="temporal-service-dependency_files/shBrushVb.js"></script>
42<script class="javascript" src="temporal-service-dependency_files/shBrushSql.js"></script>
43<script class="javascript" src="temporal-service-dependency_files/shBrushXml.js"></script>
44<script class="javascript" src="temporal-service-dependency_files/shBrushShell.js"></script>
45<script class="javascript" src="temporal-service-dependency_files/shBrushDelphi.js"></script>
46<script class="javascript" src="temporal-service-dependency_files/shBrushPython.js"></script>
47<script class="javascript" src="temporal-service-dependency_files/shBrushJava.js"></script>
48
49<script type="text/javascript" src="temporal-service-dependency_files/jquery-1.js"></script>
50<script type="text/javascript" src="temporal-service-dependency_files/hoverIntent.js"></script>
51<script type="text/javascript" src="temporal-service-dependency_files/superfish.js"></script>
52<script type="text/javascript" src="temporal-service-dependency_files/supersubs.js"></script>
53
54<script type="text/javascript">
55
56 $(document).ready(function(){
57 $("ul.sf-menu").supersubs({
58 minWidth: 14, // minimum width of sub-menus in em units
59 maxWidth: 30, // maximum width of sub-menus in em units
60 extraWidth: 1 // extra width can ensure lines don't sometimes turn over
61 // due to slight rounding differences and font-family
62 }).superfish(); // call supersubs first, then superfish, so that subs are
63 // not display:none when measuring. Call before initialising
64 // containing tabs for same reason.
65 });
66
67</script>
68</p><div class="main">
69<div class="page-header">
70<img src="temporal-service-dependency_files/header.png" class="header">
71<a href="http://ipojo.org/"><img src="temporal-service-dependency_files/ipojo.png" class="header-logo" width="225"></a>
72<ul class="sf-menu sf-js-enabled sf-shadow" id="ipojo-menu">
73<li class="current">
74<!-- Menu Overview -->
75<a href="" class="sf-with-ul">Overview<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
76<ul style="float: none; width: 14em; display: none; visibility: hidden;">
77 <li style="white-space: normal; float: left; width: 100%;">
78 <a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home</a>
79 </li>
80 <li style="white-space: normal; float: left; width: 100%;">
81 <a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-why-choose-ipojo.html" title="apache-felix-ipojo-why-choose-ipojo">Why choose iPOJO</a>
82 </li>
83 <li style="white-space: normal; float: left; width: 100%;">
84 <a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-successstories.html" title="apache-felix-ipojo-successstories">Success stories</a>
85 </li>
86 <li style="white-space: normal; float: left; width: 100%;">
87 <a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">Features</a>
88 </li>
89</ul>
90</li>
91
92<li class="">
93<!-- Menu download -->
94</li><li>
95<a href="http://felix.apache.org/site/download.html" title="Download">Download </a>
96</li>
97
98<li class="">
99<!-- Menu Documentation -->
100<a href="" class="sf-with-ul">Documentation<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
101<ul style="float: none; width: 14em; display: none; visibility: hidden;">
102 <!-- sub- menu : getting started -->
103 <li style="white-space: normal; float: left; width: 100%;" class="">
104 <a style="float: none; width: auto;" href="" class="sf-with-ul">Getting Started<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
105 <ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
106 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-in-10-minutes.html" title="iPOJO in 10 minutes">iPOJO in 10 minutes</a></li>
107 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">Using Annotations</a></li>
108 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">Maven tutorial</a></li>
109 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">Advanced tutorial</a></li>
110 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-dosgi.html" title="apache-felix-ipojo-dosgi">Using Distributed OSGi</a></li>
111 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">Application Composition</a></li>
112 </ul>
113 </li> <!-- end of getting started -->
114 <!-- sub menu : Describing Components -->
115 <li style="white-space: normal; float: left; width: 100%;" class="">
116 <a style="float: none; width: auto;" href="http://felix.apache.org/site/describing-components.html" class="sf-with-ul">Describing components<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
117 <ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
118 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/service-requirement-handler.html" title="Service Requirement Handler">Requiring a service</a></li>
119 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/providing-osgi-services.html" title="Providing OSGi services">Providing a service</a></li>
120 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/lifecycle-callback-handler.html" title="Lifecycle Callback Handler">Lifecycle management</a></li>
121 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/configuration-handler.html" title="Configuration Handler">Configuration</a></li>
122 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/architecture-handler.html" title="Architecture Handler">Introspection</a></li>
123 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/controller-lifecycle-handler.html" title="Controller Lifecycle Handler">Impacting the lifecycle</a></li>
124 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/event-admin-handlers.html" title="Event Admin Handlers">Asynchronous communication</a></li>
125 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-jmx-handler.html" title="iPOJO JMX Handler">JMX management</a></li>
126 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/extender-pattern-handler.html" title="Extender Pattern Handler">Extender pattern</a></li>
127 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/white-board-pattern-handler.html" title="White Board Pattern Handler">Whiteboard pattern</a></li>
128 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="" title="Temporal Service Dependency">Temporal dependencies</a></li>
129 </ul>
130 </li> <!-- End of describing components -->
131 <!-- sub- menu : User Guide -->
132 <li style="white-space: normal; float: left; width: 100%;" class="">
133 <a style="float: none; width: auto;" href="" class="sf-with-ul">User Guide<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
134 <ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
135 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">XML Schemas</a></li>
136 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-api.html" title="apache-felix-ipojo-api">API</a></li>
137 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</a></li>
138 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-eclipse-integration.html" title="apache-felix-ipojo-eclipse-integration">Eclipse Integration</a></li>
139 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</a></li>
140 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-reference-card.html" title="iPOJO-Reference-Card">Reference Card</a></li>
141 </ul>
142 </li> <!-- end of user guide -->
143 <!-- sub- menu : Dev Guide -->
144 <li class="" style="white-space: normal; float: left; width: 100%;">
145 <a style="float: none; width: auto;" href="" class="sf-with-ul">Advanced Topics<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
146 <ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
147 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/ipojo/api/1.2.0" rel="nofollow">Javadoc</a></li>
148 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-write-your-own-handler.html" title="How to write your own handler">Handler guide</a></li>
149 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">Manipulation Metadata </a></li>
150 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" 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>
151 </ul>
152 </li> <!-- End of Dev guide -->
153</ul>
154</li> <!-- End of doc -->
155<!-- Menu 4 : Tools -->
156<li class="">
157<a href="" class="sf-with-ul">Tools<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
158<ul style="float: none; width: 14em; display: none; visibility: hidden;">
159 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">Ant Task</a></li>
160 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">Eclipse Plugin</a></li>
161 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">Maven Plugin</a></li>
162 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-online-manipulator.html" title="apache-felix-ipojo-online-manipulator">Online Manipulator</a></li>
163 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/ipojo-webconsole-plugin.html" title="iPOJO Webconsole Plugin">Webconsole plugin</a></li>
164 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li>
165</ul>
166</li><!-- End of tools -->
167<!-- Menu 5 : Misc -->
168<li class="">
169<a href="" class="sf-with-ul">Misc<span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span><span class="sf-sub-indicator"> »</span></a>
170<ul style="float: none; width: 14em; display: none; visibility: hidden;">
171 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</a></li>
172 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li>
173 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li>
174 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://ipojo-dark-side.blogspot.com/" rel="nofollow">iPOJO's Dark Side Blog</a></li>
175 <li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="http://felix.apache.org/site/article-presentations.html" title="Article &amp; Presentations">Article &amp; Presentations</a></li>
176</ul>
177</li><!-- End of misc -->
178</ul> <!-- End of the menu -->
179</div> <!-- Page header -->
180
181
182<div class="content">
183
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000184<h1><a name="TemporalServiceDependency-Thetemporaldependencyhandler"></a>The temporal dependency handler</h1>
Clement Escoffier130ca572008-10-13 07:33:03 +0000185
Clement Escoffier580d1902009-07-21 12:06:46 +0000186<p><em>Regular service dependencies participate to the instance
187lifecycle. Moreover, the injected service object is either available or
188not available. A temporal dependency handler is a little different and
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000189provides a different resolution pattern. Indeed, the temporal
190dependency does not invalidate the instance. Moreover, if not
191available, the temporal dependency waits (and so blocks the current
192thread) for a provider. Of course, the maximum waiting time can be
Clement Escoffier580d1902009-07-21 12:06:46 +0000193specified. If a timeout occurs, the handler throws a runtime exception.</em></p>
194
195<div class="toc">
196<ul>
197 <li><a href="#TemporalServiceDependency-Usingthehandler">Using the handler</a></li>
198 <li><a href="#TemporalServiceDependency-Collectioninjection">Collection injection</a></li>
199 <li><a href="#TemporalServiceDependency-Proxyinjection">Proxy injection</a></li>
200 <li><a href="#TemporalServiceDependency-Download">Download</a></li>
201</ul></div>
202
203<h2><a name="TemporalServiceDependency-Usingthehandler"></a>Using the handler</h2>
Clement Escoffier130ca572008-10-13 07:33:03 +0000204
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000205<p>First of all, you need to configure the component type to use the handler such as:</p>
Clement Escoffier580d1902009-07-21 12:06:46 +0000206<div class="code">
207<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>iPOJO&nbsp;xmlns:</span><span class="attribute">temporal</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handler.temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>component&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">className</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.example.Temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--&nbsp;Temporal&nbsp;dependency&nbsp;configuration&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>temporal:requires&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"mytemporal"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>provides</span><span class="tag">/&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2"><span class="tag">&lt;/</span><span>component</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>iPOJO</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;iPOJO xmlns:temporal="org.apache.felix.ipojo.handler.temporal"&gt;
Clement Escoffier130ca572008-10-13 07:33:03 +0000208&lt;component
Clement Escoffier580d1902009-07-21 12:06:46 +0000209 className="org.apache.felix.ipojo.example.Temporal"&gt;
Clement Escoffier130ca572008-10-13 07:33:03 +0000210
Clement Escoffier580d1902009-07-21 12:06:46 +0000211 &lt;!-- Temporal dependency configuration --&gt;
212 &lt;temporal:requires field="mytemporal"/&gt;
Clement Escoffier130ca572008-10-13 07:33:03 +0000213
Clement Escoffier580d1902009-07-21 12:06:46 +0000214 &lt;provides/&gt;
Clement Escoffier130ca572008-10-13 07:33:03 +0000215
Clement Escoffier580d1902009-07-21 12:06:46 +0000216&lt;/component&gt;
217&lt;/iPOJO&gt;</textarea>
218<script class="javascript">
219 if(!window.newcodemacro_initialised)
220 {
221 window.newcodemacro_initialised = true;
222 window.oldonloadmethod = window.onload;
223 window.onload = function(){
224 dp.SyntaxHighlighter.HighlightAll('newcodemacro');
225 if(window.oldonloadmethod)
226 {
227 window.oldonloadmethod();
228 }
229 }
230 }
231
232</script>
233</div>
234
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000235<p>Notice that, this handler is an external handler. So, it uses the "org.apache.felix.ipojo.handler.temporal" namespace.<br>
236Once described, you can implement your component. The specified field
237will be mapped to the temporal dependency. As for regular field
238injection, aggregation, targeted service specification (i.e. interface)
239is discovered automatically. Filter, comparator and binding policy are
240also supported. However, the optional attribute is not supported. In
241fact, this attribute is meaningless in the case of a temporal
242dependency.<br>
243Using the field in your code will try to find a matching service
244provider. If a provider is available, the field receives the service
245object immediately. Else, the thread is stopped and waits for a
246provider. The default wait time is 3s (you can also specify this time).
247If no provider is available after this time, the thread throws a
248RuntimeException. If a provider becomes available during this time, the
249field receives immediately the value and the execution can continue.<br>
250Configuration</p>
Clement Escoffier130ca572008-10-13 07:33:03 +0000251
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000252<p>The handler has only one mandatory attributes:</p>
253<ul>
254 <li>Field: the implementation field supporting the dependency</li>
255</ul>
Clement Escoffier3575f072008-06-06 12:12:01 +0000256
257
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000258<p>The handler supports on specific optional attributes:</p>
259<ul>
260 <li>Timeout: the maximum time waited in order to find a provider
261(default: 3s). For an infinite timeout, the timeout value is either
262"infinite" or "-1".</li>
263 <li>OnTimeout: specifies the action to do
264when the timeout occurs. Four actions are supported: null, nullable,
265empty-array, default-implementation. By default, no action is
266specified, and an exception occurs when the timeout is reached.</li>
267</ul>
Clement Escoffier3575f072008-06-06 12:12:01 +0000268
269
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000270<p>The attributes from "regular" dependencies are also supported (like filter).<br>
271OnTimeout actions</p>
Clement Escoffier130ca572008-10-13 07:33:03 +0000272
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000273<p>When a timeout occurs, you can specify what the handler must do. By
274default, it throws a runtime exception. However, four others actions
275can be set in the 'onTimeout' attribute.</p>
276<ul>
277 <li>The null action (onTimeout="null") will return "null" instead of the service object.</li>
278 <li>The
279"nullable" action (onTimeout="nullable") will return a "Nullable"
280object instead of the service object. This object is a fake but can be
281used a regular service object. However, invoking actions on this object
282will do nothing. In the case of aggregate dependency, an array
283containing a "nullable" object is returned.</li>
Clement Escoffier580d1902009-07-21 12:06:46 +0000284 <li>The empty action
285is only supported for aggregate dependency (the field must be an
286array). In this case, an empty-array is returned. (In the 1.2.0
287version, the <tt>empty-array</tt> attribute became <tt>empty</tt>)</li>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000288 <li>The
289default-implementation action is a little different. Instead of
290specifying the action, you need to specify the default-implementation
291(the qualified class name) that you want to use. For example
292onTimeout="o.a.f.i.MyDefaultLogServiceImpl". In this case, the handler
293will inject an instance of this object instead of a real service
294object. On aggregate dependency, an array with one
295default-implementation object is returned.</li>
296</ul>
Clement Escoffier130ca572008-10-13 07:33:03 +0000297
298
Clement Escoffier580d1902009-07-21 12:06:46 +0000299<div class="code">
300<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>iPOJO&nbsp;xmlns:</span><span class="attribute">temporal</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handler.temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>component&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">className</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.example.Temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--&nbsp;Temporal&nbsp;dependency&nbsp;configuration&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>temporal:requires&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"fs"</span><span>&nbsp;</span><span class="attribute">timeout</span><span>=</span><span class="attribute-value">"300"</span><span>&nbsp;</span><span class="attribute">ontimeout</span><span>=</span><span class="attribute-value">"nullable"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>provides</span><span class="tag">/&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2"><span class="tag">&lt;/</span><span>component</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>iPOJO</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;iPOJO xmlns:temporal="org.apache.felix.ipojo.handler.temporal"&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000301&lt;component
Clement Escoffier580d1902009-07-21 12:06:46 +0000302 className="org.apache.felix.ipojo.example.Temporal"&gt;
Clement Escoffier130ca572008-10-13 07:33:03 +0000303
Clement Escoffier580d1902009-07-21 12:06:46 +0000304 &lt;!-- Temporal dependency configuration --&gt;
305 &lt;temporal:requires field="fs" timeout="300" ontimeout="nullable"/&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000306
Clement Escoffier580d1902009-07-21 12:06:46 +0000307 &lt;provides/&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000308
Clement Escoffier580d1902009-07-21 12:06:46 +0000309&lt;/component&gt;
310&lt;/iPOJO&gt;</textarea>
311<script class="javascript">
312 if(!window.newcodemacro_initialised)
313 {
314 window.newcodemacro_initialised = true;
315 window.oldonloadmethod = window.onload;
316 window.onload = function(){
317 dp.SyntaxHighlighter.HighlightAll('newcodemacro');
318 if(window.oldonloadmethod)
319 {
320 window.oldonloadmethod();
321 }
322 }
323 }
324
325</script>
326</div>
327
328<h2><a name="TemporalServiceDependency-Collectioninjection"></a>Collection injection</h2>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000329<p>Temporal dependencies can also be injected inside Collection. To
330achieve this, the 'specification' attribute must indicates the looked
331specification, and the field must be a Collection.</p>
Clement Escoffier580d1902009-07-21 12:06:46 +0000332<div class="code">
333<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>iPOJO&nbsp;xmlns:</span><span class="attribute">temporal</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handler.temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>component&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">className</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.example.Temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--&nbsp;Temporal&nbsp;dependency&nbsp;configuration&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>temporal:requires&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"mycollection"</span><span>&nbsp;</span><span class="attribute">specification</span><span>=</span><span class="attribute-value">"my.service.specification"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>provides</span><span class="tag">/&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1">&nbsp;</td></tr><tr><td class="line2"><span class="tag">&lt;/</span><span>component</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>iPOJO</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;iPOJO xmlns:temporal="org.apache.felix.ipojo.handler.temporal"&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000334&lt;component
Clement Escoffier580d1902009-07-21 12:06:46 +0000335 className="org.apache.felix.ipojo.example.Temporal"&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000336
Clement Escoffier580d1902009-07-21 12:06:46 +0000337 &lt;!-- Temporal dependency configuration --&gt;
338 &lt;temporal:requires field="mycollection" specification="my.service.specification"/&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000339
Clement Escoffier580d1902009-07-21 12:06:46 +0000340 &lt;provides/&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000341
Clement Escoffier580d1902009-07-21 12:06:46 +0000342&lt;/component&gt;
343&lt;/iPOJO&gt;</textarea>
344<script class="javascript">
345 if(!window.newcodemacro_initialised)
346 {
347 window.newcodemacro_initialised = true;
348 window.oldonloadmethod = window.onload;
349 window.onload = function(){
350 dp.SyntaxHighlighter.HighlightAll('newcodemacro');
351 if(window.oldonloadmethod)
352 {
353 window.oldonloadmethod();
354 }
355 }
356 }
357
358</script>
359</div>
360
361<h2><a name="TemporalServiceDependency-Proxyinjection"></a>Proxy injection</h2>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000362<p>Temporal dependencies can also be injected as proxies. So it is possible to give the temporal dependency to helper object.<br>
363On 'scalar' dependencies, the service lookup is executed during an
364operation invocation. Timeout policies are also executed is the lookup
365failed.<br>
366On aggregate dependencies (necessary Collection), the service lookup is
367executed when the iterator(), and toArray(...) methods are invoked.
368Timeout policies <br>
369are also executed if the lookup failed.</p>
370
371<p>To set a temporal dependency as a proxy, just add the <tt>proxy</tt> attribute as follows:</p>
Clement Escoffier580d1902009-07-21 12:06:46 +0000372<div class="code">
373<div class="dp-highlighter"><table class="dp-xml" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="line1"><span></span><span class="tag">&lt;</span><span>iPOJO&nbsp;xmlns:</span><span class="attribute">temporal</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.handler.temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;</span><span>component&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">className</span><span>=</span><span class="attribute-value">"org.apache.felix.ipojo.example.Temporal"</span><span>&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments">&lt;!--&nbsp;Temporal&nbsp;dependencies&nbsp;configuration&nbsp;--&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>temporal:requires&nbsp;</span><span class="attribute">proxy</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"fs"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>temporal:requires&nbsp;</span><span class="attribute">proxy</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">field</span><span>=</span><span class="attribute-value">"mycollection"</span><span>&nbsp;</span><span class="attribute">specification</span><span>=</span><span class="attribute-value">"my.service.specification"</span><span>/&gt;&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1">&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span>provides</span><span class="tag">/&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2">&nbsp;</td></tr><tr><td class="line1"><span class="tag">&lt;/</span><span>component</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr><tr><td class="line2"><span class="tag">&lt;/</span><span>iPOJO</span><span class="tag">&gt;</span><span>&nbsp;</span></td></tr></tbody></table></div><textarea style="display: none;" name="newcodemacro" class="xml:nocontrols:nogutter" rows="10" readonly="readonly">&lt;iPOJO xmlns:temporal="org.apache.felix.ipojo.handler.temporal"&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000374&lt;component
Clement Escoffier580d1902009-07-21 12:06:46 +0000375 className="org.apache.felix.ipojo.example.Temporal"&gt;
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000376
Clement Escoffier580d1902009-07-21 12:06:46 +0000377 &lt;!-- Temporal dependencies configuration --&gt;
378 &lt;temporal:requires proxy="true" field="fs"/&gt;
379 &lt;temporal:requires proxy="true" field="mycollection" specification="my.service.specification"/&gt;
Clement Escoffier3575f072008-06-06 12:12:01 +0000380
Clement Escoffier580d1902009-07-21 12:06:46 +0000381 &lt;provides/&gt;
Clement Escoffier3575f072008-06-06 12:12:01 +0000382
Clement Escoffier580d1902009-07-21 12:06:46 +0000383&lt;/component&gt;
384&lt;/iPOJO&gt;</textarea>
385<script class="javascript">
386 if(!window.newcodemacro_initialised)
387 {
388 window.newcodemacro_initialised = true;
389 window.oldonloadmethod = window.onload;
390 window.onload = function(){
391 dp.SyntaxHighlighter.HighlightAll('newcodemacro');
392 if(window.oldonloadmethod)
393 {
394 window.oldonloadmethod();
395 }
396 }
397 }
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000398
Clement Escoffier580d1902009-07-21 12:06:46 +0000399</script>
400</div>
401
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000402
403<p>By default, proxies are disabled.</p>
404
405<h2><a name="TemporalServiceDependency-Download"></a>Download </h2>
406
407<p>The handler is available on the <a href="http://felix.apache.org/site/download.html" title="Download">download</a> page.<br>
Clement Escoffier580d1902009-07-21 12:06:46 +0000408Sources are available on the Felix trunk at the following location: <a href="http://svn.apache.org/repos/asf/felix/trunk/ipojo/handler/temporal" rel="nofollow">http://svn.apache.org/repos/asf/felix/trunk/ipojo/handler/temporal</a>.
409<br clear="all">
410<br clear="all"></p>
Clement Escoffier3575f072008-06-06 12:12:01 +0000411
Clement Escoffier580d1902009-07-21 12:06:46 +0000412 </div>
413 <img src="temporal-service-dependency_files/footer.png" class="footer">
414</div>
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000415
416<script type="text/javascript">
417var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
418document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
419</script><script src="temporal-service-dependency_files/ga.js" type="text/javascript"></script>
420<script type="text/javascript">
Clement Escoffier580d1902009-07-21 12:06:46 +0000421try{
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000422var pageTracker = _gat._getTracker("UA-1518442-4");
423pageTracker._trackPageview();
Clement Escoffier580d1902009-07-21 12:06:46 +0000424} catch(err) {}
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000425</script>
Clement Escoffier580d1902009-07-21 12:06:46 +0000426
Clement Escoffier3e0db1e2009-01-15 15:35:17 +0000427 </div>
428 </body></html>