diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemReader.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemReader.java index 7fcac9b9a..c660e05dc 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemReader.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemReader.java @@ -51,6 +51,17 @@ public class JmsItemReader implements ItemReader { */ public void setJmsTemplate(JmsOperations jmsTemplate) { this.jmsTemplate = jmsTemplate; + if (jmsTemplate instanceof JmsTemplate) { + JmsTemplate template = (JmsTemplate) jmsTemplate; + Assert + .isTrue( + template.getReceiveTimeout() != JmsTemplate.RECEIVE_TIMEOUT_INDEFINITE_WAIT, + "JmsTemplate must have a receive timeout!"); + Assert + .isTrue(template.getDefaultDestination() != null + || template.getDefaultDestinationName() != null, + "JmsTemplate must have a defaultDestination or defaultDestinationName!"); + } } /** diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemWriter.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemWriter.java index 2046073ef..d95dedbd3 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemWriter.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/jms/JmsItemWriter.java @@ -23,11 +23,13 @@ import org.apache.commons.logging.LogFactory; import org.springframework.batch.item.ItemWriter; import org.springframework.jms.core.JmsOperations; import org.springframework.jms.core.JmsTemplate; +import org.springframework.util.Assert; /** * An {@link ItemWriter} for JMS using a {@link JmsTemplate}. The template * should have a default destination, which will be used to send items in - * {@link #write(List)}.

+ * {@link #write(List)}.
+ *
* * The implementation is thread safe after its properties are set (normal * singleton behavior). @@ -44,10 +46,18 @@ public class JmsItemWriter implements ItemWriter { /** * Setter for JMS template. * - * @param jmsTemplate a {@link JmsOperations} instance + * @param jmsTemplate + * a {@link JmsOperations} instance */ public void setJmsTemplate(JmsOperations jmsTemplate) { this.jmsTemplate = jmsTemplate; + if (jmsTemplate instanceof JmsTemplate) { + JmsTemplate template = (JmsTemplate) jmsTemplate; + Assert + .isTrue(template.getDefaultDestination() != null + || template.getDefaultDestinationName() != null, + "JmsTemplate must have a defaultDestination or defaultDestinationName!"); + } } /** diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemReaderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemReaderTests.java index 4cbdb3e6a..bef024bc2 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemReaderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemReaderTests.java @@ -27,6 +27,7 @@ import javax.jms.Message; import org.easymock.EasyMock; import org.junit.Test; import org.springframework.jms.core.JmsOperations; +import org.springframework.jms.core.JmsTemplate; public class JmsItemReaderTests { @@ -105,4 +106,18 @@ public class JmsItemReaderTests { EasyMock.verify(jmsTemplate); } + @Test(expected=IllegalArgumentException.class) + public void testTemplateWithNoDefaultDestination() throws Exception { + JmsTemplate jmsTemplate = new JmsTemplate(); + jmsTemplate.setReceiveTimeout(100L); + itemReader.setJmsTemplate(jmsTemplate); + } + + @Test(expected=IllegalArgumentException.class) + public void testTemplateWithNoTimeout() throws Exception { + JmsTemplate jmsTemplate = new JmsTemplate(); + jmsTemplate.setDefaultDestinationName("foo"); + itemReader.setJmsTemplate(jmsTemplate); + } + } diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemWriterTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemWriterTests.java new file mode 100644 index 000000000..37a55275f --- /dev/null +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/jms/JmsItemWriterTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2006-2007 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.item.jms; + +import java.util.Arrays; + +import org.easymock.EasyMock; +import org.junit.Test; +import org.springframework.jms.core.JmsOperations; +import org.springframework.jms.core.JmsTemplate; + +public class JmsItemWriterTests { + + JmsItemWriter itemWriter = new JmsItemWriter(); + + @Test + public void testNoItemTypeSunnyDay() throws Exception { + JmsOperations jmsTemplate = EasyMock.createMock(JmsOperations.class); + jmsTemplate.convertAndSend("foo"); + EasyMock.expectLastCall(); + jmsTemplate.convertAndSend("bar"); + EasyMock.expectLastCall(); + EasyMock.replay(jmsTemplate); + + itemWriter.setJmsTemplate(jmsTemplate); + itemWriter.write(Arrays.asList("foo", "bar")); + EasyMock.verify(jmsTemplate); + } + + @Test(expected=IllegalArgumentException.class) + public void testTemplateWithNoDefaultDestination() throws Exception { + JmsTemplate jmsTemplate = new JmsTemplate(); + itemWriter.setJmsTemplate(jmsTemplate); + } + +}