现在的位置: 首页 > 综合 > 正文

web工作流管理系统开发之十 数据库连接及事务设定

2013年06月16日 ⁄ 综合 ⁄ 共 1988字 ⁄ 字号 评论关闭

为了方便设置数据库连接和事务的一致,将所有数据库连接信息统一设置在fcconfig.xml文件中;

fcconfig.xml的内容:
<?xml version="1.0" encoding="utf-8"?>

<root>
<datasources>
  <ds name="fhjtest" dbType="sqlserver"
   type="jdbc" jdbcDriver="com.newatlanta.jturbo.driver.Driver" jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK" user="sa" password="" />
  <ds name="ebsql" dbType="sqlserver"
   type="jdbc" jdbcDriver="com.newatlanta.jturbo.driver.Driver" jdbcUrl="jdbc:JTurbo://localhost/ebtest/charset=GBK" user="sa" password="" />
  <ds name="eformsql" dbType="sqlserver"
   type="jdbc" jdbcDriver="com.newatlanta.jturbo.driver.Driver" jdbcUrl="jdbc:JTurbo://localhost/eformtest/charset=GBK" user="sa" password="" />
  <ds name="eboracle" dbType="oracle"
type="jdbc" jdbcDriver="oracle.jdbc.driver.OracleDriver" jdbcUrl="jdbc:oracle:thin:@localhost:1521:sys" user="eboracle" password="eboracle" />
  <ds name="eformoracle" dbType="oracle"
   type="jdbc" jdbcDriver="oracle.jdbc.driver.OracleDriver" jdbcUrl="jdbc:oracle:thin:@localhost:1521:sys" user="eformtest" password="eformtest" />
   

</datasources>
<fileroot>/ebsys</fileroot>
<pubparam>用户.ID,用户.名称,部门.ID,部门.名称,系统.单位名称</pubparam>
</root>

其中<datasources></datasources>节点中可以设置多个数据源连接

e表、eform或工作流系统默认均是取第一个<ds>的连接串信息。

这样设置的好处有两方面:


1、通过修改这个文件可以将开发库,测试库,运行的正式库分开;比如,开发用一套库,测试用一套库,正式运行的时候设置jndi的数据库连接;
2、可以在同一套系统中同时使用多数据源:比如,操作请求中指定数据源的name,就可以使用指定的数据源,不指定的使用默认的数据源,达到一套系统使用多数据源。

代码实现过程:
一次性读出fcconfig.xml文件的配置信息;
      可以用单例模式一次读出;
      也可以通过servlet的init()一次读出(工作流中采用的是这种方法);

在需要建立数据库连接的时候,根据传入的datasourcename ,建立数据库连接;不传入datasourcename则取第一个;

数据库事务的一致性设定:

      工作流系统eworkflow中业务系统自定义模块用eform自定义表单来实现,流程的递进有单独的工作流引擎;
当流程实例运行时,必须要求业务数据的保存和流程的递进 保持在一个事务中,即当一个提交的环节失败后,业务数据和流程都回滚;

     这就必须要求,eform表单的提交和工作流实例的递进保持在同一个事务中:

实现过程:

      单独设置一个Environment.java类:
      此类负责调用ConnectionConfig.java,创建数据库连接,每获得一个conn后,开启事务。并提供提交关闭方法和事务回滚方法;
       在流程实例的递进提交前,建立Environment的实例,将Environment 的实例传递到eform引擎和工作流eworkflow引擎中,在需要数据库连接的时候,从Environment实例中获得一个,开启事务;如果有异常抛出则调用Environment实例的回滚;

        当业务数据保存和流程的保存都完成后,再调用Environment实例的提交关闭;提交数据和将数据库连接关闭。

       

   这样就达到了流程数据与业务数据保持一致。

抱歉!评论已关闭.