<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>ManagedConnection</title>
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="ManagedConnection";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<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="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="../../../javax/resource/spi/LocalTransactionException.html" title="class in javax.resource.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../javax/resource/spi/ManagedConnectionFactory.html" title="interface in javax.resource.spi"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/resource/spi/ManagedConnection.html" target="_top">Frames</a></li>
<li><a href="ManagedConnection.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../allclasses-noframe.html">All&nbsp;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">javax.resource.spi</div>
<h2 title="Interface ManagedConnection" class="title">Interface ManagedConnection</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ManagedConnection</span></pre>
<div class="block">ManagedConnection instance represents a physical connection
  to the underlying EIS.

  <p>A ManagedConnection instance provides access to a pair of 
  interfaces: <code>javax.transaction.xa.XAResource</code> and 
  <code>javax.resource.spi.LocalTransaction</code>.

  <p><code> XAResource</code> interface is used by the transaction 
  manager to associate and dissociate a transaction with the underlying 
  EIS resource manager instance and to perform two-phase commit 
  protocol. The ManagedConnection interface is not directly used 
  by the transaction manager. More details on the XAResource 
  interface are described in the JTA specification.

  <p>The LocalTransaction interface is used by the application server
  to manage local transactions.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../javax/resource/spi/ManagedConnectionFactory.html" title="interface in javax.resource.spi"><code>ManagedConnectionFactory</code></a>, 
<code>XAResource</code>, 
<a href="../../../javax/resource/spi/LocalTransaction.html" title="interface in javax.resource.spi"><code>LocalTransaction</code></a></dd>
</dl>
</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="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#addConnectionEventListener-javax.resource.spi.ConnectionEventListener-">addConnectionEventListener</a></span>(<a href="../../../javax/resource/spi/ConnectionEventListener.html" title="interface in javax.resource.spi">ConnectionEventListener</a>&nbsp;listener)</code>
<div class="block">Adds a connection event listener to the ManagedConnection 
  instance.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#associateConnection-java.lang.Object-">associateConnection</a></span>(java.lang.Object&nbsp;connection)</code>
<div class="block">Used typically by the container to change the association of an 
  application-level connection handle with a ManagedConnection 
  instance.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#cleanup--">cleanup</a></span>()</code>
<div class="block">Application server calls this method to force any cleanup on the 
  ManagedConnection instance.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#destroy--">destroy</a></span>()</code>
<div class="block">Destroys the physical connection to the underlying resource manager.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>java.lang.Object</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#getConnection-javax.security.auth.Subject-javax.resource.spi.ConnectionRequestInfo-">getConnection</a></span>(javax.security.auth.Subject&nbsp;subject,
             <a href="../../../javax/resource/spi/ConnectionRequestInfo.html" title="interface in javax.resource.spi">ConnectionRequestInfo</a>&nbsp;cxRequestInfo)</code>
<div class="block">Creates a new connection handle for the underlying physical connection 
  represented by the ManagedConnection instance.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../../javax/resource/spi/LocalTransaction.html" title="interface in javax.resource.spi">LocalTransaction</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#getLocalTransaction--">getLocalTransaction</a></span>()</code>
<div class="block">Returns an <code>javax.resource.spi.LocalTransaction</code> instance.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>java.io.PrintWriter</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#getLogWriter--">getLogWriter</a></span>()</code>
<div class="block">Gets the log writer for this ManagedConnection instance.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../javax/resource/spi/ManagedConnectionMetaData.html" title="interface in javax.resource.spi">ManagedConnectionMetaData</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#getMetaData--">getMetaData</a></span>()</code>
<div class="block">Gets the metadata information for this connection's underlying 
  EIS resource manager instance.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>javax.transaction.xa.XAResource</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#getXAResource--">getXAResource</a></span>()</code>
<div class="block">Returns an <code>javax.transaction.xa.XAresource</code> instance.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#removeConnectionEventListener-javax.resource.spi.ConnectionEventListener-">removeConnectionEventListener</a></span>(<a href="../../../javax/resource/spi/ConnectionEventListener.html" title="interface in javax.resource.spi">ConnectionEventListener</a>&nbsp;listener)</code>
<div class="block">Removes an already registered connection event listener from the 
  ManagedConnection instance.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/resource/spi/ManagedConnection.html#setLogWriter-java.io.PrintWriter-">setLogWriter</a></span>(java.io.PrintWriter&nbsp;out)</code>
<div class="block">Sets the log writer for this ManagedConnection instance.</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="getConnection-javax.security.auth.Subject-javax.resource.spi.ConnectionRequestInfo-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getConnection</h4>
<pre>java.lang.Object&nbsp;getConnection(javax.security.auth.Subject&nbsp;subject,
                               <a href="../../../javax/resource/spi/ConnectionRequestInfo.html" title="interface in javax.resource.spi">ConnectionRequestInfo</a>&nbsp;cxRequestInfo)
                        throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Creates a new connection handle for the underlying physical connection 
  represented by the ManagedConnection instance. This connection handle
  is used by the application code to refer to the underlying physical 
  connection. This connection handle is associated with its 
  ManagedConnection instance in a resource adapter implementation 
  specific way.</P>

  <P>The ManagedConnection uses the Subject and additional ConnectionRequest
  Info (which is specific to resource adapter and opaque to application
  server) to set the state of the physical connection.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>subject</code> - security context as JAAS subject</dd>
