Added "recovery-interval" attribute to <jms:listener-container>
Issue: SPR-10711
This commit is contained in:
@@ -139,6 +139,17 @@ public class JmsNamespaceHandlerTests {
|
||||
assertSame(message3, testBean3.message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRecoveryInterval() {
|
||||
long recoveryInterval1 = getRecoveryInterval("listener1");
|
||||
long recoveryInterval2 = getRecoveryInterval("listener2");
|
||||
long recoveryInterval3 = getRecoveryInterval(DefaultMessageListenerContainer.class.getName() + "#0");
|
||||
|
||||
assertEquals(1000L, recoveryInterval1);
|
||||
assertEquals(1000L, recoveryInterval2);
|
||||
assertEquals(DefaultMessageListenerContainer.DEFAULT_RECOVERY_INTERVAL, recoveryInterval3);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testErrorHandlers() {
|
||||
ErrorHandler expected = this.context.getBean("testErrorHandler", ErrorHandler.class);
|
||||
@@ -164,24 +175,6 @@ public class JmsNamespaceHandlerTests {
|
||||
assertEquals(Integer.MAX_VALUE, defaultPhase);
|
||||
}
|
||||
|
||||
private MessageListener getListener(String containerBeanName) {
|
||||
DefaultMessageListenerContainer container = this.context.getBean(containerBeanName, DefaultMessageListenerContainer.class);
|
||||
return (MessageListener) container.getMessageListener();
|
||||
}
|
||||
|
||||
private ErrorHandler getErrorHandler(String containerBeanName) {
|
||||
DefaultMessageListenerContainer container = this.context.getBean(containerBeanName, DefaultMessageListenerContainer.class);
|
||||
return (ErrorHandler) new DirectFieldAccessor(container).getPropertyValue("errorHandler");
|
||||
}
|
||||
|
||||
public int getPhase(String containerBeanName) {
|
||||
Object container = this.context.getBean(containerBeanName);
|
||||
if (!(container instanceof Phased)) {
|
||||
throw new IllegalStateException("Container '" + containerBeanName + "' does not implement Phased.");
|
||||
}
|
||||
return ((Phased) container).getPhase();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testComponentRegistration() {
|
||||
assertTrue("Parser should have registered a component named 'listener1'", context.containsComponentDefinition("listener1"));
|
||||
@@ -203,6 +196,7 @@ public class JmsNamespaceHandlerTests {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void validateComponentDefinition(ComponentDefinition compDef) {
|
||||
BeanDefinition[] beanDefs = compDef.getBeanDefinitions();
|
||||
for (BeanDefinition beanDef : beanDefs) {
|
||||
@@ -210,6 +204,30 @@ public class JmsNamespaceHandlerTests {
|
||||
}
|
||||
}
|
||||
|
||||
private MessageListener getListener(String containerBeanName) {
|
||||
DefaultMessageListenerContainer container = this.context.getBean(containerBeanName, DefaultMessageListenerContainer.class);
|
||||
return (MessageListener) container.getMessageListener();
|
||||
}
|
||||
|
||||
private ErrorHandler getErrorHandler(String containerBeanName) {
|
||||
DefaultMessageListenerContainer container = this.context.getBean(containerBeanName, DefaultMessageListenerContainer.class);
|
||||
return (ErrorHandler) new DirectFieldAccessor(container).getPropertyValue("errorHandler");
|
||||
}
|
||||
|
||||
private long getRecoveryInterval(String containerBeanName) {
|
||||
DefaultMessageListenerContainer container = this.context.getBean(containerBeanName, DefaultMessageListenerContainer.class);
|
||||
Long recoveryInterval = (Long) new DirectFieldAccessor(container).getPropertyValue("recoveryInterval");
|
||||
return recoveryInterval.longValue();
|
||||
}
|
||||
|
||||
private int getPhase(String containerBeanName) {
|
||||
Object container = this.context.getBean(containerBeanName);
|
||||
if (!(container instanceof Phased)) {
|
||||
throw new IllegalStateException("Container '" + containerBeanName + "' does not implement Phased.");
|
||||
}
|
||||
return ((Phased) container).getPhase();
|
||||
}
|
||||
|
||||
|
||||
public static class TestMessageListener implements MessageListener {
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:jms="http://www.springframework.org/schema/jms"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.1.xsd">
|
||||
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd">
|
||||
|
||||
<jms:listener-container connection-factory="testConnectionFactory" task-executor="testTaskExecutor"
|
||||
destination-resolver="testDestinationResolver" message-converter="testMessageConverter"
|
||||
transaction-manager="testTransactionManager" error-handler="testErrorHandler"
|
||||
concurrency="1-2" prefetch="50" receive-timeout="100" phase="99">
|
||||
concurrency="1-2" prefetch="50" receive-timeout="100" recovery-interval="1000" phase="99">
|
||||
<jms:listener id="listener1" destination="testDestination" ref="testBean1" method="setName"/>
|
||||
<jms:listener id="listener2" destination="testDestination" ref="testBean2" method="setName" response-destination="responseDestination"/>
|
||||
</jms:listener-container>
|
||||
|
||||
Reference in New Issue
Block a user