2014-01-09 4 views
0

Я пытаюсь сделать партию с использованием javax.batch 1.0 с Java SE 7 и Guice.JSR-352 в автономной партии Google Guice'd

Чтение документации JavaEE 7 о JSR-352 они, очевидно, устанавливают код, который должен быть выполнен в Glassfish, и я не нашел упоминания о том, как запустить его снаружи.

моя проблема связана с интерфейсом JobContext, который следует автоматически вводить через CDI: как это сделать с помощью Guice? Пытаясь что-то вроде:

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

концептуально неправильно, и это приводит к StackOverflowError (поэтому я здесь:>). Действительно ли это необходимо? Примеры вводят его для достижения свойств Job. Могу ли я связаться с ними, возможно, через

jobOperator.getParameters(<executionID>) 

?

спасибо.

Я никогда не использовал Weld (который, как я понял, предоставил бы CDI на Java SE), поэтому единственной альтернативой будет 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), это, вероятно, не поможет вам, так как наиболее естественным способом получить текущий идентификатор выполнения является тот же контекст, с которым вы столкнулись с проблемой инъекции.

SE с Guice

Похоже, что вы имеете в виду ссылочной реализации JSR 352 (jbatch, включенный в Glassfish).

Это правда, что мы мало думали о SE с инъекцией зависимости Guice, и мне недостаточно эксперта, чтобы знать, может ли это даже упоминать.

С помощью Weld в Glassfish мы фактически используем технику, подобную этой, чтобы позволить пакетному исполнению заполнять определенные пользователем точки впрыска.

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

Я был бы рад узнать больше об интеграции Guice с jbatch. Вы можете следить за домом для источника проекта (пока нет настоящей Wiki) on GitHub

1

Weld - эталонная реализация JSR-299, которая приносит CDI в JavaEE 6. Эта эталонная реализация включена в Glassfish, поэтому вы можете эффективно ее использовать.

Пример из Oracle найдено here:

@Named 
public class SimpleItemReader 
     extends AbstractItemReader { 

     @Inject 
     private JobContext jobContext; 
     ... 
} 

Цитата:

Я никогда не использовал Weld

Здесь реализация не имеет значения, потому что, он просто реализует спецификацию JSR.