最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Identifying when a spring integration JMS Outbound Adapter write commit is successful? - Stack Overflow

programmeradmin2浏览0评论

Is it possible to attach a TransactionSynchronizationFactory to an outbound JMS Outbound Adapter?

We are trying to send a message to a JMS queue and want to update a database once the JMS send is successful. The idea is that we will start a transaction when a message comes in on our queue and then once we send the outbound message, we "commit" both the read and the write to JMS and update a database. The TransactionSynchronizationProcessor seem like the correct interface for this, but we are unable to figure out how to attach it to the outbound adapters transaction.

handle(Jms.outboundAdapter(connectionFactory)
                .destination("outputqueue")
                .configureJmsTemplate(jmsTemplateSpec -> jmsTemplateSpec.id("jmsTemplateOutbound")
                    .sessionTransacted(true)
                ))

Is it possible to attach a TransactionSynchronizationFactory to an outbound JMS Outbound Adapter?

We are trying to send a message to a JMS queue and want to update a database once the JMS send is successful. The idea is that we will start a transaction when a message comes in on our queue and then once we send the outbound message, we "commit" both the read and the write to JMS and update a database. The TransactionSynchronizationProcessor seem like the correct interface for this, but we are unable to figure out how to attach it to the outbound adapters transaction.

handle(Jms.outboundAdapter(connectionFactory)
                .destination("outputqueue")
                .configureJmsTemplate(jmsTemplateSpec -> jmsTemplateSpec.id("jmsTemplateOutbound")
                    .sessionTransacted(true)
                ))
Share Improve this question asked Feb 4 at 21:26 VPN236VPN236 273 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

start a transaction when a message comes in on our queue

So, you start transaction far before this Jms.outboundAdapter(), but you somehow think that TransactionSynchronizationProcessor would make sense only on this Jms.outboundAdapter(), which is not correct because transaction management is not here.

Consider to use this processor exactly at the place where you start transactions.

See DefaultTransactionSynchronizationFactory and TransactionSynchronizationManager.registerSynchronization(synchronization) API.

发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>