При ближайшем рассмотрении выявляется ответ, отличный от предложенного выше.На самом деле я вижу, что запущенная мной UserTransaction осталась открытой, но CMT создал новую транзакцию при входе в метод EJB, несмотря на атрибут «Required».
Я полагаю, что это происходит из-за того, что я прервалправила.:) Вы не должны обращаться к API UserTransaction при использовании CMT.CMT с радостью проигнорировала мою UserTransaction и начала свою собственную, заняв свое место в качестве арбитра всех границ транзакции.Так как он начал транзакцию, он также совершил ее и, конечно, оставил мою UserTransaction нетронутой.
Мне кажется хрупким и глупым, возможно, наивным мнением, но кажется, что я согласен с «правилами», когда я их читаю,Я не знаю, почему CMT предпочитает не играть хорошо с UserTransactions, запущенными на более высоком уровне.Возможно, чтобы заставить разработчиков «делать правильные вещи J2EE» и создать еще один слой сессионных компонентов для обработки более широкого контекста транзакции.Это будет работать, потому что CMT будет управлять внешней транзакцией и, следовательно, будет хорошо с привлечением любых внутренних транзакций, и я считаю, что в таком случае «зонтичная» транзакция не будет зафиксирована внутренними EJB-компонентами;CMT будет ждать, пока внешняя транзакция завершится, а затем завершит все это.На самом деле, это должно было бы сделать.
Я не в настроении создавать больше сессионных EJB-компонентов в этом уже разложенном EJB-приложении, но, возможно, это единственное решение, за исключением возможности вытащить CMT из целой связки.места, которые я бы предпочел не трогать.