Не думаю, что вы поняли ответственность класса UserTransaction
. Он не существует, чтобы предоставить вам доступ к текущей запущенной транзакции. Он используется для инициирования любого взаимодействия с менеджером транзакций контейнера, особенно для начала и окончания транзакций, управляемых компонентом; поэтому вы не должны получать к нему доступ из контекста управляемой транзакции контейнера.
Хотелось бы узнать, есть ли другой способ получить доступ к методу getStatus ()?
Нет, никто не может, по крайней мере, не использовать EJB API. Максимум можно использовать перехватчики EJB для регистрации факта вызова методов EJB. Вам нужно быть достаточно умным, чтобы отслеживать состояние между вызовами, а затем выводить состояние транзакции.
Если вы не против использовать специфичные для контейнера API, вы можете получить доступ к базовой транзакции. Будьте предупреждены, поскольку приведенный ниже подход может не сработать, если вы не знаете, как его использовать, или если контейнер запрещает вам это делать . Описанный ниже механизм заключается в том, что SpringFramework получает доступ к диспетчеру транзакций JTA и может создавать транзакции и управлять ими.
В случае Oracle WebLogic можно получить ссылку на TranactionHelper class
, которую можно использовать для получения ссылки на текущую транзакцию , связанную с потоком, чей статус может быть получен. Я бы указал на источники Transaction SPI для JTA в среде Spring , если вам нужно пройти этот курс для других серверов приложений.