現在、我々は、「プロセッサ」と呼ばれるWebサービスリクエストを処理するための精巧なPOJOオブジェクト構造を持っています。ステートレスセッションBeansリクエストでCDIを挿入
このリクエストの処理中に呼び出されるリモートEJBとローカルEJBは、ステートレスBeanで初期化され、各Webサービス要求中に再作成されるこの「プロセッサ」コンストラクタに渡されます。
私は深いダウン私の「プロセッサ」でJNDIルックアップに戻したくない場合
は、私は私のコードを介してすべてのこれらのEJBの周りをドラッグし続けます。CDIと入力します。これらのEJBを私がこの「プロセッサ」に必要とする度に注入できるようにしたいと思います。
しかし、これは、現在の 'プロセッサ'がCDI Beanになる必要があることにも気付きました。つまり、Webサービスを実装するステートレスセッションBeanの@Injectを使用します。
私は、このプロセッサのentiryライフサイクル行う
は、そのサービスBeanにしていない要求に結合するようになります。突然私はこの状態が複数のWebサービス呼び出しの間で共有されるので、私は、プロセッサ内(注入オブジェクト以外の)状態を維持するべきではない考慮しなければなりません。プログラマーとして、これは私の人生をより簡単にしていません。
So:どうすればいいですか?私はスコープについて読んだことがありますが、これが私を助けてくれるかどうかはわかりません。
例、ステートレスビーン:
@Stateless
@WebService
public class ExampleBean {
@Inject
Processor requestScopedInstance;
int beanDependentScopeCounter;
public String sayHello() {
System.out.println("bean object id: " + this.toString());
return requestScopedInstance.sayHello(beanDependentScopeCounter++);
}
}
インタフェース:
public interface Processor {
String sayHello(int beanScopedCounter);
}
実装:
public class ProcessorImpl implements Processor {
private int requestScopedCounter = 0;
@Override
public String sayHello(int beanScopedCounter) {
return "test, requestScoped: " + requestScopedCounter++ + ", beansScoped: " + beanScopedCounter;
}
}
ありがとう..私は例を追加しました。単に 'ProcessorImpl'の上に' @ RequestScope'を追加するだけで私の問題が解決されました。 – sjaak