根据另一篇文章 [1],通过 JNDI 查找调用 session EJB 和使用 @EJB 注释没有区别。但是,在以下场景中:
1.- 调用 session EJB1(JDBC 在此插入) 2.- 从 EJB1 调用 session 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");
交易代码是一样的。
最佳答案
您似乎遇到了事务传播问题。
问题似乎是,在您的JNDI
查找中,您搜索远程EJB(不是本地),它NOT得到在与 EJB1 相同的事务上下文中执行。
当使用上面的@EJB
注释时,本地实现被注入(inject),具有相同的事务上下文。
关于jpa - @EJB注释与JNDI查找+事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18633557/