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


为了方便设置数据库连接和事务的一致,将所有数据库连接信息统一设置在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实例的提交关闭;提交数据和将数据库连接关闭。

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


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3