Frage

Ich versuche eine zu machen Batch mit javax.batch 1.0 mit Java SE 7 und Guice.

Als ich die JavaEE 7-Dokumentation zu JSR-352 las, wurde offensichtlich der Code so eingerichtet, dass er in Glassfish ausgeführt werden soll, und ich fand keinen Hinweis darauf, wie er außerhalb ausgeführt werden soll.

Jetzt Mein Problem betrifft die JobContext-Schnittstelle, die automatisch über CDI eingefügt werden sollte:Wie macht man es mit Guice?Versuchen Sie so etwas wie:

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

ist konzeptionell falsch und führt zu StackOverflowError (also hier bin ich :>).Ist es wirklich notwendig?Beispiele fügen es ein, um Jobeigenschaften zu erreichen.Könnte ich sie vielleicht erreichen?

jobOperator.getParameters(<executionID>)

?

Danke schön.

Ich habe Weld nie verwendet (was meines Wissens CDI auf Java SE bereitstellen würde), daher wäre die einzige Alternative Spring Batch.

War es hilfreich?

Lösung

API-Erklärung

Zunächst muss die Unterscheidung zwischen „Jobeigenschaften“ und „Jobparametern“ klargestellt werden.

Die „Jobparameter“ sind die Eigenschaften an die übergeben JobOperator#start(String,Properties) und das JobOperator#restart(long,Properties).

Die „Job-Eigenschaften“, auf die über zugegriffen werden kann JobContext#getProperties() sind die Kinder der /job/properties Element.

Z.B.Dieser Job hat zwei Eigenschaften in dem von ihm zurückgegebenen Objekt: JobContext#getProperties()

<job>
   <properties>
    <property name="initialAmount" value="100" />
    <property name="bonusAmount" value="#{jobParameters['bonusAmount']}?:100;" />
   </properties>
</job>

Ein Jobparameter ist also nur eine mögliche Wertequelle für die Definition einer Jobeigenschaft.

Was den Zugriff auf Parameter betrifft, JobOperator.getParameters(long executionId), das hilft Ihnen wahrscheinlich nicht viel, da der natürlichste Weg, die aktuelle Ausführungs-ID zu erhalten, aus demselben Kontext besteht, in den Sie Probleme beim Einfügen haben.

SE mit Guice

Es hört sich so an, als ob Sie sich auf die JSR 352-Referenzimplementierung beziehen (jbatch, in Glassfish enthalten).

Es ist wahr, dass wir SE mit der Guice-Abhängigkeitsinjektion nicht groß berücksichtigt haben, und ich bin kein Experte genug, um zu wissen, ob es überhaupt hilfreich ist, das zu erwähnen.

Mit Weld verwenden wir in Glassfish tatsächlich eine Technik wie diese, um der Batch-Laufzeit das Befüllen der Batch-definierten Einspritzpunkte zu ermöglichen.

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

Ich würde mich freuen, mehr über die Guice-Integration mit jbatch zu erfahren.Sie können zu Hause nach der Projektquelle suchen (noch kein richtiges Wiki). auf GitHub

Andere Tipps

weld ist die Referenzimplementierung des JSR-299, die CDI in Javaee 6 bringt. Diese Referenzimplementierung ist in Glasfisch enthalten, damit Sie es effektiv verwenden können.

Beispiel von Oracle gefunden hier :

generasacodicetagpre.

Zitat:

Ich habe nie eine Schweißnaht verwendet

Hier spielt die Implementierung keine Rolle, da er einfach die Spezifikation des JSR implementiert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top