現在のインスタンスが、必要な会話に関連付けられたものを処理するために使用されているものであるCDI conversation
ことを知っているだけで、プログラムでインスタンスを取得することは可能ですか? そして、可能であればどのように?thread
CDI request
特に、私がやりたいことはこれです:
@ConversationScoped
public class UnitOfWork {...}
public class Client {
@Inject transient UnitOfWork uof;
...
}
public class Room {
@Inject transient UnitOfWork uof;
...
}
uof
ただし、 @Inject アノテーションを適用する代わりに、プログラムによるメカニズムを使用してインスタンス変数を初期化します (Client
とRoom
はエンティティであり、注入をサポートしていないため)。
私はすでに、次の静的メソッドによって取得されたa
を使用して を注入しようとしました:UnitOfWork
BeanManager
public static <B> B getManagedBean(Class<B> type, Annotation... qualifiers) {
try {
BeanManager beanManager = InitialContext.doLookup("java:comp/BeanManager");
Set<Bean<?>> beans = beanManager.getBeans(type, qualifiers);
Bean<B> bean = (Bean<B>) beanManager.resolve(beans);
CreationalContext<B> cc = beanManager.createCreationalContext(bean);
return bean.create(cc);
} catch (NamingException e) {
throw new RuntimeException("", e);
}
}
しかし、問題は、上記のメソッドによって与えられた Bean が新しいものであり (呼び出しごとに新しいインスタンスが与えられる)、それが必要でClient
ありRoom
、同じ会話スコープのUnitOfWork
.