Я работаю над старым проектом, разработанным в 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
.