2014-01-09 45 views
0

我试图让使用javax.batch 1.0的Java SE 7和吉斯一个批次。JSR-352在谷歌Guice'd单独批处理

阅读有关JSR-352的JavaEE 7文档他们显然建立被Glassfish的范围内执行的代码,我发现没有提到如何在外面跑了。

现在我的问题是关于JobContext接口,它应该通过CDI自动注入:如何使它与Guice?想是这样的:

@Provides 
@Inject 
JobContext providesJobContext(Provider<JobContext> provider) { 
    return provider.get() 
} 

概念是错误的,它导致的StackOverflowError(所以我在这里:>)。 真的有必要吗?示例注入它以达到Job属性。我可以达到他们,也许,通过

jobOperator.getParameters(<executionID>) 

谢谢。

我从来没有使用Weld(据我所知,它将在Java SE上提供CDI),所以唯一的选择是Spring Batch。

回答

1

API解释

首先,阐明“作业属性”和“作业参数”之间的关系。

“作业参数”是属性传递到JobOperator#start(String,Properties)JobOperator#restart(long,Properties)

通过JobContext#getProperties()可访问的“工作属性”是/job/properties元素的子代。

E.g.这项工作已在对象的两个属性被返回:JobContext#getProperties()

<job> 
    <properties> 
    <property name="initialAmount" value="100" /> 
    <property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" /> 
    </properties> 
</job> 

所以工作参数仅仅是一份工作属性定义值的可能来源。

就访问参数JobOperator.getParameters(long executionId)而言,这可能无助于您,因为获得当前执行ID的最自然的方式来自您在注入时遇到麻烦的相同环境。

SE与吉斯

这听起来像你指的是JSR 352的参考实现(jbatch,包括GlassFish中)。

的确,我们没有对Guice依赖注入给SE留下太多的思考,而且我还不足以让专家知道这是否有助于提及。

With Weld,在Glassfish中,我们确实使用了这样的技术来允许批处理运行时填充批处理定义的注入点。

public class BatchProducerBean { 
... 
@Produces 
@Dependent 
public JobContext getJobContext() { 
    ... 
     return JobContextImpl; 
    } 
} 

我很乐意听到关于Guice与jbatch集成的更多信息。您可以在家中跟进项目来源(还没有真正的Wiki)on GitHub

1

Weld是JSR-299的参考实现,它在JavaEE 6中引入了CDI。 该参考实现包含在Glassfish中,因此您可以有效地使用它。从Oracle

例发现here

@Named 
public class SimpleItemReader 
     extends AbstractItemReader { 

     @Inject 
     private JobContext jobContext; 
     ... 
} 

报价:

我从来没有使用焊接

这里实现不关系,因为,它只是实现的规范JSR。