Спецификация EJB требует, чтобы этот сценарий работал, в зависимости от некоторых параметров конфигурации;Существуют опции конфигурации, которые могут его отключить.
Тот факт, что вы видите исключение NullPointerException, указывает на то, что WebSphere не знает о аннотации @EJB
для поля в классе SampleServiceRoot
.Согласно спецификации EJB, экземпляр SampleServiceRoot
не может быть создан, если аннотация @EJB
не может быть разрешена.Поскольку был создан экземпляр SampleServiceRoot
, вероятно, произошло одно из следующих действий:
1 - приложение выполнило new SampleServiceRoot
вместо того, чтобы искать его в JNDI.Это не похоже на вашу проблему, но хорошо перепроверить.
2 - Приложение содержит ejb-jar.xml
с настройкой metadata-complete="true"
.Когда это установлено, WebSphere не будет искать аннотации и поэтому не будет видеть или обрабатывать аннотацию @EJB
.Либо измените параметр на «ложь», либо добавьте <ejb-ref>
или <ejb-local-ref>
в файл ejb-jar.xml
.
3 - Однако приложение не имеет metadata-complete="true"
, когда приложение развертывается в WebSphere.была выбрана опция для установки метаданных.Эта опция изменит параметр завершения метаданных на «истина».Прекратите использовать эту опцию или добавьте <ejb-ref>
или <ejb-local-ref>
в файл ejb-jar.xml
.
4 - EJB содержится в модуле WAR уровня 2.4 или более ранней.В WebSphere аннотации для более старых модулей не обрабатываются.
5 - Приложение включает в себя копию класса javax.ejb.EJB
.WebSphere предоставляет класс javax.ejb.EJB
и загружается загрузчиком классов среды выполнения WebSphere.Если приложение также содержит класс javax.ejb.EJB
в пути к классам приложения, то загрузчик классов приложения загрузит другой экземпляр, и он не будет соответствовать экземпляру, используемому контейнером EJB.Если это произошло, в журналах должно быть предупреждение.
Так что да, ваш сценарий должен поддерживаться;однако спецификация допускает конфигурации, которые ее отключают.Вам просто нужно определить, какая опция конфигурации / упаковки привела к тому, что WebSphere не видит аннотацию @EJB
.