发布XASession XAResource - 手动登记

时间:2013-04-03 16:57:10

标签: weblogic

在我们的MDB中,我们在DB和Tibco外部服务器队列之间有一个Xatransaction。我们在下面使用了外国服务器XaResouce。

MDB位于Weblogic服务器10.3.6,JDK 1.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。

但问题是释放资源。在几千msgs之后,我看到堆包含相同数量的Tibjmsxasession,Tibjmsxaresource,Tibjmslongkey对象。这导致了内存问题。

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

交易是集装箱管理的。只有登记是手动完成的。

1 个答案:

答案 0 :(得分:0)

我用过

tx.registerSynchronization(new SessionSynchronization());

SessionSynchronization实现同步,并且在afterCompletion和beforeCompletion之后有2个方法。

可以在afterCompletion中调用session.close。会话可以在threadlocal中维护。