为什么只有JNDI用于访问远程EJB(不同的JVM,不同主机)?为什么不使用@ EJB注释?
在所有EJB书中都提到您可以使用@EJB注释访问远程EJB。
示例:http://docs.oracle.com/javaee/7/tutorial/doc/ejb-intro004.htm
32.4.4远程客户端
企业bean的远程客户端具有以下特征。
它可以在与企业bean不同的机器和不同的JVM上运行 访问。(不需要在不同的JVM上运行。)
它可以是Web组件,应用程序客户端或其他企业bean
它可以是Web组件,应用程序客户端或其他企业bean。
对于远程客户端,企业bean的位置是透明的。
企业bean必须实现业务接口。也就是说,远程客户端可能不会 通过无接口视图访问企业bean。
要创建允许远程访问的企业bean,您必须:
使用@Remote注释装饰企业bean的业务接口:
@Remote public interface InterfaceName {...}
或者使用@Remote装饰bean类,指定业务接口或 接口:
@Remote(InterfaceName.class) 公共类BeanName实现InterfaceName {...}
客户端访问实现远程业务接口的企业bean是 通过依赖注入或JNDI查找完成。
通过获取对企业bean的远程业务接口的引用 依赖注入,使用javax.ejb.EJB注释并指定企业bean 远程业务接口名称:
@EJB示例示例;
通过JNDI获取对企业bean的远程业务接口的引用 查找,使用javax.naming.InitialContext接口的查找方法:
ExampleRemote示例=(ExampleRemote) InitialContext.lookup("的java:全球/对myApp / ExampleRemote&#34);
上面的文字不正确?我还没有看到任何使用依赖注入(@EJB)来访问远程EJB的代码。这是不可能的?
有几篇文章称,无法使用@ EJB注释来调用远程ejb:
PD:对不起。我的英语很基础。答案 0 :(得分:0)
我认为主要原因是通过
注入远程(不同的JVM)EJB实例 @EJB(lookup = "jndi_name")
仅受某些应用程序服务器支持,并且仅受特定配置支持。
即。只有在独立文件中定义remote-outbound-connection
时,JBoss 7+才支持它(并在包含对该连接的引用的已部署包的META-INF
文件夹中添加jboss-ejb-jar.xml)。 / p>
此外:
@EJB
只能在CDI托管bean中使用
使用此方法会强制您为每个连接定义一次连接属性,而使用编程查找时,您可以在每个请求中更改它们(如果需要,您可以手动处理上下文和连接)。