Google Guice'D 독립형 일괄 처리의 JSR-352
-
21-12-2019 - |
문제
Java SE 7 및 Guice 와 함께 javax.batch 1.0을 사용하여 일괄 처리를 시도하고 있습니다.
JSREE 7 문서를 읽는 JSR-352 GlassFish에서 실행할 코드를 분명히 설정하고 외부에서 실행하는 방법에 대해 언급하지 않았습니다.
지금 내 문제는 CDI 을 통해 자동으로 주입 해야하는 JobContext 인터페이스에 관한 것입니다.다음과 같은 것을 시도하십시오 :
@Provides
@Inject
JobContext providesJobContext(Provider<JobContext> provider) {
return provider.get()
}
.
는 개념적으로 잘못되어 StackOverflowerROR (그래서 여기에 있습니다 :>). 정말로 필요합니까?예제 작업 속성에 도달하는 데 주입됩니다.내가 그들을 도달 할 수 있을까요, 어쩌면,
jobOperator.getParameters(<executionID>)
.
?
고맙습니다.
나는 결코 용접을 사용하지 않았습니다 (그것은 이해할 때, Java SE에 CDI를 제공 할 것입니다).
해결책
API 설명
첫째, "작업 속성"과 "작업 매개 변수"사이를 명확히하기 위해
"작업 매개 변수"는 JobOperator#start(String,Properties)
및 JobOperator#restart(long,Properties)
에 전달 된 속성 입니다.
generacodicicetagcode를 통해 액세스 할 수있는 "작업 속성"은 / job / properties 요소의 자식입니다.
e.g. 이 작업은 객체에 반환 된 두 가지 속성이 있습니다. JobContext#getProperties()
<job>
<properties>
<property name="initialAmount" value="100" />
<property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
</properties>
</job>
.
작업 매개 변수는 작업 속성 정의에 대한 값의 하나의 값을 하나의 가능합니다.
Parameters Access, PergenacodiceTag 코드에 대해서는 현재 실행 ID를 가져 오는 가장 자연스러운 방법이 삽입되는 데 문제가있는 것과 동일한 컨텍스트에서 가장 자연스러운 방법이기 때문에 많은 도움이되지 않습니다.
guice
GLASSFISH에 포함 된 JSR 352 참조 구현 ( JBATCH )을 참조하는 것처럼 들린다.
우리는 유도 의존성 주사로 많은 생각을주지 않았고, 나는 심지어 언급하는 데 도움이되는지 여부를 알 수있는 전문가가 충분하지 않다는 것이 사실입니다.
용접을 사용하여 GlassFish에서 우리는 일괄 런타임이 배치 정의 된 주입 지점을 채우기 위해 실제로 기술을 사용합니다.
public class BatchProducerBean {
...
@Produces
@Dependent
public JobContext getJobContext() {
...
return JobContextImpl;
}
}
.
JBATCH와의 유도 통합에 대해 더 많이 듣게되어 기쁩니다. 당신은 프로젝트 소스의 집에서 후속 조치를 취할 수 있습니다 (아직 아직 실제 위키 없음)
다른 팁
용접은 JAVAEE 6에서 CDI를 가져 오는 JSR-299의 참조 구현입니다. 이 참조 구현은 GlassFish에 포함되어 효과적으로 사용할 수 있습니다.
Oracle에서 발견 된 예제 여기 :
@Named
public class SimpleItemReader
extends AbstractItemReader {
@Inject
private JobContext jobContext;
...
}
.
인용구 :
나는 용접을 사용하지 않았다
여기서는 JSR의 사양을 구현하기 때문에 구현이 중요하지 않습니다.