BATCHADM-161 - Add Job Launching Gateway
For reference see: https://jira.springsource.org/browse/BATCHADM-161 * Add XML Schema * Add Namespace Handler * Add Parser and Gateway classes * Add tests
This commit is contained in:
committed by
Michael Minella
parent
f23dd64740
commit
3909b75151
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.batch.integration.config.xml;
|
||||
|
||||
import org.springframework.integration.config.xml.AbstractIntegrationNamespaceHandler;
|
||||
|
||||
/**
|
||||
* The namespace handler for the Spring Batch Integration namespace.
|
||||
*
|
||||
* @author Gunnar Hillert
|
||||
* @since 1.3
|
||||
*
|
||||
*/
|
||||
public class BatchIntegrationNamespaceHandler extends AbstractIntegrationNamespaceHandler {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.springframework.beans.factory.xml.NamespaceHandler#init()
|
||||
*/
|
||||
public void init() {
|
||||
this.registerBeanDefinitionParser("job-launching-gateway", new JobLaunchingGatewayParser());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.batch.integration.config.xml;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.batch.core.launch.JobLauncher;
|
||||
import org.springframework.batch.integration.launch.JobLaunchingGateway;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.integration.config.xml.AbstractConsumerEndpointParser;
|
||||
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.w3c.dom.Element;
|
||||
|
||||
/**
|
||||
* The parser for the Job-Launching Gateway, which will instantiate a
|
||||
* {@link JobLaunchingGatewayParser}. If no {@link JobLauncher} reference has
|
||||
* been provided, this parse will use the use the globally registered bean
|
||||
* 'jobLauncher'.
|
||||
*
|
||||
* @author Gunnar Hillert
|
||||
* @since 1.3
|
||||
*
|
||||
*/
|
||||
public class JobLaunchingGatewayParser extends AbstractConsumerEndpointParser {
|
||||
|
||||
private static final Log logger = LogFactory.getLog(JobLaunchingGatewayParser.class);
|
||||
|
||||
@Override
|
||||
protected String getInputChannelAttributeName() {
|
||||
return "request-channel";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
|
||||
|
||||
final BeanDefinitionBuilder jobLaunchingGatewayBuilder =
|
||||
BeanDefinitionBuilder.genericBeanDefinition(JobLaunchingGateway.class);
|
||||
|
||||
final String jobLauncher = element.getAttribute("job-launcher");
|
||||
|
||||
if (StringUtils.hasText(jobLauncher)) {
|
||||
jobLaunchingGatewayBuilder.addConstructorArgReference(jobLauncher);
|
||||
}
|
||||
else {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("No jobLauncher specified, using default 'jobLauncher' reference instead.");
|
||||
}
|
||||
jobLaunchingGatewayBuilder.addConstructorArgReference("jobLauncher");
|
||||
}
|
||||
|
||||
IntegrationNamespaceUtils.setValueIfAttributeDefined(jobLaunchingGatewayBuilder, element, "reply-timeout", "sendTimeout");
|
||||
|
||||
final String replyChannel = element.getAttribute("reply-channel");
|
||||
|
||||
if (StringUtils.hasText(replyChannel)) {
|
||||
jobLaunchingGatewayBuilder.addPropertyReference("outputChannel", replyChannel);
|
||||
}
|
||||
|
||||
return jobLaunchingGatewayBuilder;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.batch.integration.launch;
|
||||
|
||||
import org.springframework.batch.core.JobExecution;
|
||||
import org.springframework.batch.core.JobExecutionException;
|
||||
import org.springframework.batch.core.launch.JobLauncher;
|
||||
import org.springframework.integration.Message;
|
||||
import org.springframework.integration.MessageHandlingException;
|
||||
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* The {@link JobLaunchingGateway} is used to launch Batch Jobs. Internally it
|
||||
* delegates to a {@link JobLaunchingMessageHandler}.
|
||||
*
|
||||
* @author Gunnar Hillert
|
||||
*
|
||||
* @since 1.3
|
||||
*/
|
||||
public class JobLaunchingGateway extends AbstractReplyProducingMessageHandler {
|
||||
|
||||
private final JobLaunchingMessageHandler jobLaunchingMessageHandler;
|
||||
|
||||
/**
|
||||
* Constructor taking a {@link JobLauncher} as parameter.
|
||||
*
|
||||
* @param storedProcExecutor Must not be null.
|
||||
*
|
||||
*/
|
||||
public JobLaunchingGateway(JobLauncher jobLauncher) {
|
||||
Assert.notNull(jobLauncher, "jobLauncher must not be null.");
|
||||
this.jobLaunchingMessageHandler = new JobLaunchingMessageHandler(jobLauncher);
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches a Batch Job using the provided request {@link Message}. The payload
|
||||
* of the {@link Message} <em>must</em> be an instance of {@link JobLaunchRequest}.
|
||||
*
|
||||
* @param The provided requestMessage must not be null.
|
||||
* @return Generally a {@link JobExecution} will always be returned. An
|
||||
* exception ({@link MessageHandlingException}) will only be thrown if there
|
||||
* is a failure to start the job. The cause of the exception will be a
|
||||
* {@link JobExecutionException}.
|
||||
*
|
||||
* @throws MessageHandlingException
|
||||
*/
|
||||
@Override
|
||||
protected Object handleRequestMessage(Message<?> requestMessage) {
|
||||
|
||||
Assert.notNull(requestMessage, "The provided requestMessage must not be null.");
|
||||
|
||||
final Object payload = requestMessage.getPayload();
|
||||
|
||||
Assert.isInstanceOf(JobLaunchRequest.class, payload, "The payload must be of type JobLaunchRequest.");
|
||||
|
||||
final JobLaunchRequest jobLaunchRequest = (JobLaunchRequest) payload;
|
||||
|
||||
final JobExecution jobExecution;
|
||||
|
||||
try {
|
||||
jobExecution = this.jobLaunchingMessageHandler.launch(jobLaunchRequest);
|
||||
} catch (JobExecutionException e) {
|
||||
throw new MessageHandlingException(requestMessage, e);
|
||||
}
|
||||
|
||||
return jobExecution;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
* Copyright 2006-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -27,7 +27,8 @@ import org.springframework.integration.annotation.ServiceActivator;
|
||||
* Message handler which uses strategies to convert a Message into a job and a set of job parameters
|
||||
* @author Jonas Partner
|
||||
* @author Dave Syer
|
||||
*
|
||||
* @author Gunnar Hillert
|
||||
*
|
||||
*/
|
||||
public class JobLaunchingMessageHandler implements JobLaunchRequestHandler {
|
||||
|
||||
@@ -46,8 +47,7 @@ public class JobLaunchingMessageHandler implements JobLaunchRequestHandler {
|
||||
Job job = request.getJob();
|
||||
JobParameters jobParameters = request.getJobParameters();
|
||||
|
||||
JobExecution execution = jobLauncher.run(job, jobParameters);
|
||||
return execution;
|
||||
return jobLauncher.run(job, jobParameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user