2

OK、SEAM (2.1.1.GA) に問題があり、意味がわかりません。

セッション スコープであり、@AutoCreate で注釈が付けられたコンポーネントがあります。

コンポーネントには、@Create アノテーションが付けられた作成メソッドがあります。

問題は、BEFORE THE CREATE METHOD COMPLETES seam が同じコンポーネント インスタンスで別のメソッドを呼び出していることです。作成メソッドが完了していないため、この 2 番目のメソッドはエラーをスローしています。

これは予想される動作ですか?確かに、作成の実行が完了するまで、コンポーネントへの他の呼び出しはブロックされるべきですか?!

誰かこれについて何か知っていますか...私はちょっと頭がおかしいです。この時点で、私は問題を回避しようとしていますが、そもそもこれは問題ではないようです。

4

2 に答える 2

3

2番目のメソッドを呼び出すのは何ですか?

起動時に自動作成される別の Bean である場合は、最初の Bean を依存関係として配置します。

@AutoCreate
@Startup(depends={"firstBean"})
@Name("secondBean")
public class SecondBean() {
...
}
于 2009-10-01T17:08:59.603 に答える
2

古い質問ですが、今日この質問に出くわしたので、他の人に役立つかもしれません。

Component.newInstance() の機能は次のとおりです。

instance = instantiate();

if (getScope()!=STATELESS) {
   //put it in the context _before_ calling postconstuct or create
   getScope().getContext().set(name, instance); 
}

postConstruct(instance);

if (getScope()!=STATELESS) {
   callCreateMethod(instance);

   if (Events.exists()) {
       Events.instance().raiseEvent("org.jboss.seam.postCreate." + name, instance);
   }
}

したがって、一連のイベントは次のとおりです。

  1. コンポーネントをインスタンス化する
  2. コンポーネントを Session スコープに配置します
  3. @Createメソッドを呼び出す

@Createステップ 2 は、メソッドが終了する前に、コンポーネントの他のメソッドを他のスレッドから呼び出すことができることを意味します。

それが問題です。それを Seam のバグと呼んでください。私の場合、代わりにコンストラクターを使用して回避できました@Create

于 2012-07-30T01:24:31.710 に答える