2

根据另一篇文章 [1],通过 JNDI 查找调用会话 EJB 和使用 @EJB 注释之间没有区别。但是,在以下场景中:

1.- 调用会话 EJB1(JDBC 插入此处) 2.- 从 EJB1,调用会话 EJB2(更多插入此处) 3.- 回滚事务(从 EJB1)

如果我使用@EJB 注释它可以正常工作,但是使用JNDI 查找它不会,第二个EJB 中的事务是一个新的并且不会发生回滚。所有这一切都与 CMT 相关。

我在 Geronimo/ibmwasce-2.1.1.6 中部署了所有这些东西。

¿ 我是否需要将事务从一个 EJB 显式传递到另一个?我以为这是连续工作。¿ 有什么线索吗?

[1] @EJB 注释与 JNDI 查找

更新:

通过注释的代码:

@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");

交易代码是一样的。

4

1 回答 1

3

看来,您有事务传播问题。

问题似乎是,在您的JNDI查找中,您搜索远程 EJB(不是本地),它不会与 EJB1 相同的事务上下文中执行。

当使用@EJB上面的注解时,本地实现被注入,具有相同的事务上下文。

于 2013-09-09T07:55:16.927 回答