<dd><code>cxRequestInfo</code> - ConnectionRequestInfo instance</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>generic Object instance representing the connection 
                handle. For CCI, the connection handle created by a 
                ManagedConnection instance is of the type 
                javax.resource.cci.Connection.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - resource adapter internal error condition</dd>
<dd><code><a href="../../../javax/resource/spi/SecurityException.html" title="class in javax.resource.spi">SecurityException</a></code> - security related error condition</dd>
<dd><code><a href="../../../javax/resource/spi/CommException.html" title="class in javax.resource.spi">CommException</a></code> - failed communication with EIS instance</dd>
<dd><code><a href="../../../javax/resource/spi/EISSystemException.html" title="class in javax.resource.spi">EISSystemException</a></code> - internal error condition in EIS instance
                                 - used if EIS instance is involved in
                                   setting state of ManagedConnection</dd>
</dl>
</li>
</ul>
<a name="destroy--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>destroy</h4>
<pre>void&nbsp;destroy()
      throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Destroys the physical connection to the underlying resource manager.

  <p>To manage the size of the connection pool, an application server can 
  explictly call ManagedConnection.destroy to destroy a  
  physical connection. A resource adapter should destroy all allocated 
  system resources for this ManagedConnection instance when the method 
  destroy is called.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation failed</dd>
<dd><code><a href="../../../javax/resource/spi/IllegalStateException.html" title="class in javax.resource.spi">IllegalStateException</a></code> - illegal state for destroying connection</dd>
</dl>
</li>
</ul>
<a name="cleanup--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>cleanup</h4>
<pre>void&nbsp;cleanup()
      throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Application server calls this method to force any cleanup on the 
  ManagedConnection instance.
  
  <p>The method ManagedConnection.cleanup initiates a cleanup of the
  any client-specific state as maintained by a ManagedConnection instance.
  The cleanup should invalidate all connection handles that had been 
  created using this ManagedConnection instance. Any attempt by an application 
  component to use the connection handle after cleanup of the underlying
  ManagedConnection should result in an exception.

  <p>The cleanup of ManagedConnection is always driven by an application
  server. An application server should not invoke ManagedConnection.cleanup
  when there is an uncompleted transaction (associated with a 
  ManagedConnection instance) in progress. 

  <p>The invocation of ManagedConnection.cleanup method on an already 
  cleaned-up connection should not throw an exception.

  <p>The cleanup of ManagedConnection instance resets its client specific
  state and prepares the connection to be put back in to a connection
  pool. The cleanup method should not cause resource adapter to close
  the physical pipe and reclaim system resources associated with the
  physical connection.</div>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - resource adapter internal error condition</dd>
<dd><code><a href="../../../javax/resource/spi/IllegalStateException.html" title="class in javax.resource.spi">IllegalStateException</a></code> - Illegal state for calling connection
                                   cleanup. Example - if a localtransaction 
                                   is in progress that doesn't allow 
                                   connection cleanup</dd>
</dl>
</li>
</ul>
<a name="associateConnection-java.lang.Object-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>associateConnection</h4>
<pre>void&nbsp;associateConnection(java.lang.Object&nbsp;connection)
                  throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Used typically by the container to change the association of an 
  application-level connection handle with a ManagedConnection 
  instance. The container should find the right ManagedConnection 
  instance and call the associateConnection method.
  In order to set a Connection Handle as the active connection 
  handle, the container may also use the <code>associateConnection</code> 
  method to set the same <code>ManagedConnection</code> associated 
  with the Connection handle.

  <p>The resource adapter is required to implement the associateConnection
  method. The method implementation for a ManagedConnection should 
  dissociate the connection handle (passed as a parameter) from its 
  currently associated ManagedConnection and associate the new 
  connection handle with itself.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>connection</code> - Application-level connection handle</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - Failed to associate the connection
                                 handle with this ManagedConnection
                                 instance</dd>
<dd><code><a href="../../../javax/resource/spi/IllegalStateException.html" title="class in javax.resource.spi">IllegalStateException</a></code> - Illegal state for invoking this
                                 method</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - Resource adapter internal error 
                                 condition</dd>
