Вам придется прибегнуть к поиску JNDI для доступа к другим EJB-компонентам из вашего EntityListener. Я никогда не видел способа внедрить их напрямую - я предполагаю, что это из-за семантики EntityListener.
Что следует из моего опыта работы с JBoss 4.0.x и 4.2.x.
В качестве примера рассмотрим @PostPersist - с именем после выполняется оператор вставки. Есть две проблемы для рассмотрения:
База данных не будет отражать текущую сущность, если вы откроете другой сеанс для запроса (даже с поиском JNDI). нет гарантии , что транзакция будет зафиксирована только потому, что сеанс был сброшен. У вас не будет автоматически сгенерированных первичных ключей.
Слушатели сущности, похоже, не предназначены для чего-либо, кроме обновления управляемых полей или проверки целостности данных перед фиксацией (в отличие от триггера базы данных), что серьезно ограничивает их полезность. В частности, в JBoss вы даже не можете посмотреть текущий контекст безопасности, чтобы записать, кто вносит изменения. Это отстой.
Что касается количества прослушивателей сущностей, мой опыт в JBoss 4.2.x заключался в том, что существовал только один экземпляр , и методы были вызваны в контексте потока контейнера. Однако в кластерной установке это может быть не так. В любом случае, я бы порекомендовал вам НЕ кэшировать ваши ссылки в любых слушателях сущностей - не ясно, что именно JBoss может сделать их (пассивировать их? Я надеюсь, что нет, но вы никогда не знаете!).