Могу ли я добавить свойства в JPA Entity Listener - PullRequest
4 голосов
/ 16 февраля 2009

Я мог бы прототипировать это и посмотреть, что произойдет, но я ленивый. Я хочу иметь возможность вставлять EJB3 в мой JPA Entity Listener, чтобы он мог получить доступ к функциональности EJB во время операции PrePersist. Это возможно? Если нет ... то в JBoss будет ли Listener создаваться один раз или один раз за вызов метода? Думаю, я пытаюсь понять, насколько легким будет каждый вызов с точки зрения поиска JNDI и т. Д.

Кто-нибудь знает хороший источник информации по этим темам, так как мой краткий поиск в Google ничего не дал.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2009

Вам придется прибегнуть к поиску JNDI для доступа к другим EJB-компонентам из вашего EntityListener. Я никогда не видел способа внедрить их напрямую - я предполагаю, что это из-за семантики EntityListener.

Что следует из моего опыта работы с JBoss 4.0.x и 4.2.x.

В качестве примера рассмотрим @PostPersist - с именем после выполняется оператор вставки. Есть две проблемы для рассмотрения:

  • База данных не будет отражать текущую сущность, если вы откроете другой сеанс для запроса (даже с поиском JNDI). нет гарантии , что транзакция будет зафиксирована только потому, что сеанс был сброшен. У вас не будет автоматически сгенерированных первичных ключей.

  • Слушатели сущности, похоже, не предназначены для чего-либо, кроме обновления управляемых полей или проверки целостности данных перед фиксацией (в отличие от триггера базы данных), что серьезно ограничивает их полезность. В частности, в JBoss вы даже не можете посмотреть текущий контекст безопасности, чтобы записать, кто вносит изменения. Это отстой.

Что касается количества прослушивателей сущностей, мой опыт в JBoss 4.2.x заключался в том, что существовал только один экземпляр , и методы были вызваны в контексте потока контейнера. Однако в кластерной установке это может быть не так. В любом случае, я бы порекомендовал вам НЕ кэшировать ваши ссылки в любых слушателях сущностей - не ясно, что именно JBoss может сделать их (пассивировать их? Я надеюсь, что нет, но вы никогда не знаете!).

0 голосов
/ 26 февраля 2009

Вы используете Spring? Если это так, вы можете использовать @ Configurable , и этот аспект внедрит ваши зависимости для вас.

...