blob: a8b66b0d7523f772c00bb14a8bd73cf34ddf3534 [file] [log] [blame]
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "../xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="../css/ot.css" />
<link rel="stylesheet" type="text/css" href="../css/otjld.css" />
<title>OT/J Language Definition v1.3.1</title>
</head>
<body class="otdt">
<div id="content">
<table class="nav">
<tr>
<td class="back"><a id="top"></a><a href="s5.2.html" rel="prev">&lt;&lt;&nbsp;&sect;5.2&nbsp;Explicit team activation</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s5.4.html" rel="next">&sect;5.4&nbsp;Guard predicates&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s5.html" rel="section">&sect;5&nbsp;Team Activation</a></div>
<div class="sect depth2" id="s5.3">
<h2 class="sect">&sect;5.3&nbsp;Implicit team activation<a class="img" href="s5.3.html"
title="PermaLink to &sect;5.3&nbsp;Implicit team activation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h2>
<p>Implicit team activation is intended to ensure that
whenever the control flow is passed to a team or one of its roles,
the team is implicitly activated for the current thread.
Implicit activation can be configured at different levels (see <a href="#s5.3.d" title="&sect;5.3.(d)&nbsp;Configuring implicit activation"
class="sect">&sect;5.3.(d)</a>).
</p>
<p>When implicit activation is enabled a programmer may assume,
that whenever a role forwards calls to its base object via callout,
the callin bindings of the same role will be active at that time.
Exceptions to this rule have to be programmed explicitly.
</p>
<div class="subsect depth3" id="s5.3.a">
<h4 class="subsect">(a)&nbsp;<span class="title">Team level methods</span><a class="img" href="s5.3.a.html"
title="PermaLink to (a)&nbsp;Team level methods"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>While executing a <strong>team level method</strong>, the target team
is always active. Activation is reset to the previous state
when leaving the team method, unless the team has been explicitly activated during
execution of the team method by a call to <code>activate()</code>.
Explicit activation is stronger than implicit activation and thus persists after the
team level method terminates. Ie., leaving a team level method will never reset
an explicit activation.
</p>
</div>
<div class="subsect depth3" id="s5.3.b">
<h4 class="subsect">(b)&nbsp;<span class="title">Methods of externalized roles</span><a class="img" href="s5.3.b.html"
title="PermaLink to (b)&nbsp;Methods of externalized roles"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>Invoking a method on an <strong>externalized role</strong>
(see <a href="s1.2.2.html" title="&sect;1.2.2&nbsp;Externalized roles" class="sect">&sect;1.2.2</a>) also has the
effect of temporary activation of the team containing the role for the current thread.
Regarding deactivation the rule of <a href="#s5.3.a" title="&sect;5.3.(a)&nbsp;Team level methods" class="sect">&sect;5.3.(a)</a> above applies accordingly.
</p>
</div>
<div class="subsect depth3" id="s5.3.c">
<h4 class="subsect">(c)&nbsp;<span class="title">Nested teams</span><a class="img" href="s5.3.c.html" title="PermaLink to (c)&nbsp;Nested teams"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>Implicit activation has additional consequences for nested teams
(see <a href="s1.5.html" title="&sect;1.5&nbsp;Team and role nesting" class="sect">&sect;1.5</a>):
</p>
<ul>
<li>Implicit activation of a team causes the activation of its outer teams.</li>
<li>Implicit deactivation of a team causes the deactivation of its inner teams.</li>
</ul>
</div>
<div class="subsect depth3" id="s5.3.d">
<h4 class="subsect">(d)&nbsp;<span class="title">Configuring implicit activation</span><a class="img" href="s5.3.d.html"
title="PermaLink to (d)&nbsp;Configuring implicit activation"><img style="vertical-align:text-top;margin-left:5px;" src="../images/permalink.png"
alt="" /></a></h4>
<p>Implicit activation is disabled by default and can be enabled by adding the annotation
<code>@org.objectteams.ImplicitTeamActivation</code>, which can be applied to a type or a method.
When applied to a method it is ensured that invoking this method will trigger implicit activation.
When the annotation is applied to a type this has the same effect as applying it to all externally
visible methods of the type. Member types are not affected and have to be annotated separately.
</p>
<p>The runtime environment can be configured globally by defining the system property
<code>ot.implicit.team.activation</code> to one of these values:
</p>
<dl>
<dt>NEVER</dt>
<dd>Implicit activation is completely disabled.</dd>
<dt>ANNOTATED</dt>
<dd>This is the default: implicit activation applies only where declared by <code>@ImplicitTeamActivation</code>.
</dd>
<dt>ALWAYS</dt>
<dd>Implicit activation applies to all externally visible methods (this was the default in OTJLD versions &le;1.2)</dd>
</dl>
</div>
<p>Note that among the different mechanisms for activation, <code>within</code> is strongest,
followed by <code>(de)activate()</code>, weakest is implicit activation. In this sense,
explicit imperative (de)activation may override the block structure of implicit activation
(by explicit activation within a team level method), but not that of a <code>within</code>
block (by deactivation from a within block).
</p>
</div>
<table class="nav">
<tr>
<td class="back"><a href="s5.2.html" rel="prev">&lt;&lt;&nbsp;&sect;5.2&nbsp;Explicit team activation</a></td>
<td class="top"><a href="index.html" rel="contents">&uarr;&nbsp;Table of Contents&nbsp;&uarr;</a></td>
<td class="next"><a href="s5.4.html" rel="next">&sect;5.4&nbsp;Guard predicates&nbsp;&gt;&gt;</a></td>
</tr>
</table>
<div class="breadcrumb"><a class="nav" href="s5.html" rel="section">&sect;5&nbsp;Team Activation</a></div>
</div>
<div id="footer">
<hr /><a class="w3c img" href="http://jigsaw.w3.org/css-validator/check/referer"
shape="rect"><img src="../images/valid-css2-blue.png" alt="Valid CSS!" height="31" width="88" /></a><a class="w3c img" href="http://validator.w3.org/check?uri=referer" shape="rect"><img src="../images/valid-xhtml10-blue.png" alt="Valid XHTML 1.0 Strict" height="31"
width="88" /></a><address>&copy; Stephan Herrmann, Christine Hundt, Marco Mosconi</address>
OT/J version 1.3.1 &mdash; last modified: 2013-05-28
</div>
</body>
</html>