Nie używaj interfejsu UserTransaction z komponentów bean transakcji zarządzanych przez kontener

Specyfikacja standardu Java EE wskazuje, że komponenty bean transakcji zarządzanych przez kontener (Container-Managed Transaction – CMT) mogą nie mieć dostępu do obiektu UserTransaction. Jednak serwer WebLogic obsługuje wyszukiwanie obiektu UserTransaction.

Ta reguła oznacza kod następującego typu:

Wyszukiwanie obiektu UserTransaction produktu WebLogic
< span class="Code"> < span class= "JavaType">UserTransaction< /span> xact = ctx.lookup("javax.transaction.UserTransaction");

LUB

< span class="Code"> < span class= "JavaType">UserTransaction< /span> xact = ctx.lookup("weblogic.transaction.UserTransaction");

Dostęp do obiektu UserTransaction jest niedozwolony w komponencie bean, w którym jest on oznaczany. Rozwiązanie zależy od tego, jakie działania próbuje wykonać kod w odniesieniu do obiektu UserTransaction. Należy sprawdzić użycia obiektu UserTransaction, aby określić, jak należy zmienić kod lub czy można usunąć odwołanie.

Jedną z alternatyw dla używania obiektu UserTransaction jest używanie interfejsu UOWManager. Działanie wyszukiwania tego menedżera obejmuje także wyszukiwanie JNDI, na przykład:

Wyszukiwanie interfejsu UOWManager

< span class="Code"> < span class= "JavaType"> UOWManager < /span> uowMgr = ctx.lookup(" java:comp/websphere/UOWManager ");

Inne możliwe podejście to użycie interfejsu SessionSynchronization, który udostępnia metody afterBegin, beforeCompletion i afterCompletion. Metoda beforeCompletion umożliwia przywrócenie poprzedniej wersji transakcji w razie wystąpienia błędu.