Index: src/main/java/org/apache/jackrabbit/jca/TransactionBoundXAResource.java =================================================================== --- src/main/java/org/apache/jackrabbit/jca/TransactionBoundXAResource.java (revision 1073434) +++ src/main/java/org/apache/jackrabbit/jca/TransactionBoundXAResource.java (working copy) @@ -34,6 +34,10 @@ this.xaResource = xaResource; this.connection = connection; } + + public void update( final XAResource res ) { + this.xaResource = res; + } public void commit(Xid arg0, boolean arg1) throws XAException { xaResource.commit(arg0, arg1); Index: src/main/java/org/apache/jackrabbit/jca/JCAManagedConnection.java =================================================================== --- src/main/java/org/apache/jackrabbit/jca/JCAManagedConnection.java (revision 1073434) +++ src/main/java/org/apache/jackrabbit/jca/JCAManagedConnection.java (working copy) @@ -57,7 +57,7 @@ /** * XAResource instance. */ - private final XAResource xaResource; + private XAResource xaResource; /** * Listeners. @@ -156,8 +156,8 @@ */ public void destroy() throws ResourceException { - cleanup(); - session.logout(); + this.session.logout(); + this.handles.clear(); } /** @@ -170,6 +170,11 @@ this.session.logout(); this.session = openSession(); this.handles.clear(); + if (this.mcf.getBindSessionToTransaction().booleanValue() && ( this.xaResource instanceof TransactionBoundXAResource)) { + ( (TransactionBoundXAResource) this.xaResource ).update( this.session.getXAResource() ); + } else { + this.xaResource = (XAResource) session; + } } }