【问题标题】:@EJB annotation vs JNDI lookup + transaction@EJB 注释与 JNDI 查找 + 事务
【发布时间】: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


【解决方案1】:

看来,您遇到了事务传播问题。

问题似乎是,在您的 JNDI 查找中,您搜索 remote EJB(非本地),而 NOT 在同一事务中执行上下文作为 EJB1。

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

【讨论】:

猜你喜欢
  • 2012-09-22
  • 2014-05-08
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
相关资源
最近更新 更多