使用@EJB注入@Stateless Bean或直接使用@inject的优点

时间:2018-06-10 16:54:58

标签: java java-ee ejb ejb-3.0 ear

我正在开发一个用EJB开发的旧项目。

我的serviceImpl为@Stateless(mappedName = "adminService")。我在我的项目中已经看到

在其他类中注入此类
@EJB(mappedName = "java:app/adminServices/adminServiceImpl")

和其他类是同一个EAR的一部分,但是不同的模块。此serviceImpl类仅在此EAR中使用。

所以我的问题是,如果我们有一个声明为@Stateless的类并且没有在其他EAR中使用。此类正在相同的EAR模块中使用。那么,我们不能直接使用@Inject而不声明@Stateless吗?

我知道EJB的三种JNDI语法

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中,那么如果无状态bean实例在其他JVM中,你需要进行RMI调用以获取对象。所以我必须使用java:global语法从其他JVM获取无状态bean实例,即使在同一个JVM中也是如此。因为我不认为我们可以使用@Inject将实例从另一个EAR项目中获取到您的EAR中。

但是在相同的JVM和相同的EAR中,如果bean不是@EJB,则需要java:app和java:模块JNDI语法来通过singleton注释获取实例。 我可以直接使用@Inject

0 个答案:

没有答案