Интеграция ActiveMq с Spring 2.5

Я использую ActiveMq 5.32 с Spring 2.5.5. Я использую довольно общую конфигурацию, пока я включаю jmsTransactionManager в DefaultMessageListenerContainer, Spring выдает ошибку при запуске:

«Ошибка создания bean-компонента с именем 'org.springframework.jms.listener.DefaultMessageListenerContainer # 0'»

Без атрибута transactionManager это работает нормально, но когда я добавляю 10 сообщений в очередь сообщений, возникает исключение транзакции.

Часть моих конфигураций:

<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                <property name="connectionFactory" ref="connectionFactory" />
                <property name="destination" ref="emailDestination" />
                <property name="messageListener" ref="emailServiceMDP" />
                <property name="transactionManager" ref="jmsTransactionManager" />
</bean>

<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
                <property name="connectionFactory" ref="connectionFactory" />
</bean>

Есть ли у этой версии Spring и Activemq какие-нибудь известные проблемы с интеграцией? Или мне нужны дополнительные библиотеки для работы jmsTransactionManager?

Обновлено: полная трассировка стека:

Вот настоящая проблема в этой трассировке стека:


person Sawyer    schedule 25.05.2010    source источник
comment
Да, матовый, но я не могу получить никакой полезной информации об этой ошибке, я обновил свой пост, добавив полную трассировку стека.   -  person matt b    schedule 25.05.2010
comment
Большое спасибо, Брюс, ты действительно спас мне жизнь, когда я обновил свой spring-tx jar до версии 2.5.6, ошибка исчезла!   -  person Sawyer    schedule 25.05.2010


Ответы (1)


Проблема в том, что какая бы версия jar-файла spring-tx у вас в пути к классам не содержала класс / метод TransactionSynchronizationUtils.sameResourceFactory. Насколько я могу судить, этот метод действительно существовал в Spring 2.5.4, но не существовал в Spring 2.5.3. Я думаю, вам нужно проверить свой путь к классам, чтобы узнать, какие версии различных jar-файлов Spring вы действительно используете.

java.lang.NoSuchMethodError: org.springframework.transaction.support.TransactionSynchronizationUtils.sameResourceFactory(Lorg/springframework/transaction/support/ResourceTransactionManager;Ljava/lang/Object;)Z at 

FWIW, ActiveMQ в настоящее время использует внутреннюю версию 2.5.6 и ранее использовавшуюся Spring 2.5.5. Это то, что я могу вспомнить с головы до ног, что мне нужно было по-настоящему покопаться.

Надеюсь, это поможет.

Брюс

Ошибка, которую вы получаете при запуске, должна содержать намного больше информации, такой как вложенные исключения, причины и т. Д., У вас это есть? Spring должен сообщать вам, почему не удалось создать этот bean-компонент, что поможет указать вам в правильном направлении, что нужно исправить.

