我正在使用wso2esb 4.7.0和postgresql并通过代理服务在同一数据库的两个不同表中插入值。这个插入操作正常工作。现在我的情况是如果我的第二次插入失败,首先插入应该回滚。我使用事务中介(回滚事务),但它无法正常工作。
代理配置和故障顺序如下:
<target >
<inSequence onError="myFaultHandler">
<transaction action="new"/>
<dbreport>
<connection>
<pool>
<password>Youtility11</password>
<user>youtilitydba</user>
<url>jdbx:postgresql://localhost:5432/DB2</url>
<driver>org.postgresql.Driver</driver>
</pool>
</connection>
<statement>
<sql>
insert into table1(name,id) values(?,?)</sql>
<parameter xmlns:ns="http://org.apache.synapse/xsd"
expression="//name/text()"
type="VARCHAR"/>
<parameter xmlns:ns="http://org.apache.synapse/xsd"
expression="//id/text()"
type="VARCHAR"/>
</statement>
</dbreport>
<log level="full">
<property name="name" expression="get-property('name')"/>
<property name="id" expression="get-property('id')"/>
</log>
<log level="full">
<property name="text" value="Reporting to the DB2"/>
</log>
<dbreport>
<connection>
<pool>
<password>Youtility11</password>
<user>youtilitydba</user>
<url>jdbx:postgresql://localhost:5432/DB2</url>
<driver>org.postgresql.Driver</driver>
</pool>
</connection>
<statement>
<sql>
insert into table2(firstname,lastname) values(?,?)</sql>
<parameter xmlns:ns="http://org.apache.synapse/xsd"
expression="//firstname/text()"
type="VARCHAR"/>
<parameter xmlns:ns="http://org.apache.synapse/xsd"
expression="//lastname/text()"
type="VARCHAR"/>
</statement>
</dbreport>
</inSequence>
</target>
和序列是:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="myFaultHandler">
<log level="full">
<property name="message" value="**ROLLBACK**"/>
</log>
<transaction action="rollback"/>
</sequence>
这里,当我在第二个表中插入错误的记录时,它显示错误,但第一个表插入已完成。为什么回滚不起作用?让我知道..
提前致谢