現在、Java EE 7バッチAPIアプリケーションで作業中です。私のCDI Beanのライフサイクルが現在のジョブに関連していることを望みます。 実際には、このBeanに@JobScoped
のスコープがあります(ただし、APIには存在しません)。また、私は、この豆を私の職業クラスのいずれかに注射可能にしたいと思います。まずJava EE 7バッチAPI:ジョブスコープのCDI Beanを生成
は、私がJobScopedContext
などで、自分の@JobScoped
スコープを作成したいしかし、私は、バッチAPIは、Beanごとに一意のジョブIDを持つJobContext
豆を持っているという考えに付属しています。
このJobContext
を使用してジョブスコープBeanのライフサイクルを管理できるかどうかは疑問です。
@Alternative
public class JobScopedBean
{
private String m_value;
public String getValue()
{
return m_value;
}
public void setValue(String p_value)
{
m_value = p_value;
}
}
は、その後、私は現在のジョブに関連したJobScopedBean
を返します。このBeanのプロデューサーを持っているでしょうに(感謝:
例えば、私は仕事がスコープになりたい私の豆を持っているでしょうジョブごとに一意であるJobContext
)
public class ProducerJobScopedBean
{
@Inject
private JobContext m_jobContext;// this is the JobContext of Batch API
@Inject
private JobScopedManager m_manager;
@Produces
public JobScopedBean getObjectJobScoped() throws Exception
{
if (null == m_jobContext)
{
throw new Exception("Job Context not active");
}
return m_manager.get(m_jobContext.getExecutionId());
}
}
そして、私のJobScopedBean
のマップを保持している管理者:
もちろん、私は各ジョブの終了時に(JobListener
とCDI Event
を通して)JobScopedBean
の破壊を管理します。
私はこの解決策に間違っていると教えてもらえますか?
私には正しいようですが、何か不足している可能性がありますか?
これを処理するより良い方法がありますか?
ありがとうございました。
ありがとう@ k5_。これは、私が逃したポイント、私には恥です!もちろん、問題は@ApplicationScoped Beanです(実際には、@ApplicationScoped Beanの 'JobContext'も注入されると、注入されたBeanは@ApplicationScoped Beanに依存するため問題が発生します)。解決策の問題を指摘してくれてありがとう、私は何かが悪いことを知っていましたが、私はそれを理解できませんでした。 – Rouliboy
これを達成する唯一の方法と思われるカスタムCDIスコープで試してみます。 – Rouliboy