person bsnyder    schedule 26.05.2010
comment
Это действительно странно, я успешно запускаю только один раз, а затем все равно получаю ту же ошибку. Я использую spring 2.5.5, поскольку вы сказали, что этот метод существовал в 2.5.4, когда проверял источник, в 2.5.5 этот метод все еще существовал, я не знаю, почему он сообщил об ошибке «Невозможно найти». - person Sawyer; 26.05.2010
comment
21:36:21 ОШИБКА Инициализация контекста завершилась неудачно org.springframework.beans.factory.BeanCreationException: Ошибка создания bean-компонента с именем org.springframework.jms.listener.DefaultMessageListenerContainer # 0, определенным в ресурсе ServletContext [/ WEB-INF / config / spring /component/applicationContext-jms-activemq5.xml]: не удалось вызвать метод инициализации; вложенным исключением является java.lang.NoSuchMethodError: org.springframework.transaction.support.TransactionSynchronizationUtils.sameResourceFactory (Lorg / springframework / transaction / support / ResourceTransactionManager; Ljava / lang / Object; AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1337) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:473) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory $ 1.run (AbstractAutowireCapableBeanFactory.java : 409) в java.security.AccessController.doPrivileged (собственный метод) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:380 getObject (AbstractBeanFactory.java:264) в org.sp ringframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:221) на org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (orfactory.framework.sort.sort.java.frame.frame.base.jpg). AbstractBeanFactory.getBean (AbstractBeanFactory.java:185) по адресу org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:164) по адресу org.springframework.beans.factory. 429) в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:729) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplication.Context.CONTEXT.CONTEXT.CONTEX.CONTEXT.CONTEXT.CONTEXT) .createWebApplicationContext (ContextLoader.java:255) в org.springframework.web.context.ContextL oader.initWebApplicationContext (ContextLoader.java:199) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:45) в com.suzsoft.framework.spring.web.context. ContextLoaderListener.contextInitialized (ContextLoaderListener.java:23) в org.apache.catalina.core.StandardContext.listenerStart (StandardContext.java:3934) в org.apache.catalina.core.StandardContext.start (StandardContext.java:4429) в org. .apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:791) в org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:771) в org.apache.catalina.core.StandardHost.addChild (StandardHost.addChild .java: 526) в org.apache.catalina.startup.HostConfig.deployDirectory (HostConfig.java:987) в org.apache.catalina.startup.HostConfig.deployDirectories (HostConfig.java:909) в org.apache.catalina. startup.HostConfig.deployApps (HostConfig.java:495) в org.apache.catalina.startup.HostConfig.start (HostConfig.java:1206) в org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig ).java: в org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:1 19) в org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1053) в org.apache.catalina.core.StandardHost.start (StandardHost.java:722) в org.apache.catalina.core.ContainerBase .start (ContainerBase.java:1045) в org.apache.catalina.core.StandardEngine.start (StandardEngine.java:443) в org.apache.catalina.core.StandardService.start (StandardService.java:516) в org. apache.catalina.core.StandardServer.start (StandardServer.java:710) в org.apache.catalina.startup.Catalina.start (Catalina.java:583) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun. Reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.java.invoke (Метод .startup.Bootstrap.start (Bootstrap.java:288) в org.apache.catalina.startup.Bootstrap.main (Bootstrap.java: 413) Вызвано: java.lang.NoSuchMethodError: org.springframework.transaction.support.TransactionSynchronizationUtils.sameResourceFactory (Lorg / springframework / transaction / support / ResourceTransactionManager; Ljava / lang / Object. AbstractPollingMessageListenerContainer.initialize (AbstractPollingMessageListenerContainer.java:190) на org.springframework.jms.listener.DefaultMessageListenerContainer.initialize (DefaultMessageListenerContainer.java:459) на org.java:459) на org. AbstractJmsListeningContainer.afterPropertiesSet (AbstractJmsListeningContainer.java:135) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java: 1334) ... 40 еще 25 мая 2010 г. 21:36:21 org.apache.catalina.core.StandardContext listenerStart SEVERE: исключение, отправляющее событие, инициализированное контекстом, экземпляру прослушивателя класса com.suzsoft.framework.spring.web.context .ContextLoaderListener org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем org.springframework.jms.listener.DefaultMessageListenerContainer # 0, определенным в ресурсе ServletContext [/ WEB-INF / config / spring / component / applicationContext-jms activemq5.xml]: не удалось вызвать метод инициализации; вложенным исключением является java.lang.NoSuchMethodError: org.springframework.transaction.support.TransactionSynchronizationUtils.sameResourceFactory (Lorg / springframework / transaction / support / ResourceTransactionManager; Ljava / lang / Object; AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1337) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:473) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory $ 1.run (AbstractAutowireCapableBeanFactory.java : 409) в java.security.AccessController.doPrivileged (собственный метод) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:380 getObject (AbstractBeanFactory.java:264) в org.sp ringframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:221) на org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (orfactory.framework.sort.sort.java.frame.frame.base.jpg). AbstractBeanFactory.getBean (AbstractBeanFactory.java:185) по адресу org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:164) по адресу org.springframework.beans.factory. 429) на org.springframework.context.support. AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:729) в org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:381) в org.springContext.java:381) в org.springframework.webLoadContext.context.или .springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:199) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:45) в com.bstract.container.frame. .afterPropertiesSet (AbstractJmsListeningContainer.java:135) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1334 ) ... еще 40 - person Sawyer; 26.05.2010