根据另一篇文章[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");
交易代码是一样的。
答案 0 :(得分:2)
看来,你有一个事务传播问题。
问题似乎是,在JNDI
查找中,您搜索远程EJB (非本地), NOT 会在与EJB1相同的事务上下文。
使用上面的@EJB
注释时,会注入本地实现,并使用相同的事务上下文。