私はEJBのenpointに注入される@TransactionScoped Beanを持っています。例えば私がEJBを介してEJBを呼び出すとJAX-RSエンドポイントでは、Beanの2つのインスタンスが作成されていることがわかります。なぜこの最初のBeanインスタンスが作成されるのか、私は不思議に思っています。それはペナラとワイルドフライで起こっています。2つのCDI @TransactionScoped Beanインスタンスが作成されました。どうして?
@TransactionScoped
public class TransactionBean implements Serializable {
private String data;
private static AtomicInteger counter = new AtomicInteger();
public TransactionBean() {
this.data = "TransactionBean #" + counter.getAndIncrement() + " created.";
System.out.println("Created " + this.data);
}
public String toString() {
return data;
}
}
は、私が作成した出力
- TransactionBean#0を参照してください。
- トランザクションビーン#1が作成されました。
#1インスタンスは、実際のトランザクションで使用されるインスタンスです。なぜこの最初のインスタンスが作成されますか?これらの特定のアプリケーションサーバーでのCDIの実装の詳細なのでしょうか、それとも意図的に起こっていますか?それはあなたが目撃何...ただ好奇心から
乾杯、 ダニエル
ほとんどの場合、プロキシの作成を目撃しています。詳細については、[this](http://stackoverflow.com/questions/18911646/constructor-of-cdi-managed-bean-is-invoked-twice-while-opening-the-page/18911939#18911939)を参照してください。 –
コンストラクタではなく '@ PostConstruct'メソッドを監視する方がよいでしょう。 –
ありがとう!リンクは非常に役立ちます。したがって、本質的には実装に起因します。詳細はプロキシの作成方法です。 @PostConstructのヒントも意味があります。 – 38leinad