2013-04-03 4 views
0

В нашем MDB у нас есть Xatransaction между DB и Tibco Foreign Server Queue. мы зачислили зарубежный сервер XaResouce, используя ниже.Освобождение XASession XAResource - ручной ввод

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() между транзакцией.

Сделка осуществляется через контейнер. только завершение выполняется вручную.

ответ

0

я использовал

tx.registerSynchronization (новый SessionSynchronization());

SessionSynchronization реализует синхронизацию и имеет 2 метода afterCompletion и beforeCompletion.

session.close можно назвать внутри afterCompletion. сеанс может поддерживаться в threadlocal.

Смежные вопросы