0

在我们的 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。

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

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

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

4

1 回答 1

0

我用了

tx.registerSynchronization(new SessionSynchronization());

SessionSynchronization 实现了 Synchronization,有 afterCompletion 和 beforeCompletion 2 个方法。

session.close 可以在 afterCompletion 内部调用。session 可以在 threadlocal 中维护。

于 2013-04-04T22:35:48.520 回答