JSR-352 в автономном пакете Google Guice
-
21-12-2019 - |
Вопрос
Я пытаюсь сделать пакетная обработка с использованием javax.batch 1.0 с Java SE 7 и Guice.
Читая документацию JavaEE 7 о JSR-352, они, очевидно, настраивали код для выполнения внутри Glassfish, и я не нашел упоминаний о том, как запускать его снаружи.
Сейчас моя проблема связана с интерфейсом JobContext, который должен автоматически вводиться через CDI:как это сделать с помощью Guice?Пробую что-то вроде:
@Provides
@Inject
JobContext providesJobContext(Provider<JobContext> provider) {
return provider.get()
}
концептуально неверно и приводит к StackOverflowError (и вот я здесь :>).Действительно ли это необходимо?Примеры внедряют его для доступа к свойствам задания.Могу ли я связаться с ними, может быть, через
jobOperator.getParameters(<executionID>)
?
Спасибо.
Я никогда не использовал Weld (который, насколько я понимаю, обеспечивал CDI на Java SE), поэтому единственной альтернативой был Spring Batch.
Решение
Объяснение API
Во-первых, чтобы уточнить между «свойствами задания» и «параметрами задания».
«Параметры задания» — это Характеристики перешел в JobOperator#start(String,Properties)
и JobOperator#restart(long,Properties)
.
«Свойства задания», доступные через JobContext#getProperties()
являются детьми /работа/свойства элемент.
Например.это задание имеет два свойства в объекте, возвращаемом: JobContext#getProperties()
<job>
<properties>
<property name="initialAmount" value="100" />
<property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
</properties>
</job>
Таким образом, параметр задания — это лишь один из возможных источников значений для определения свойства задания.
Что касается доступа к параметрам, JobOperator.getParameters(long executionId)
, это, вероятно, вам не очень поможет, поскольку наиболее естественный способ получить текущий идентификатор выполнения — из того же контекста, с внедрением которого у вас возникли проблемы.
SE с Guice
Похоже, вы имеете в виду эталонную реализацию JSR 352 (jbatch, включен в Glassfish).
Это правда, что мы не особо задумывались о SE с внедрением зависимостей Guice, и я не настолько эксперт, чтобы знать, поможет ли это вообще упомянуть.
Что касается Weld, то в Glassfish мы действительно используем подобную технику, позволяющую среде пакетного выполнения заполнять определенные пакетом точки инъекции.
public class BatchProducerBean {
...
@Produces
@Dependent
public JobContext getJobContext() {
...
return JobContextImpl;
}
}
Я был бы рад услышать больше об интеграции Guice с jbatch.Вы можете найти источник проекта дома (настоящей Wiki пока нет). на GitHub
Другие советы
Шварда - это эталонная реализация JSR-299, которая приносит CDI в Javaee 6. Эта эталонная реализация включена в GlassFish, чтобы вы могли эффективно использовать его.
ПримерПример от Oracle Найдено Здесь :
@Named
public class SimpleItemReader
extends AbstractItemReader {
@Inject
private JobContext jobContext;
...
}
.
Цитата:
Я никогда не использовал сварки
Здесь реализация не имеет значения, потому что она просто реализует спецификацию JSR.