Pregunta

Estoy tratando de hacer un lote con javax.lote 1.0 con Java SE 7 y Guice.

La lectura de la JavaEE 7 documentación sobre JSR-352 obviamente configurar el código para ser ejecutado dentro de Glassfish y he encontrado ninguna mención acerca de cómo ejecutar fuera de ella.

Ahora mi problema es acerca de JobContext interfaz que debe ser automáticamente se inyecta a través de la CDI:cómo hacer con Guice?Intentar algo como:

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

es conceptualmente erróneo y conduce a StackOverflowError (así que aquí estoy :>).De verdad es necesario?Ejemplos inyectar para llegar a las propiedades de Trabajo.Podría yo llegar a ellos, tal vez, a través de

jobOperator.getParameters(<executionID>)

?

Gracias.

Yo nunca he usado Soldadura (que, como yo lo entiendo, proporcionaría la CDI en Java SE) por lo que la única alternativa sería la Primavera de Lote.

¿Fue útil?

Solución

API explicación

En primer lugar, aclarar entre "propiedades del trabajo" y "parámetros de trabajo".

Los "parámetros de trabajo" son los Propiedades pasa a la JobOperator#start(String,Properties) y el JobOperator#restart(long,Properties).

El "trabajo" propiedades accesible a través de JobContext#getProperties() son los hijos de la /trabajo/propiedades elemento.

E. g.este trabajo tiene dos propiedades en el objeto devuelto por: JobContext#getProperties()

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

Así que un parámetro del trabajo es sólo una posible fuente de valores para un trabajo de definición de la propiedad.

Tan lejos como el acceso a los parámetros, JobOperator.getParameters(long executionId), este probablemente no ayuda mucho ya que la forma más natural para obtener la corriente identificador de ejecución es desde el mismo contexto que está teniendo problemas con la inyección.

SE con Guice

Suena como que usted está refiriéndose a la JSR 352 implementación de referencia (jbatch, incluido en Glassfish).

Es cierto que no le dimos mucha importancia a los SE con Guice la inyección de dependencia, y yo no soy lo suficiente de un experto para saber si es que incluso ayuda a mencionar.

Con Soldadura, en Glassfish hacemos realidad el uso de una técnica como esta, para permitir que el tiempo de ejecución por lotes para rellenar el lote definido puntos de inyección.

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

Yo estaría feliz de saber más acerca de Guice integración con jbatch.Usted podría seguimiento en el hogar para el proyecto de la fuente (no real Wiki todavía) en GitHub

Otros consejos

Weld es la implementación de referencia del JSR-299 que trae CDI en Javaee 6. Esta implementación de referencia se incluye en GlassFish para que pueda usarlo efectivamente.

Ejemplo de Oracle encontrado aquí :

@Named
public class SimpleItemReader
       extends AbstractItemReader {

       @Inject
       private JobContext jobContext; 
       ...
}

Cita:

Nunca usé la soldadura

Aquí, la implementación no importa porque, simplemente implementa la especificación de la JSR.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top