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

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

Introduction

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

Prototype

ChunkProcessorChunkHandler

Source Link

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 w  w  .  ja  va2  s . 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}.
 * //  ww w . ja va  2 s  .  co  m
 * @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;

}