質問
いくつかのCDIベースのプロジェクトのために、独自のコンテキストを持ちたいと思います。コンポーネントがどこに存在するかを分離できるように、カスタムスコープが必要です。
独自のコンテキストを実装するには、かなり自明のコンテキストインターフェイスを実装する必要がありますが、作成されたときにどのように、またはどこで定義するかを実際に定義する必要がありますか?
解決
私はまだこれをテストしていませんが、これはうまくいくと思います。アプリケーションで希望するカスタムスコープ/コンテキストごとに、コンテナが初期化されているときに拡張機能を介してそのコンテキストを追加する必要があります。
public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
CustomContext customContext = new CustomContext();
afterBeanDiscovery.addContext(customContext);
beanManager ...
}
さて、トリックは、そのコンテキストへの参照を保持する必要があるので、それを開始または停止したいときは、できることです。それは次のようなものです:
@Inject
protected HttpRequestLifecycle httpRequestLifecycle;
public void doSomething()
{
startContext();
doStuff();
stopContext();
}
public void startContext()
{
httpRequestContextLifecycle.getHttpRequestContext().activate();
}
それはそれをするべきであり、そこには豊富なドキュメントがないので、これが役立つことを願っています。
興味のある方は、こちらの情報源をご覧ください:http://github.com/walterjwhite/server.web.application
ウォルター
他のヒント
このdzoneの記事を確認してください: CDI 1.0およびスプリング3.1のカスタムスコープ (下半分)
所属していません StackOverflow