同様の質問がありましたが、私がやろうとしていることは明らかにしていません。 CDIに変換するバッチジョブフレームワークを持つ古いSeam 2.xベースのアプリケーションがあります。ジョブフレームワークは、Seam Contextsオブジェクトを使用して会話を開始します。ジョブフレームワークは、Seam Contextsオブジェクトを介して、SLSBを含むチェーンを介した任意のサービスによってアクセスできるジョブ固有のデータ所有者(基本的にMap)も読み込みます。これらのサービスの中には、マップを更新できるものがあるため、ジョブの状態が変化し、レコードごとに検出される可能性があります。CDI会話を開始し、ステートレスセッションBeanに@ConversationScoped Beanを注入する
CDIのように、ジョブは@Inject
CDI会話オブジェクトになり、手動で会話を開始/終了します。 Map(MapBean
)を保持する新しいConversationScoped
beanも定義します。
最初に、Conversation.begin()メソッドが呼び出される前にジョブに@MapBean
を注入してジョブ固有のデータをロードできるようにする必要があります。コンテナはこのインスタンスをコールチェーンのサービスに渡すことを知っていますか?
これに関連して、この質問Is it possible to @Inject a @RequestScoped bean into a @Stateless EJB?によると、ConservationScoped
beanをSLSBに注入することは可能ですが、少し魔法のようです。 SLSBが別のプロセス(ジョブ、UIコールなど)で使用されている場合、呼び出しごとに個別のインスタンスが取得されますか?明確化および単純化されたクラス構造体の
編集:
MapBean
ジョブの特定のインスタンス/実行のためのデータを含む、ConversationScoped
オブジェクトであることが必要であろう。
@ConversationScoped
public class MapBean implements Serializable {
private Map<String, Object> data;
// accessors
public Object getData(String key) {
return data.get(key);
}
public void setData(String key, Object value) {
data.put(key, value);
}
}
ジョブがConversationScoped
次のようになります。
@ConversationScoped
public class BatchJob {
@Inject private MapBean mapBean;
@Inject private Conversation conversation;
@Inject private JobProcessingBean jobProcessingBean;
public void runJob() {
try {
conversation.begin();
mapBean.setData("key", "value"); // is this MapBean instance now bound to the conversation?
jobProcessingBean.doWork();
} catch (Exception e) {
// catch something
} finally {
conversation.end();
}
}
}
ジョブがSLSBを呼ぶかもしれない、とMapBean
ニーズの現在の対話スコープのインスタンスが利用できるようにする:
@Stateless
public class JobProcessingBean {
@Inject private MapBean mapBean;
public void doWork() {
// when this is called, is "mapBean" the current conversation instance?
Object value = mapBean.getData("key");
}
}
私たちの仕事SLSBフレームワークは非常に複雑ですが、SLSBは他の多くのサービスやローカルでインスタンス化されたビジネスロジッククラスを呼び出すことができ、これらのそれぞれは会話にアクセスする必要があります-scoped MapBean
。
要約:はいとはい。あなたのデザインは一般的にうまくいくはずです。今日後で試して回答を投稿する必要があります。 – user1803551