別の投稿 [1] によると、JNDI ルックアップを介してセッション EJB を呼び出すことと @EJB アノテーションを使用することに違いはありません。ただし、次のシナリオでは:
1.- セッション EJB1 を呼び出します (JDBC はここに挿入します) 2.- EJB1 から、セッション EJB2 を呼び出します (ここにさらに挿入します) 3.- トランザクションをロールバックします (EJB1 から)
@EJB アノテーションを使用すると問題なく動作しますが、JNDI ルックアップでは動作しません。2 番目の EJB のトランザクションは新しいトランザクションであり、ロールバックは発生しません。これはすべてCMTを使用しています。
これらすべてを Geronimo/ibmwasce-2.1.1.6 にデプロイしています。
¿ある EJB から別の EJB に明示的にトランザクションを渡す必要がありますか? コンティナーの仕事だと思っていました。手がかりは?
[1] @EJB アノテーション vs 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");
トランザクションコードはまったく同じです。