2014-01-09 78 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。