-
May 26th, 2010, 03:19 AM
#1
Problem with HelloWorld example
Hi all, i'm new with SrpingBatch and I'm trying to execute a simple Hello World jUnit test. I have the following files:
1)spring-batch-demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns
="http://www.springframework.org/schema/p"
xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schem...-beans-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schem...ng-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schem...ing-tx-2.0.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.0.xsd">
<!--
El gestor de transacciones que se usará durante el procesamiento batch.
En este caso, usamos una implementación "dummy" provista por Spring Batch,
ya que no usaremos ningun recurso transaccional.
-->
<bean id="transactionManager" class="org.springframework.batch.support.transacti on.ResourcelessTransactionManager"/>
<!--
El repositorio de tareas de Spring Batch. Este bean es el encargado
de guardar la información de las corridas en la base de datos.
En este caso usaremos un repositorio en memoria, útil para desarrollo.
-->
<bean id="jobRepository" class="org.springframework.batch.core.repository.s upport.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
</bean>
<!--
Un ejecutador de tareas. A través de esta clase es que se inicia la
ejecución de las taras batch.
-->
<bean id="jobLauncher" class="org.springframework.batch.core.launch.suppo rt.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<!--
Un trabajo de Spring Batch.
Este es el bean principal de Spring Batch, que declara el trabajo batch
que se va a ejecutar. El trabajo está compuesto de varios "pasos" (step).
Los pasos se ejecutan en forma secuencial.
En este ejemplo, el trabajo consiste en ejecutar tres pasos. Cada paso
invoca a ImprimirTasklet, el cual imprime por consola un mensaje.
El resultado por consola es el mensaje "Hola, Mundo!".
-->
<batch:job id="trabajoBatch">
<batch:step id="primerPaso">
<batch:tasklet ref="imprimirHola"/>
</batch:step>
<batch:step id="segundoPaso">
<batch:tasklet ref="imprimirMundo"/>
</batch:step>
<batch:step id="tercerPaso">
<batch:tasklet ref="imprimirExclamacion"/>
</batch:step>
</batch:job>
<!--
Estos son los tasklet o acciones que se ejecutarán. Cada tasklet
representa una acción que Spring Batch ejecutará como un paso. Un
tasklet es la forma más simple en Spring Batch de ejecutar acciones.
-->
<bean id="imprimirHola" class="src.com.ImprimirTasklet">
<property name="mensaje" value="Hola, " />
</bean>
<bean id="imprimirMundo" class="src.com.ImprimirTasklet">
<property name="mensaje" value="Mundo" />
</bean>
<bean id="imprimirExclamacion" class="src.com.ImprimirTasklet">
<property name="mensaje" value="!!!" />
</bean>
</beans>
2)ImprimirTasklet.java
package src.com;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.Chunk Context;
import org.springframework.batch.core.step.tasklet.Taskle t;
import org.springframework.batch.repeat.RepeatStatus;
/**
* Un tasklet es una clase que realiza una acción simple. Permite asi ejecutar
* y realizar cualquier acción que necesitemos.
* Spring Batch provee clases más complejas y potentes que los tasklets, pero
* son igualmente útiles para realizar algunas acciones.
*/
public class ImprimirTasklet implements Tasklet {
/** Un mensaje a mostrar por pantalla.
* Este mensaje será inyectado en el archivo de configuración de Spring.
*/
private String mensaje;
public String getMensaje() {
return mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
/** La ejecución del tasklet. Spring Batch invoca este método para ejecutar
* la acción.
* @return el codigo de estado. Si el codigo es "FINISHED" continua la
* ejecución con la siguiente tarea.
*/
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1) throws Exception {
System.out.print(mensaje);
return RepeatStatus.FINISHED;
}
}
3)ImprimirHolaMundoTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/src/com/spring-batch-demo.xml"
})
public class ImprimirHolaMundoTest {
/** Este objeto es el encargado de lanzar una tarea */
@Autowired
private SimpleJobLauncher launcher;
/** La tarea a ejecutar. */
@Autowired
private Job job;
@Test
public void iniciarJob() throws Exception {
JobParametersBuilder builder = new JobParametersBuilder();
builder.addDate("Ejecucion", new Date());
builder.addString("jobName", "Imprimir hola mundo por consola");
JobParameters parameters = builder.toJobParameters();
launcher.run(job, parameters);
}
}
Well, the test just execute the first step and shows "Hola, " string. ¿Why does not execute the other steps?
Thanks in advance.
-
May 28th, 2010, 02:52 AM
#2
[QUOTE=rubenalia;301936]
<batch:job id="trabajoBatch">
<batch:step id="primerPaso">
<batch:tasklet ref="imprimirHola"/>
</batch:step>
<batch:step id="segundoPaso">
<batch:tasklet ref="imprimirMundo"/>
</batch:step>
<batch:step id="tercerPaso">
<batch:tasklet ref="imprimirExclamacion"/>
</batch:step>
</batch:job>
QUOTE]
<batch:job id="trabajoBatch">
<batch:step id="primerPaso" next="segundoPaso">
<batch:tasklet ref="imprimirHola"/>
</batch:step>
<batch:step id="segundoPaso" next="tercerPaso">
<batch:tasklet ref="imprimirMundo"/>
</batch:step>
<batch:step id="tercerPaso">
<batch:tasklet ref="imprimirExclamacion"/>
</batch:step>
</batch:job>
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules