Question

Je suis en train de faire un lot à l'aide d'javax.lot 1.0 avec Java SE 7 et Guice.

La lecture de la JavaEE 7 de la documentation à propos de la JSR-352 visiblement ils ont mis en place le code à exécuter dans Glassfish et je n'ai trouvé aucune mention sur la façon de l'exécuter à l'extérieur.

Maintenant mon problème est sur le "job context" de l'interface qui devrait être automatiquement injecté par le biais de CDI:comment le faire avec Guice?Essayez quelque chose comme:

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

est conceptuellement mal et il conduit à StackOverflowError (donc ici, je suis :>).Est-il vraiment nécessaire?Des exemples de l'injecter à atteindre des propriétés de la Tâche.Pourrais-je les atteindre, peut-être, par le biais de

jobOperator.getParameters(<executionID>)

?

Je vous remercie.

Je n'ai jamais utilisé de Soudure (qui, comme je le comprends, serait à la CDI sur Java SE) de sorte que la seule alternative serait de Spring Batch.

Était-ce utile?

La solution

API explication

Tout d'abord, pour clarifier entre les "propriétés de la tâche" et "paramètres de travail".

Les "paramètres de travail" sont les Propriétés passé à la JobOperator#start(String,Properties) et la JobOperator#restart(long,Properties).

Les "propriétés de la tâche" accessible via JobContext#getProperties() sont les enfants de la /emplois/propriétés de l'élément.

E. g.ce travail a deux propriétés de l'objet renvoyé par: JobContext#getProperties()

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

Ainsi, un paramètre de travail n'est qu'une source de valeurs pour un travail de définition de propriété.

Aussi loin que l'accès aux paramètres, JobOperator.getParameters(long executionId), c'est probablement ce qui ne vous aide pas beaucoup car le moyen le plus naturel pour obtenir l'exécution actuelle de l'id est de le même contexte, vous avez de la difficulté à l'injection.

SE avec Guice

Il semble que vous faites allusion à la JSR 352 implémentation de référence (jbatch, inclus dans Glassfish).

Il est vrai que nous n'avons pas donner beaucoup de pensée à SE, avec Guice l'injection de dépendance, et je ne suis pas assez expert pour savoir si cela vous aide même à mentionner.

Avec de la Soudure, dans Glassfish nous n'avons en fait utiliser une technique comme celle de permettre le lot de l'exécution pour remplir le lot défini par les points d'injection.

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

Je serais heureux d'en savoir plus sur Guice intégration avec jbatch.Vous pouvez suivre jusqu'à la maison de la source du projet (pas un vrai Wiki encore) sur GitHub

Autres conseils

Soudure est la mise en œuvre de référence de la JSR-299 qui apporte CDI dans Javaee 6. Cette mise en œuvre de référence est incluse dans Glassfish pour que vous puissiez l'utiliser efficacement.

Exemple de Oracle trouvé ici :

@Named
public class SimpleItemReader
       extends AbstractItemReader {

       @Inject
       private JobContext jobContext; 
       ...
}

Quote:

Je n'ai jamais utilisé Weld

Ici, la mise en œuvre n'a pas d'importance car cela implémente simplement la spécification du JSR.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top