9.11 事务一致性配置
UniEAP Report填报模块通过使用UniEAP事务管理组件,不但能够保证填报报表中多数据库多数据集的回填事务一致性,而且当您自行实现更新辅助接口将回填与业务数据同时更新时,在这种事务多层嵌套场景下,仍然能够保证同业务数据间的事务一致性。但前提是遵守UniEAP事务管理组件的规范以及配置。
本章将详细介绍事务一致性的相关配置。
UniEAP事务管理组件配置
在Web应用的如下文件WEB-INF\conf\unieap\transaction\traxnsaction.xml中配置事务管理实现类,您可以直接使用UniEAP事务管理组件提供的事务管理实现类,也可以自己实现继承指定接口的事务管理实现类,配置文件内容如下,如需了解UniEAP事务管理组件的更多内容,请参见《UniEAP事务管理组件手册》。
<?xml version="1.0" encoding="UTF-8"?>
<transaction-policy xmlns="www.neusoft.com/unieap/transaction">
<transaction name="default">
<transactionManager-class>com.neusoft.unieap.transaction.jdbctransaction.JdbcTransactionManager</transactionManager-class>
</transaction>
<transaction name="nonnesttransaction">
<transactionManager-class>com.neusoft.unieap.transaction.nonnest.NonNestTransactionManager</transactionManager-class>
</transaction>
<transaction name="jdbcTransaction">
<transactionManager-class>com.neusoft.unieap.transaction.jdbctransaction.JdbcTransactionManager</transactionManager-class>
</transaction>
<transaction name="jtaTransaction">
<transactionManager-class>com.neusoft.unieap.transaction.jta.JtaTransactionManager</transactionManager-class>
<transaction-name>UserTransaction</transaction-name>
<transaction-provider>Weblogic</transaction-provider>
</transaction>
</transaction-policy>
数据集配置文件的配置方法
首先确定在WEB-INF\conf\unieap\report\report-engine-config.properties文件中的数据库访问工厂设置为
Com.neusoft.report.engine.util.dataaccess.DataAccessFactory=
com.neusoft.report.engine.util.dataaccess.JDBCDataAccessFactory
假设一张报表有三个SQL数据集ds1、ds2、ds3,ds1数据集来自于数据源northwind, ds2数据集来自于数据源sample1,ds3来自于数据源sample2,如果需要保证这张填报报表的ds1、ds2数据集在同一个事务内,而不需要保证ds3和ds1、ds2在同一个事务内,这种情况下则配置如下:
在Web应用的如下文件WEB-INF\conf\unieap\report\datasource.xml中,首先找到Category Name="rdb-sql"的节点,分别在Name属性值为northwind、sample1的DataSource子节点下新增属性TransactionName,值为在traxnsaction.xml中配置的transaction name,在本示例配置文件中,为default。而sample2数据源不需要保证事务一致性,则不配置TransactionName,当不配置时,该数据源的所有数据集更新,不在事务管理范围内。
需要特别说明的是,配置为相同TransactionName的所有数据源在同一个事务中,而不同的TransactionName并不在同一个事务中。没有配置TransactionName的数据源,不在统一事务管理的范围内。
<?xml version="1.0" encoding="UTF-8"?>
<DataSourceManager xmlns="http://www.neusoft.com/report/datasource"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.neusoft.com/report/datasource">
<Category Name="rdb-sql" Caption="关系数据库SQL数据源"
SourceClass="com.neusoft.unieap.dataset.datasource.impl.DrmDataSource"
QuerierClass="com.neusoft.unieap.dataset.executer.jdbc.JDBCDataSetExecuter">
<DataSource Name="northwind" TransactionName="default" Caption="Report样例库"></DataSource>
<DataSource Name="sample1" TransactionName="default" Caption="sample1样例"></DataSource>
<DataSource Name="sample2" Caption="sample2样例"></DataSource>
</Category>
……
【注意】如果使用DRM连接方式,且需要使用UniEAP Report事务管理,则不应该使用com.neusoft.report.engine.util.dataaccess.DrmDataAccessFactory数据访问工厂,而应该使用com.neusoft.report.engine.util.dataaccess.JDBCDataAccessFactory ,在WEB-INF\conf\unieap\connection\connection-config.xml文件中配置drm-connection。该文件的详细配置方法请参见《UniEAP事务管理手册》。