【发布时间】:2013-09-05 10:12:01
【问题描述】:
根据另一篇文章 [1],通过 JNDI 查找调用会话 EJB 和使用 @EJB 注释之间没有区别。但是,在以下情况下:
1.- 调用会话 EJB1(JDBC 插入此处) 2.- 从 EJB1 调用会话 EJB2(此处插入更多内容) 3.- 回滚事务(来自 EJB1)
如果我使用@EJB 注释它可以正常工作,但是使用JNDI 查找它不会,第二个EJB 中的事务是一个新的并且不会发生回滚。所有这一切都通过 CMT 实现。
我在 Geronimo/ibmwasce-2.1.1.6 中部署所有这些东西。
¿我是否需要将事务从一个 EJB 显式传递到另一个 EJB?我以为这是连续工作。 ¿ 有什么线索吗?
[1]@EJB annotation vs JNDI lookup
更新:
注释代码:
@EJB
private CodAppEjb codAppejbAnotacion;
通过 jndi 编写代码:
CodAppEjb codAppejb;
InitialContext ctx;
Properties properties= new Properties();
properties.setProperty("java.naming.provider.url", "ejbd://127.0.0.1:4201");
properties.setProperty("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
ctx = new InitialContext(properties);
codAppejb= (CodAppEjb) ctx.lookup("CodAppEjbBeanRemote");
交易代码是一样的。
【问题讨论】:
-
事务行为不应因查找与注入而异。我建议包括有效和无效的代码 sn-ps。我还必须指出,有状态会话 bean 是注入和 JNDI 不同的一个示例,因为 JNDI 必须用作“工厂”。
-
好的,我已经用代码sn-ps更新了帖子,谢谢bkail。
标签: jpa java-native-interface ejb geronimo