В чем причина EJB 2.x «Обнаружен повторный входящий вызов метода» Исключения? Как их решить? - PullRequest
2 голосов
/ 20 марта 2009

Я управляю унаследованным приложением EJB 2 CMP, работающим на сервере приложений JBoss 4.0.4 GA с развернутыми сессионными компонентами объекта / без состояния. Весь шаблонный код EJB генерируется с помощью XDoclet из аннотаций EntityEJB / EntityEJBManager.

Я заметил, что когда мой клиент с графическим интерфейсом вызывает метод фасада create, в моем журнале сервера появляется много случаев возникновения EJBException с сообщением «Обнаружен повторный вызов метода», которое откатывает транзакцию.

Что означает это исключение? Как мне избежать такой ошибки (которую, к сожалению, я пока не смог воспроизвести)


Обновление: Нашли эту ссылку, которая объясняет, что подразумевается под повторным входом , однако мне кажется, что она говорит, что мое приложение не может быть принято одновременно?

Ответы [ 3 ]

1 голос
/ 05 апреля 2009

Я видел это раньше, когда EJB1 вызывает EJB2, который вызывает обратно к EJB1 внутри контейнера как часть той же транзакции.

Вы можете указать контейнеру разрешить это, пометив EJB1 как входящий, что позволит к нему обращаться несколько раз в одной транзакции.

Это делается в дескрипторе развертывания со следующим тегом:

<reentrant>True</reentrant>

Должна быть соответствующая аннотация EntityEJB, которую XDoclet может использовать для ее генерации.

1 голос
/ 09 ноября 2010

мы только что столкнулись с той же проблемой, и наше решение было двояким. Во-первых, мы гарантируем, что ни один из ejb не имел атрибутов транзакции NotSupported в нашем ejb-jar.xml. Затем мы использовали «экземпляр на транзакцию» в качестве нашей стратегии оптимистичной блокировки. Это что-то вроде пояса и брекетов, но оно работает

0 голосов
/ 20 марта 2009

Это означает, что к рассматриваемому бину Entity нельзя получить доступ одновременно, что имеет смысл, поскольку оно может повредить данные.

...