Преимущество использования @EJB для внедрения @Stateless Bean или непосредственного использования @inject - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над старым проектом, разработанным в EJB.

У меня есть serviceImpl как @Stateless(mappedName = "adminService").Я видел в своем проекте внедрение этого класса в другие классы

@EJB(mappedName = "java:app/adminServices/adminServiceImpl")

, и другие классы являются частью одного EAR, но разных модулей.Этот класс serviceImpl используется только в этом EAR.

Итак, мой вопрос: есть ли у нас класс, который объявлен как @Stateless и не используется в другом EAR.Этот класс используется в тех же модулях EAR.Так что мы не можем напрямую использовать @Inject, не объявив его @Stateless?

Мне известны три синтаксиса JNDI для EJB

java:global[/application name]/module name/enterprise bean name[/interface name]

java:module/enterprise bean name/[interface name]

java:app[/module name]/enterprise bean name[/interface name]

Не могу ли я использовать @Inject для java:app?

Почему мне нужно java:module в тех же модулях, я могу напрямую создатьобъект или использование @Inject.

В случае java:global я могу понять, если вы находитесь в другой JVM, тогда вам нужно сделать вызов RMI, чтобы получить объект, если экземпляр компонента без состояния находится в другой JVM.Поэтому я должен использовать синтаксис java:global для получения экземпляра компонента без сохранения состояния из другой JVM даже в той же JVM.Потому что я не думаю, что мы можем использовать @Inject, чтобы получить экземпляр из другого проекта EAR в ваш EAR.

Но в той же JVM и в том же EAR для чего нужны java: app и java: module JNDIсинтаксис для получения экземпляра с помощью аннотации @EJB, если компонент не singleton.Я могу напрямую использовать @Inject.

...