jpa - @EJB注释与JNDI查找+事务

标签 jpa java-native-interface ejb geronimo

根据另一篇文章 [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/

相关文章:

java - StackOverflow 错误设置多对多关系 Spring JPA

java - JPA CascadeType.ALL 不删除子记录

c - 将数组转换为以一个数组作为成员的结构体是否安全?

java - 如何使用 Java native 接口(interface)将字节数组传递给以 char* 作为参数的 C 函数?

java - 一个 EBJ 项目包含另一个 EJB 项目,然后 javax.naming.NameAlreadyBoundException

java - 如何使用@PersistenceContext 注解的 `properties` 属性?

java - 从远程 EJB 调用返回大文件

java - JPA/Hibernate : How to scan particular package in Persistence. xml 代替给出单个实体名称?

Java Web Start - 使用另一个 native 依赖项加载 native 依赖项

java - 批量插入中的 Postgres 错误 : relation "hibernate_sequence" does not exist position 17