JSR-352 in Google Guice'd Standalone Batch
-
21-12-2019 - |
Domanda
Sto cercando di creare un lotto usando javax.batch 1.0 con Java SE 7 e GUIDA .
Leggere la documentazione Javaee 7 su JSR-352 Ovviamente configurano il codice da eseguire all'interno di Glassfish e non ho trovato menzione su come eseguirlo fuori.
Ora Il mio problema è sull'interfaccia di JobContext che dovrebbe essere automaticamente iniettata tramite CDI : Come farlo con la Guice?Provare qualcosa come:
@Provides
@Inject
JobContext providesJobContext(Provider<JobContext> provider) {
return provider.get()
}
.
è concettualmente sbagliato e conduce a Stackoverflowerror (quindi qui sono:>). È davvero necessario?Esempi iniettarlo per raggiungere le proprietà del lavoro.Potrei raggiungerli, forse, attraverso
jobOperator.getParameters(<executionID>)
.
?
Grazie.
Non ho mai usato la saldatura (che, come ho capito, fornirebbe CDI su Java SE) quindi l'unica alternativa sarebbe il lotto di molla.
Soluzione
spiegazione API
Primo, per chiarire tra "Proprietà del lavoro" e "Parametri di lavoro".
I "Parametri di lavoro" sono le proprietà passate al JobOperator#start(String,Properties)
e al JobOperator#restart(long,Properties)
.
Le "Proprietà del lavoro" Accessibile tramite JobContext#getProperties()
sono i figli dei / Job / Properties elemento.
E.G. Questo lavoro ha due proprietà nell'oggetto restituito da: JobContext#getProperties()
<job>
<properties>
<property name="initialAmount" value="100" />
<property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
</properties>
</job>
.
Quindi un parametro di lavoro è solo una possibile fonte di valori per una definizione di proprietà del lavoro.
Per quanto riguarda i parametri di accesso, JobOperator.getParameters(long executionId)
, questo probabilmente non ti aiuta molto dal momento che il modo più naturale per ottenere l'ID di esecuzione corrente è dallo stesso contesto che hai difficoltà a iniettare.
SE con GUIDA
Sembra che tu ti faccia riferimento all'implementazione di riferimento JSR 352 ( JBatch , incluso in Glassfish).
È vero che non abbiamo dato molto pensato a sé con iniezione di dipendenza da parte della chioma, e non sono abbastanza di un esperto sapere se questo aiuta anche a menzionare.
Con saldatura, in Glassfish utilizziamo effettivamente una tecnica come questa per consentire al rotazione del lotto di popolare i punti di iniezione definiti da batch.
public class BatchProducerBean {
...
@Produces
@Dependent
public JobContext getJobContext() {
...
return JobContextImpl;
}
}
.
Sarei felice di sapere di più sull'integrazione della Guice con JBatch. Potresti seguire la casa per la fonte del progetto (senza real wiki ancora) su github
Altri suggerimenti
Saldare è l'implementazione di riferimento del JSR-299 che porta CDI in Javaee 6. Questa implementazione di riferimento è inclusa in Glassfish in modo da poterlo utilizzare in modo efficace.
Esempio da Oracle ha trovato qui :
@Named
public class SimpleItemReader
extends AbstractItemReader {
@Inject
private JobContext jobContext;
...
}
.
Citazione:
.Non ho mai usato weld
Qui l'implementazione non importa perché, implementa la specifica del JSR.