<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>ThreadContextMigrator (Apache Axis2)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="ThreadContextMigrator (Apache Axis2)";
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!--   -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ThreadContextMigrator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/axis2/util/TargetResolver.html" title="interface in org.apache.axis2.util"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/axis2/util/ThreadContextMigratorUtil.html" title="class in org.apache.axis2.util"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/axis2/util/ThreadContextMigrator.html" target="_top">Frames</a></li>
<li><a href="ThreadContextMigrator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.axis2.util</div>
<h2 title="Interface ThreadContextMigrator" class="title">Interface ThreadContextMigrator</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../org/apache/axis2/jaxws/addressing/migrator/EndpointContextMapMigrator.html" title="class in org.apache.axis2.jaxws.addressing.migrator">EndpointContextMapMigrator</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="strong">ThreadContextMigrator</span></pre>
<div class="block">This is the interface for a piece of code that will plug into the user
 programming model impl (e.g. JAX-WS impl) and will be invoked while on the
 ultimate thread of execution.  It is intended to provide a mechanism to
 allow information to be migrated between the Axis2 contexts and thread
 local storage.
 <p/>
 Note: It is up to each particular programming model impl to decide whether
 or not they wish to make use of the ThreadContextMigrators.
 <p/>
 For each general MEP, here is the invocation pattern:
 <p/>
 [one-way inbound]
 migrateContextToThread(req)
 cleanupThread(req)
 <p/>
 [req/rsp inbound]
 migrateContextToThread(req)
 migrateThreadToContext(rsp)
 cleanupContext(rsp)
 cleanupThread(req)
 <p/>
 [one-way outbound]
 migrateThreadToContext(req)
 cleanupContext(req)
 <p/>
 [req/rsp outbound (both sync and async)]
 migrateThreadToContext(req)
 cleanupContext(req)
 migrateContextToThread(rsp)
 Note: there is no corresponding cleanupThread(rsp); one of the inbound
 cases would need to handle this
 <p/>
 If a fault occurs during execution of one of the migrators, it will be
 treated like any other service fault (i.e. like what will happen if we can't
 deliver the message to a service or if a handler fails.
 <p/>
 The cleanup* methods can be expected to be invoked after any exeception
 that occurs within the scope of the migration that would cause that scope
 to be left so that the thread and/or context may be cleaned up properly.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/axis2/util/ThreadContextMigrator.html#cleanupContext(org.apache.axis2.context.MessageContext)">cleanupContext</a></strong>(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</code>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to be on the thread of execution that will be used in user
 space, after all processing has completed (i.e. when the particular
 processing of a message is unwinding.)</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/axis2/util/ThreadContextMigrator.html#cleanupThread(org.apache.axis2.context.MessageContext)">cleanupThread</a></strong>(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</code>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to still be on the thread of execution that was used in user
 space, after all processing has completed (i.e. when the particular
 processing of a message is unwinding.)</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/axis2/util/ThreadContextMigrator.html#migrateContextToThread(org.apache.axis2.context.MessageContext)">migrateContextToThread</a></strong>(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</code>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to be on the thread of execution that will be used in
 user space.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/axis2/util/ThreadContextMigrator.html#migrateThreadToContext(org.apache.axis2.context.MessageContext)">migrateThreadToContext</a></strong>(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</code>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to still be on the thread of execution that was used in
 user space.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="migrateContextToThread(org.apache.axis2.context.MessageContext)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>migrateContextToThread</h4>
<pre>void&nbsp;migrateContextToThread(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)
                            throws <a href="../../../../org/apache/axis2/AxisFault.html" title="class in org.apache.axis2">AxisFault</a></pre>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to be on the thread of execution that will be used in
 user space.  It will be invoked for incoming messages.
 Implementations of this interface can use the information found in the
 MessageContext to determine whether a request or response is being
 processed.
 (e.g. MessageContext.getAxisOperation().getMessageExchangePattern())</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>messageContext</code> - </dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/axis2/AxisFault.html" title="class in org.apache.axis2">AxisFault</a></code></dd></dl>
</li>
</ul>
<a name="cleanupThread(org.apache.axis2.context.MessageContext)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cleanupThread</h4>
<pre>void&nbsp;cleanupThread(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</pre>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to still be on the thread of execution that was used in user
 space, after all processing has completed (i.e. when the particular
 processing of a message is unwinding.)  It provides a mechanism which can
 be used to clean up the TLS.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>messageContext</code> - </dd></dl>
</li>
</ul>
<a name="migrateThreadToContext(org.apache.axis2.context.MessageContext)">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>migrateThreadToContext</h4>
<pre>void&nbsp;migrateThreadToContext(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)
                            throws <a href="../../../../org/apache/axis2/AxisFault.html" title="class in org.apache.axis2">AxisFault</a></pre>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to still be on the thread of execution that was used in
 user space.  It will be invoked for both outgoing messages.
 Implementations of this interface can use the information found in the
 MessageContext to determine whether a request or response is being
 processed.
 (e.g. MessageContext.getAxisOperation().getMessageExchangePattern())</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>messageContext</code> - </dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/axis2/AxisFault.html" title="class in org.apache.axis2">AxisFault</a></code></dd></dl>
</li>
</ul>
<a name="cleanupContext(org.apache.axis2.context.MessageContext)">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>cleanupContext</h4>
<pre>void&nbsp;cleanupContext(<a href="../../../../org/apache/axis2/context/MessageContext.html" title="class in org.apache.axis2.context">MessageContext</a>&nbsp;messageContext)</pre>
<div class="block">This method will be invoked when the processing of the message is
 guaranteed to be on the thread of execution that will be used in user
 space, after all processing has completed (i.e. when the particular
 processing of a message is unwinding.)  It provides a mechanism which can
 be used to clean up the MessageContext or restore TLS.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>messageContext</code> - </dd></dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar_bottom">
<!--   -->
</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ThreadContextMigrator.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/axis2/util/TargetResolver.html" title="interface in org.apache.axis2.util"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../org/apache/axis2/util/ThreadContextMigratorUtil.html" title="class in org.apache.axis2.util"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/axis2/util/ThreadContextMigrator.html" target="_top">Frames</a></li>
<li><a href="ThreadContextMigrator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &copy; <a href="https://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.</small></p>
</body>
</html>