@SuppressWarnings("unchecked") private void invokeListener(JmsListenerEndpoint endpoint, Message message) throws JMSException { DefaultMessageListenerContainer messageListenerContainer = containerFactory.createListenerContainer(endpoint); Object listener = messageListenerContainer.getMessageListener(); if (listener instanceof SessionAwareMessageListener) { ((SessionAwareMessageListener<Message>) listener).onMessage(message, mock(Session.class)); } else { ((MessageListener) listener).onMessage(message); } }
@Test public void backOffOverridesRecoveryInterval() { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); BackOff backOff = new FixedBackOff(); factory.setBackOff(backOff); factory.setRecoveryInterval(2000L); SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint(); MessageListener messageListener = new MessageListenerAdapter(); endpoint.setMessageListener(messageListener); endpoint.setDestination("myQueue"); DefaultMessageListenerContainer container = factory.createListenerContainer(endpoint); assertSame(backOff, new DirectFieldAccessor(container).getPropertyValue("backOff")); }
@Test public void endpointConcurrencyTakesPrecedence() { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); factory.setConcurrency("2-10"); SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint(); MessageListener messageListener = new MessageListenerAdapter(); endpoint.setMessageListener(messageListener); endpoint.setDestination("myQueue"); endpoint.setConcurrency("4-6"); DefaultMessageListenerContainer container = factory.createListenerContainer(endpoint); assertEquals(4, container.getConcurrentConsumers()); assertEquals(6, container.getMaxConcurrentConsumers()); }
@Test public void testJmsContainerFactoryConfiguration() { Map<String, DefaultJmsListenerContainerFactory> containers = context.getBeansOfType(DefaultJmsListenerContainerFactory.class); DefaultJmsListenerContainerFactory factory = containers.get("testJmsFactory"); assertNotNull("No factory registered with testJmsFactory id", factory); DefaultMessageListenerContainer container = factory.createListenerContainer(createDummyEndpoint()); assertEquals("explicit connection factory not set", context.getBean(EXPLICIT_CONNECTION_FACTORY), container.getConnectionFactory()); assertEquals("explicit destination resolver not set", context.getBean("testDestinationResolver"), container.getDestinationResolver()); assertEquals("explicit message converter not set", context.getBean("testMessageConverter"), container.getMessageConverter()); assertEquals("Wrong pub/sub", true, container.isPubSubDomain()); assertEquals("Wrong durable flag", true, container.isSubscriptionDurable()); assertEquals("wrong cache", DefaultMessageListenerContainer.CACHE_CONNECTION, container.getCacheLevel()); assertEquals("wrong concurrency", 3, container.getConcurrentConsumers()); assertEquals("wrong concurrency", 5, container.getMaxConcurrentConsumers()); assertEquals("wrong prefetch", 50, container.getMaxMessagesPerTask()); assertEquals("Wrong phase", 99, container.getPhase()); assertSame(context.getBean("testBackOff"), new DirectFieldAccessor(container).getPropertyValue("backOff")); }
@Test public void createJmsContainerFullConfig() { DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); setDefaultJmsConfig(factory); factory.setCacheLevel(DefaultMessageListenerContainer.CACHE_CONSUMER); factory.setConcurrency("3-10"); factory.setMaxMessagesPerTask(5); SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint(); MessageListener messageListener = new MessageListenerAdapter(); endpoint.setMessageListener(messageListener); endpoint.setDestination("myQueue"); DefaultMessageListenerContainer container = factory.createListenerContainer(endpoint); assertDefaultJmsConfig(container); assertEquals(DefaultMessageListenerContainer.CACHE_CONSUMER, container.getCacheLevel()); assertEquals(3, container.getConcurrentConsumers()); assertEquals(10, container.getMaxConcurrentConsumers()); assertEquals(5, container.getMaxMessagesPerTask()); assertEquals(messageListener, container.getMessageListener()); assertEquals("myQueue", container.getDestinationName()); }