Weblogic 释放XAResource会话-手动登记

Weblogic 释放XAResource会话-手动登记,weblogic,Weblogic,在我们的MDB中,DB和Tibco外部服务器队列之间有一个Xatransaction。我们已经使用下面的方法登记了外部服务器XaResource MDB位于WebLogicServer10.3.6、JDK1.6上 init()--- XAConnection tempXAConn = xaConn; TibjmsXAConnectionFactory xaConnFactory = (TibjmsXAConnectionFactory)ServiceLocato

在我们的MDB中,DB和Tibco外部服务器队列之间有一个Xatransaction。我们已经使用下面的方法登记了外部服务器XaResource

MDB位于WebLogicServer10.3.6、JDK1.6上

init()---
        XAConnection tempXAConn = xaConn;

        TibjmsXAConnectionFactory xaConnFactory = (TibjmsXAConnectionFactory)ServiceLocator.getInstance().getJNDIReferencedObject(JMS_Q_CONNECTION_FACTORY_JNDI_XA);

       xaConn = xaConnFactory.createXAConnection(JMS_USER,JMS_PSWD);

getsession()---
XASession xaSession = xaConn.createXASession();
TransactionHelper txHelper = TransactionHelper.popTransactionHelper();
Transaction tx = txHelper.getTransaction();
tx.enlistResource(xaSession.getXAResource());
交易运作良好。我们使用一个连接,并为每条消息创建新的xasession

但问题在于释放资源。在几千个MSG之后,我看到堆中包含相同数量的Tibjmsxasession、Tibjmsxaresource和Tibjmslongkey对象。这导致了outofmemory问题

我们不能在事务之间使用session.close()

事务由容器管理。只有登记是手动完成的。

我使用了

tx.registerSynchronization(新会话同步())

SessionSynchronization实现同步,有两种方法完成后和完成前

session.close可以在完成后在内部调用。会话可以在threadlocal中维护