blob: 82e762b178da9e358999019921b3a510c3bba1e9 [file] [log] [blame]
<!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 - Temporal Service Dependency</title>
<link rel="stylesheet" href="temporal-service-dependency_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="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>
<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><a href="http://felix.apache.org/site/downloads.cgi" rel="nofollow">downloads</a></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><a href="http://www.apache.org/" rel="nofollow">asf</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html" rel="nofollow">sponsors</a>
<!-- ApacheCon Ad -->
<iframe src="temporal-service-dependency_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" frameborder="0" height="135" width="135"></iframe>
<p style="height: 100px;">
<!-- ApacheCon Ad -->
</p></li></ul> </div>
<div class="main">
<style type="text/css">
@import url(http://people.apache.org/~clement/ipojo/site/superfish.css);
</style>
<style type="text/css">
@import url(http://people.apache.org/~clement/ipojo/site/style.css);
</style>
<p>
<script class="javascript" src="temporal-service-dependency_files/shCore.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushCSharp.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushPhp.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushJScript.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushVb.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushSql.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushXml.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushShell.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushDelphi.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushPython.js"></script>
<script class="javascript" src="temporal-service-dependency_files/shBrushJava.js"></script>
<script type="text/javascript" src="temporal-service-dependency_files/jquery-1.js"></script>
<script type="text/javascript" src="temporal-service-dependency_files/hoverIntent.js"></script>
<script type="text/javascript" src="temporal-service-dependency_files/superfish.js"></script>
<script type="text/javascript" src="temporal-service-dependency_files/supersubs.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("ul.sf-menu").supersubs({
minWidth: 14, // minimum width of sub-menus in em units
maxWidth: 30, // maximum width of sub-menus in em units
extraWidth: 1 // extra width can ensure lines don't sometimes turn over
// due to slight rounding differences and font-family
}).superfish(); // call supersubs first, then superfish, so that subs are
// not display:none when measuring. Call before initialising
// containing tabs for same reason.
});
</script>
</p><div class="main">
<div class="page-header">
<img src="temporal-service-dependency_files/header.png" class="header">
<a href="http://ipojo.org/"><img src="temporal-service-dependency_files/ipojo.png" class="header-logo" width="225"></a>
<ul class="sf-menu sf-js-enabled sf-shadow" id="ipojo-menu">
<li class="current">
<!-- Menu Overview -->
<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>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<li style="white-space: normal; float: left; width: 100%;">
<a style="float: none; width: auto;" href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home</a>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<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>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<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>
</li>
<li style="white-space: normal; float: left; width: 100%;">
<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>
</li>
</ul>
</li>
<li class="">
<!-- Menu download -->
</li><li>
<a href="http://felix.apache.org/site/download.html" title="Download">Download </a>
</li>
<li class="">
<!-- Menu Documentation -->
<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>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<!-- sub- menu : getting started -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<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>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
<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>
<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>
</ul>
</li> <!-- end of getting started -->
<!-- sub menu : Describing Components -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<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>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<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>
<li style="white-space: normal; float: left; width: 100%;"><a style="float: none; width: auto;" href="" title="Temporal Service Dependency">Temporal dependencies</a></li>
</ul>
</li> <!-- End of describing components -->
<!-- sub- menu : User Guide -->
<li style="white-space: normal; float: left; width: 100%;" class="">
<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>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
<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>
<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>
</ul>
</li> <!-- end of user guide -->
<!-- sub- menu : Dev Guide -->
<li class="" style="white-space: normal; float: left; width: 100%;">
<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>
<ul style="left: 14em; float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
</ul>
</li> <!-- End of Dev guide -->
</ul>
</li> <!-- End of doc -->
<!-- Menu 4 : Tools -->
<li class="">
<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>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
<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>
<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>
</ul>
</li><!-- End of tools -->
<!-- Menu 5 : Misc -->
<li class="">
<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>
<ul style="float: none; width: 14em; display: none; visibility: hidden;">
<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>
<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>
<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>
<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>
<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>
</ul>
</li><!-- End of misc -->
</ul> <!-- End of the menu -->
</div> <!-- Page header -->
<div class="content">
<h1><a name="TemporalServiceDependency-Thetemporaldependencyhandler"></a>The temporal dependency handler</h1>
<p><em>Regular service dependencies participate to the instance
lifecycle. Moreover, the injected service object is either available or
not available. A temporal dependency handler is a little different and
provides a different resolution pattern. Indeed, the temporal
dependency does not invalidate the instance. Moreover, if not
available, the temporal dependency waits (and so blocks the current
thread) for a provider. Of course, the maximum waiting time can be
specified. If a timeout occurs, the handler throws a runtime exception.</em></p>
<div class="toc">
<ul>
<li><a href="#TemporalServiceDependency-Usingthehandler">Using the handler</a></li>
<li><a href="#TemporalServiceDependency-Collectioninjection">Collection injection</a></li>
<li><a href="#TemporalServiceDependency-Proxyinjection">Proxy injection</a></li>
<li><a href="#TemporalServiceDependency-Download">Download</a></li>
</ul></div>
<h2><a name="TemporalServiceDependency-Usingthehandler"></a>Using the handler</h2>
<p>First of all, you need to configure the component type to use the handler such as:</p>
<div class="code">
<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;
&lt;component
className="org.apache.felix.ipojo.example.Temporal"&gt;
&lt;!-- Temporal dependency configuration --&gt;
&lt;temporal:requires field="mytemporal"/&gt;
&lt;provides/&gt;
&lt;/component&gt;
&lt;/iPOJO&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>Notice that, this handler is an external handler. So, it uses the "org.apache.felix.ipojo.handler.temporal" namespace.<br>
Once described, you can implement your component. The specified field
will be mapped to the temporal dependency. As for regular field
injection, aggregation, targeted service specification (i.e. interface)
is discovered automatically. Filter, comparator and binding policy are
also supported. However, the optional attribute is not supported. In
fact, this attribute is meaningless in the case of a temporal
dependency.<br>
Using the field in your code will try to find a matching service
provider. If a provider is available, the field receives the service
object immediately. Else, the thread is stopped and waits for a
provider. The default wait time is 3s (you can also specify this time).
If no provider is available after this time, the thread throws a
RuntimeException. If a provider becomes available during this time, the
field receives immediately the value and the execution can continue.<br>
Configuration</p>
<p>The handler has only one mandatory attributes:</p>
<ul>
<li>Field: the implementation field supporting the dependency</li>
</ul>
<p>The handler supports on specific optional attributes:</p>
<ul>
<li>Timeout: the maximum time waited in order to find a provider
(default: 3s). For an infinite timeout, the timeout value is either
"infinite" or "-1".</li>
<li>OnTimeout: specifies the action to do
when the timeout occurs. Four actions are supported: null, nullable,
empty-array, default-implementation. By default, no action is
specified, and an exception occurs when the timeout is reached.</li>
</ul>
<p>The attributes from "regular" dependencies are also supported (like filter).<br>
OnTimeout actions</p>
<p>When a timeout occurs, you can specify what the handler must do. By
default, it throws a runtime exception. However, four others actions
can be set in the 'onTimeout' attribute.</p>
<ul>
<li>The null action (onTimeout="null") will return "null" instead of the service object.</li>
<li>The
"nullable" action (onTimeout="nullable") will return a "Nullable"
object instead of the service object. This object is a fake but can be
used a regular service object. However, invoking actions on this object
will do nothing. In the case of aggregate dependency, an array
containing a "nullable" object is returned.</li>
<li>The empty action
is only supported for aggregate dependency (the field must be an
array). In this case, an empty-array is returned. (In the 1.2.0
version, the <tt>empty-array</tt> attribute became <tt>empty</tt>)</li>
<li>The
default-implementation action is a little different. Instead of
specifying the action, you need to specify the default-implementation
(the qualified class name) that you want to use. For example
onTimeout="o.a.f.i.MyDefaultLogServiceImpl". In this case, the handler
will inject an instance of this object instead of a real service
object. On aggregate dependency, an array with one
default-implementation object is returned.</li>
</ul>
<div class="code">
<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;
&lt;component
className="org.apache.felix.ipojo.example.Temporal"&gt;
&lt;!-- Temporal dependency configuration --&gt;
&lt;temporal:requires field="fs" timeout="300" ontimeout="nullable"/&gt;
&lt;provides/&gt;
&lt;/component&gt;
&lt;/iPOJO&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<h2><a name="TemporalServiceDependency-Collectioninjection"></a>Collection injection</h2>
<p>Temporal dependencies can also be injected inside Collection. To
achieve this, the 'specification' attribute must indicates the looked
specification, and the field must be a Collection.</p>
<div class="code">
<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;
&lt;component
className="org.apache.felix.ipojo.example.Temporal"&gt;
&lt;!-- Temporal dependency configuration --&gt;
&lt;temporal:requires field="mycollection" specification="my.service.specification"/&gt;
&lt;provides/&gt;
&lt;/component&gt;
&lt;/iPOJO&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<h2><a name="TemporalServiceDependency-Proxyinjection"></a>Proxy injection</h2>
<p>Temporal dependencies can also be injected as proxies. So it is possible to give the temporal dependency to helper object.<br>
On 'scalar' dependencies, the service lookup is executed during an
operation invocation. Timeout policies are also executed is the lookup
failed.<br>
On aggregate dependencies (necessary Collection), the service lookup is
executed when the iterator(), and toArray(...) methods are invoked.
Timeout policies <br>
are also executed if the lookup failed.</p>
<p>To set a temporal dependency as a proxy, just add the <tt>proxy</tt> attribute as follows:</p>
<div class="code">
<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;
&lt;component
className="org.apache.felix.ipojo.example.Temporal"&gt;
&lt;!-- Temporal dependencies configuration --&gt;
&lt;temporal:requires proxy="true" field="fs"/&gt;
&lt;temporal:requires proxy="true" field="mycollection" specification="my.service.specification"/&gt;
&lt;provides/&gt;
&lt;/component&gt;
&lt;/iPOJO&gt;</textarea>
<script class="javascript">
if(!window.newcodemacro_initialised)
{
window.newcodemacro_initialised = true;
window.oldonloadmethod = window.onload;
window.onload = function(){
dp.SyntaxHighlighter.HighlightAll('newcodemacro');
if(window.oldonloadmethod)
{
window.oldonloadmethod();
}
}
}
</script>
</div>
<p>By default, proxies are disabled.</p>
<h2><a name="TemporalServiceDependency-Download"></a>Download </h2>
<p>The handler is available on the <a href="http://felix.apache.org/site/download.html" title="Download">download</a> page.<br>
Sources 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>.
<br clear="all">
<br clear="all"></p>
</div>
<img src="temporal-service-dependency_files/footer.png" class="footer">
</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="temporal-service-dependency_files/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try{
var pageTracker = _gat._getTracker("UA-1518442-4");
pageTracker._trackPageview();
} catch(err) {}
</script>
</div>
</body></html>