</dl>
</li>
</ul>
<a name="addConnectionEventListener-javax.resource.spi.ConnectionEventListener-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addConnectionEventListener</h4>
<pre>void&nbsp;addConnectionEventListener(<a href="../../../javax/resource/spi/ConnectionEventListener.html" title="interface in javax.resource.spi">ConnectionEventListener</a>&nbsp;listener)</pre>
<div class="block">Adds a connection event listener to the ManagedConnection 
  instance.

  <p>The registered ConnectionEventListener instances are notified of
  connection close and error events, also of local transaction related
  events on the Managed Connection.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>listener</code> - a new ConnectionEventListener to be registered</dd>
</dl>
</li>
</ul>
<a name="removeConnectionEventListener-javax.resource.spi.ConnectionEventListener-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeConnectionEventListener</h4>
<pre>void&nbsp;removeConnectionEventListener(<a href="../../../javax/resource/spi/ConnectionEventListener.html" title="interface in javax.resource.spi">ConnectionEventListener</a>&nbsp;listener)</pre>
<div class="block">Removes an already registered connection event listener from the 
  ManagedConnection instance.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>listener</code> - already registered connection event listener to be 
                     removed</dd>
</dl>
</li>
</ul>
<a name="getXAResource--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getXAResource</h4>
<pre>javax.transaction.xa.XAResource&nbsp;getXAResource()
                                       throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Returns an <code>javax.transaction.xa.XAresource</code> instance. 
  An application server enlists this XAResource instance with the
  Transaction Manager if the ManagedConnection instance is being used
  in a JTA transaction that is being coordinated by the Transaction 
  Manager.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>XAResource instance</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code>NotSupportedException</code> - if the operation is not supported</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - resource adapter internal error condition</dd>
</dl>
</li>
</ul>
<a name="getLocalTransaction--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getLocalTransaction</h4>
<pre><a href="../../../javax/resource/spi/LocalTransaction.html" title="interface in javax.resource.spi">LocalTransaction</a>&nbsp;getLocalTransaction()
                              throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Returns an <code>javax.resource.spi.LocalTransaction</code> instance. 
  The LocalTransaction interface is used by the container to manage
  local transactions for a RM instance.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>LocalTransaction instance</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code>NotSupportedException</code> - if the operation is not supported</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - resource adapter internal error condition</dd>
</dl>
</li>
</ul>
<a name="getMetaData--">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMetaData</h4>
<pre><a href="../../../javax/resource/spi/ManagedConnectionMetaData.html" title="interface in javax.resource.spi">ManagedConnectionMetaData</a>&nbsp;getMetaData()
                               throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block"><p>Gets the metadata information for this connection's underlying 
  EIS resource manager instance. The ManagedConnectionMetaData 
  interface provides information about the underlying EIS instance 
  associated with the ManagedConenction instance.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>ManagedConnectionMetaData instance</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code>NotSupportedException</code> - if the operation is not supported</dd>
</dl>
</li>
</ul>
<a name="setLogWriter-java.io.PrintWriter-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setLogWriter</h4>
<pre>void&nbsp;setLogWriter(java.io.PrintWriter&nbsp;out)
           throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Sets the log writer for this ManagedConnection instance.

  <p>The log writer is a character output stream to which all logging and
  tracing messages for this ManagedConnection instance will be printed.
  Application Server manages the association of output stream with the
  ManagedConnection instance based on the connection pooling 
  requirements.</p>
  
  <p>When a ManagedConnection object is initially created, the default
  log writer associated with this instance is obtained from the 
  ManagedConnectionFactory. An application server can set a log writer
  specific to this ManagedConnection to log/trace this instance using
  setLogWriter method.</p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>out</code> - Character Output stream to be associated</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</dd>
<dd><code><a href="../../../javax/resource/spi/ResourceAdapterInternalException.html" title="class in javax.resource.spi">ResourceAdapterInternalException</a></code> - resource adapter related error condition</dd>
</dl>
</li>
</ul>
<a name="getLogWriter--">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getLogWriter</h4>
<pre>java.io.PrintWriter&nbsp;getLogWriter()
                          throws <a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></pre>
<div class="block">Gets the log writer for this ManagedConnection instance.

  <p>The log writer is a character output stream to which all logging and
  tracing messages for this ManagedConnection instance will be printed.
  ConnectionManager manages the association of output stream with the
  ManagedConnection instance based on the connection pooling 
  requirements.</p>

  <p>The Log writer associated with a ManagedConnection instance can be
  one set as default from the ManagedConnectionFactory (that created
  this connection) or one set specifically for this instance by the 
  application server.</p></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Character ourput stream associated with this Managed-
            Connection instance</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../javax/resource/ResourceException.html" title="class in javax.resource">ResourceException</a></code> - generic exception if operation fails</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>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<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="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="../../../javax/resource/spi/LocalTransactionException.html" title="class in javax.resource.spi"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../javax/resource/spi/ManagedConnectionFactory.html" title="interface in javax.resource.spi"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?javax/resource/spi/ManagedConnection.html" target="_top">Frames</a></li>
<li><a href="ManagedConnection.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../allclasses-noframe.html">All&nbsp;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 ======= -->
</body>
</html>
