私はCDIスコープ理論に深く行くことがcouriousだった...と、まだ私はリクエストやセッションのコンテキストを自分自身で作成する必要があります。
もちろん、CDIの実装とアプリケーション固有です。
たとえば、Weldを使用してリクエストスコープが必要な場合は、org.jboss.weld.context.bound.BoundRequestContextを作成してアクティブ化できます。
/* Inject the BoundRequestContext. */
/* Alternatively, you could look this up from the BeanManager */
@Inject BoundRequestContext requestContext;
...
/* Start the request, providing a data store which will last the lifetime of the request */
public void startRequest(Map<String, Object> requestDataStore) {
// Associate the store with the context and activate the context
requestContext.associate(requestDataStore);
requestContext.activate();
}
/* End the request, providing the same data store as was used to start the request */
public void endRequest(Map<String, Object> requestDataStore) {
try {
/* Invalidate the request (all bean instances will be scheduled for destruction) */
requestContext.invalidate();
/* Deactivate the request, causing all bean instances to be destroyed (as the context is invalid) */
requestContext.deactivate();
} finally {
/* Ensure that whatever happens we dissociate to prevent any memory leaks */
requestContext.dissociate(requestDataStore);
}
}
あなたはBoundConversationContextのためにここにhttps://docs.jboss.org/weld/reference/latest/en-US/html/contexts.html
また情報と、この例を見つけたことができます。 セッションのスコープが少し難しくなっているので、アプリケーションで実際のセッションをサポートする必要があります。
あなたの答えに感謝します!私はあなたがリンクしたドキュメントを読んで、役に立つ情報を見つけました。残念ながら、私は 'BoundConversationContext'の使用方法をまだ理解していません:Beanにコンテキストを注入する必要があります。リクエストスコープを持ち、投稿したコードを"コピー - ペースト "したいですか?コードからこれらのメソッドを呼び出すか、コンテナで使用する必要がありますか?私は 'requestDataStore'を管理すべきですか? –
Scoped Beanにアクセスして後で非アクティブ化する前に、スコープコンテキストを関連付けてアクティブ化する必要があります。つまり、Beanの外で行う必要があります。あなたのケースでは、たとえば、何らかの種類の偶数またはデータが受信され、タイムアウト後にそれを非アクティブにすると、会話コンテキストを作成できます。 – temaleva