@EJB注释与JNDI查找+事务

时间:2013-09-05 10:12:01

标签: jpa java-native-interface ejb geronimo

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

交易代码是一样的。

1 个答案:

答案 0 :(得分:2)

看来,你有一个事务传播问题。

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

使用上面的@EJB注释时,会注入本地实现,并使用相同的事务上下文。