Camel blueprint sql事务管理器

时间:2015-12-02 13:33:40

标签: java mysql transactions apache-camel

我在事务控制下有两个插件。如果其中一个失败,另一个也不会被执行/插入。这样在MySQL中正确执行时可以正常工作

START TRANSACTION;
INSERT INTO table (field) VALUES (value);
INSERT INTO table2 (field) VALUES (value);
COMMIT;

现在使用骆驼我已经尝试了

<to uri="sql:START TRANSACTION; INSERT INTO table (field) VALUES (value);INSERT INTO table2 (field) VALUES (value);COMMIT;"/>

产生sql语法错误。 我尝试的第二件事是

<to uri="sql:START TRANSACTION"/>
<to uri="sql:INSERT INTO table (field) VALUES (value)"/>
<to uri="sql:INSERT INTO table2 (field) VALUES (value)"/>
<to uri="sql:COMMIT"/>

有效但如果一次插入失败,另一次插入仍然被执行并插入。

我也发现了这个 http://camel.apache.org/transactional-client.html但我正在使用蓝图,这些例子似乎只适用于春天。所以,如果有人用骆驼蓝图做一个很好的例子,那就太好了。

任何人都可以帮我在骆驼中做到这一点吗?

2 个答案:

答案 0 :(得分:1)

使用TX管理器怎么样? 定义XA JDBC资源并将其与您的调用一起使用,例如此处https://github.com/tmielke/fuse-demos/blob/master/Camel/Camel-JMS-JDBC-XA-TX/routing/src/main/resources/OSGI-INF/blueprint/camel-context.xml

-G。

答案 1 :(得分:0)

确保&#34;引擎&#34;是InnoDB(不是MyISAM)。 MyISAM默默地忽略事务语句(STARTCOMMIT)。

使用mysql命令行工具,执行SHOW CREATE TABLE ...。在表的末尾,它将指定引擎。