Announcement Announcement Module
Collapse
No announcement yet.
Problem with HelloWorld example Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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.

  • #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>

    Comment

    Working...
    X