/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.batchee.camel.component;
import org.apache.batchee.util.Batches;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
import javax.batch.api.Batchlet;
import javax.batch.operations.JobOperator;
import javax.batch.runtime.context.JobContext;
import javax.inject.Inject;
public class JBatchComponentTest extends CamelTestSupport {
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Produce(uri = "direct:start")
protected ProducerTemplate template;
@Produce(uri = "direct:start-synch")
protected ProducerTemplate templateSynch;
@Test
public void checkJobWasExecuted() throws Exception {
final Object[] result = Object[].class.cast(template.requestBody(null));
final long id = Number.class.cast(result[0]).longValue();
final JobOperator operator = JobOperator.class.cast(result[1]);
Batches.waitForEnd(operator, id);
assertEquals("JBatch-Camel", operator.getJobExecution(id).getExitStatus());
}
@Test
public void checkJobWasExecutedSynchonously() throws Exception {
final Object[] result = Object[].class.cast(templateSynch.requestBody(null));
final long id = Number.class.cast(result[0]).longValue();
final JobOperator operator = JobOperator.class.cast(result[1]);
assertEquals("JBatch-Camel", operator.getJobExecution(id).getExitStatus());
}
@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
from("direct:start").to("jbatch:component")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
exchange.getIn().setBody(new Object[]{exchange.getIn().getHeader(JBatchProducer.JBATCH_EXECUTION_ID), exchange.getIn().getHeader(JBatchProducer.JBATCH_OPERATOR)});
}
}).to("mock:result");
from("direct:start-synch").to("jbatch:component?synchronous=100")
.process(new Processor() {
@Override
public void process(final Exchange exchange) throws Exception {
exchange.getIn().setBody(new Object[]{exchange.getIn().getHeader(JBatchProducer.JBATCH_EXECUTION_ID), exchange.getIn().getHeader(JBatchProducer.JBATCH_OPERATOR)});
}
}).to("mock:result");
}
};
}
public static class ABatchlet implements Batchlet {
@Inject
private JobContext jobContext;
@Override
public String process() throws Exception {
Thread.sleep(1000);
jobContext.setExitStatus("JBatch-Camel");
return null;
}
@Override
public void stop() throws Exception {
// no-op
}
}
}