Вопрос

Я пытаюсь сделать пакетная обработка с использованием 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top