Sunday, November 16, 2008

Підключаємося до транзакції

Часом в проекті з CMT бінами потірібно працювати з ресурсами які немають підтримки JTA, але мають підтримку двофазних транзакцій (Наприклад з бінів потрібно робити запити до CORBA ресурсів). В таких випадках трохи не зрозуміло де для таких ресурсів потрібно починати і закінчувати транзакцію. І тут на допомогу приходить інтерфейс javax.transaction.Synchronization. Його реалізацію можна зареєструвати в поточній транзакції і відслідковувати коли визвати першу і другу фазу коміту. Отже реалізація має бути типу
public class MyResourceSynchronization implements Synchronization{
public void beforeCompletion() {
    myResource.validate();
}
public void afterCompletion(int status) {
    if(status==Status.STATUS_ROLLEDBACK)
        myResource.rollback();
    else
        myResource.commit();
}}
і чіпляємо його до транзакції наспуним чином
TransactionManager manager=(TransactionManager)sessionContext.getUserTransaction();
manager.getTransaction().registerSynchronization(new MyResourceSynchronization());

No comments:

Post a Comment