Example usage for org.springframework.batch.integration.chunk ChunkProcessorChunkHandler setChunkProcessor

List of usage examples for org.springframework.batch.integration.chunk ChunkProcessorChunkHandler setChunkProcessor

Introduction

In this page you can find the example usage for org.springframework.batch.integration.chunk ChunkProcessorChunkHandler setChunkProcessor.

Prototype

public void setChunkProcessor(ChunkProcessor<S> chunkProcessor) 

Source Link

Document

Public setter for the ChunkProcessor .

Usage

From source file:es.fcs.batch.integration.chunk.MyRemoteChunkHandlerFactoryBean.java

/**
 * Builds a {@link ChunkHandler} from the {@link ChunkProcessor} extracted from the {@link #setStep(TaskletStep)
 * step} provided. Also modifies the step to send chunks to the chunk handler via the
 * {@link #setChunkWriter(ItemWriter) chunk writer}.
 * /*from   w  ww  .  j  a  v  a 2s  .c o  m*/
 * @see FactoryBean#getObject()
 */
public ChunkProcessor<T> getObject() throws Exception {

    if (stepContributionSource == null) {
        Assert.state(chunkWriter instanceof StepContributionSource,
                "The chunk writer must be a StepContributionSource or else the source must be provided explicitly");
        stepContributionSource = (StepContributionSource) chunkWriter;
    }

    Assert.state(step instanceof TaskletStep, "Step [" + step.getName() + "] must be a TaskletStep");
    logger.debug("Converting TaskletStep with name=" + step.getName());

    Tasklet tasklet = getTasklet((TaskletStep) step);
    Assert.state(tasklet instanceof ChunkOrientedTasklet<?>,
            "Tasklet must be ChunkOrientedTasklet in step=" + step.getName());

    ChunkProcessor<T> chunkProcessor = getChunkProcessor((ChunkOrientedTasklet<?>) tasklet);
    Assert.state(chunkProcessor != null,
            "ChunkProcessor must be accessible in Tasklet in step=" + step.getName());

    //      System.out.println("====="+chunkWriter.getClass());
    //      setField(chunkWriter, "chunkProcessor", chunkProcessor);
    //      if (Proxy.isProxyClass(chunkWriter.getClass())){
    //         InvocationHandler ih = Proxy.getInvocationHandler(chunkWriter);
    //         Class[] cls = new Class[]{ChunkProcessor.class};
    //         Method m = MyChunkMessageChannelItemWriter.class.getMethod("setChunkProcessor", cls);
    //         try {
    //            ih.invoke(chunkWriter, m, new Object[]{chunkProcessor});
    //         } catch (Throwable e) {
    //            // TODO Auto-generated catch block
    //            e.printStackTrace();
    //         }
    //      } else {
    //         ((MyChunkMessageChannelItemWriter<T>)chunkWriter).setChunkProcessor(chunkProcessor);
    //      }
    ItemWriter<T> itemWriter = getItemWriter(chunkProcessor);
    Assert.state(!(itemWriter instanceof ChunkMessageChannelItemWriter<?>),
            "Cannot adapt step [" + step.getName()
                    + "] because it already has a remote chunk writer.  Use a local writer in the step.");

    replaceChunkProcessor((ChunkOrientedTasklet<?>) tasklet, chunkWriter, stepContributionSource);
    if (chunkWriter instanceof StepExecutionListener) {
        step.registerStepExecutionListener((StepExecutionListener) chunkWriter);
    }

    ChunkProcessorChunkHandler<T> handler = new ChunkProcessorChunkHandler<T>();
    setNonBuffering(chunkProcessor);
    handler.setChunkProcessor(chunkProcessor);
    // TODO: create step context for the processor in case it has
    // scope="step" dependencies
    handler.afterPropertiesSet();

    return chunkProcessor;

}

From source file:org.springframework.batch.integration.chunk.RemoteChunkHandlerFactoryBean.java

/**
 * Builds a {@link ChunkHandler} from the {@link ChunkProcessor} extracted from the {@link #setStep(TaskletStep)
 * step} provided. Also modifies the step to send chunks to the chunk handler via the
 * {@link #setChunkWriter(ItemWriter) chunk writer}.
 * /*from  www  .  jav a2s  .  com*/
 * @see FactoryBean#getObject()
 */
public ChunkHandler<T> getObject() throws Exception {

    if (stepContributionSource == null) {
        Assert.state(chunkWriter instanceof StepContributionSource,
                "The chunk writer must be a StepContributionSource or else the source must be provided explicitly");
        stepContributionSource = (StepContributionSource) chunkWriter;
    }

    Assert.state(step instanceof TaskletStep, "Step [" + step.getName() + "] must be a TaskletStep");
    if (logger.isDebugEnabled()) {
        logger.debug("Converting TaskletStep with name=" + step.getName());
    }

    Tasklet tasklet = getTasklet((TaskletStep) step);
    Assert.state(tasklet instanceof ChunkOrientedTasklet<?>,
            "Tasklet must be ChunkOrientedTasklet in step=" + step.getName());

    ChunkProcessor<T> chunkProcessor = getChunkProcessor((ChunkOrientedTasklet<?>) tasklet);
    Assert.state(chunkProcessor != null,
            "ChunkProcessor must be accessible in Tasklet in step=" + step.getName());

    ItemWriter<T> itemWriter = getItemWriter(chunkProcessor);
    Assert.state(!(itemWriter instanceof ChunkMessageChannelItemWriter<?>),
            "Cannot adapt step [" + step.getName()
                    + "] because it already has a remote chunk writer.  Use a local writer in the step.");

    replaceChunkProcessor((ChunkOrientedTasklet<?>) tasklet, chunkWriter, stepContributionSource);
    if (chunkWriter instanceof StepExecutionListener) {
        step.registerStepExecutionListener((StepExecutionListener) chunkWriter);
    }

    ChunkProcessorChunkHandler<T> handler = new ChunkProcessorChunkHandler<T>();
    setNonBuffering(chunkProcessor);
    handler.setChunkProcessor(chunkProcessor);
    // TODO: create step context for the processor in case it has
    // scope="step" dependencies
    handler.afterPropertiesSet();

    return handler;

}