2014-08-29 110 views
2

的方案是入站JMS适配器 - >服务激活(DB搜索,业务逻辑,插入或更新)Spring集成入站JMS适配器错误通道不调用

<int-jms:message-driven-channel-adapter id="swiftAdapterInput" channel="mt950" 
     connection-factory="connectionFactory" destination-name="${integration.swift.jms.queue.from}" pub-sub-domain="false" 
     auto-startup="false" error-channel="errorChannel" transaction-manager="transactionManager" acknowledge="transacted" /> 

<int:service-activator input-channel="errorChannel" ref="errorHandler" /> 

<bean id="errorHandler" class="nest.integration.utils.error.ErrorHandler" /> 


<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory" /> 
</bean> 

我servcie期间当抛出的异常激活我的errorHandler工作正常,但例外是(在提交后),例如db唯一constrat异常消息不会进入错误通道,但只回滚到jms队列。

但我需要我的errorHander在这种情况下,因为我需要在提前 祝发送电子邮件例外等

坦克,塔马斯

+0

的就是你得到的异常? – msrd0 2014-08-29 14:08:29

+0

请打开'org.springframework.integration'类别的DEBUG,并在此处显示有关日志 – 2014-08-29 14:12:21

+0

调试处于活动状态。没有关于错误通道的调试消息。 – ltom74 2014-08-30 16:37:10

回答

0

我觉得你的问题,你必须在你的errorHandler rallback TX ,但不要犯。

这就是为什么你从DefaultMessageListenerContainer得到egyediségre vonatkozó megszorítás nem tel,因为那个DB错误是在提交时引起的。

在这里看到:Exceptions in Spring Integration: How to log but not intercept

+0

Spring在最后没有提交事务。问题是我的错误处理程序没有被调用。 – ltom74 2014-09-03 15:14:56

+0

>当我的servcie激活器中抛出异常时,我的errorHandler工作正常 – 2014-09-03 16:03:02

+0

您的话。所以,或者你必须从'errorChannel'重新抛出异常,或者只是手动回滚它。 Spring的确尝试提交TX,但这并不是因为约束问题。约束是服务激活器的例外的结果。 – 2014-09-03 16:06:14

相关问题