【发布时间】:2013-09-19 17:41:50
【问题描述】:
入站网关:
<int-http:inbound-gateway id="inbound.gateway"
request-channel="transactional.channel.input"
reply-channel="channel.output"
error-channel="channel.error"
request-payload-type="java.lang.String"
</int-http:inbound-gateway>
建议定义:
<tx:advice id="advice">
<tx:attributes>
<tx:method name="send" propagation="REQUIRES_NEW" rollback-for="MyClassException"/>
</tx:attributes>
</tx:advice>
建议配置:
<aop:config>
<aop:advisor advice-ref="advice" pointcut="bean(transactional.channel.input)"/>
</aop:config>
需要交易的链:
<int:chain input-channel="transactional.channel.input" output-channel="non.transactional.channel.input>
<int:service-activator ref="v1.registerUser.service" method="registerUser"/>
<int:service-activator ref="v1.saveObject.service" method="saveObject"/>
</int:chain>
需要先执行事务以获取在最后一个事务链步骤中生成的对象id的链:
<int:chain input-channel="non.transactional.channel.input" output-channel="channel.output">
<int:service-activator ref="v1.getObjectId.service" method="getObjectId"/>
<int:object-to-json-transformer/>
</int:chain>
有了这个简化的上下文,当我访问 getObjectId 服务中的 id 时,事务还没有执行。
所以事务似乎是在入站网关输出级别提交的。
【问题讨论】:
-
这取决于您的流程是如何开始的 - 您在
v1.getEvent.channel.input的上游有什么? -
我有一个连接到一条链的入站网关,而这条链有
v1.getEvent.channel.input作为输出通道,所以:(inbound-gateway)->(chain)->(code I have posted)
标签: transactions spring-integration