webreport

博客园 首页 新随笔 联系 订阅 管理

 

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

       

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

 

 

 

相关链接;

web工作流管理系统开发之一 工作流概念

web工作流管理系统开发之二 工作流引擎

web工作流管理系统开发之三 可视化流程设计器

web工作流管理系统开发之四 自定义表单

web工作流管理系统开发之五 开源osworkflow之用户系统改造

web工作流管理系统开发之六 表单权限与流程的权限控制

web工作流管理系统开发之八 开源osworkflow之任务管理

 

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

web工作流管理系统开发之十一 流程数据与业务数据的交互

web工作流管理系统开发之十二 同一张表单在流程多节点中流转的权限控件

web工作流管理系统开发之十三 流程与电子表单集成之事件实现篇

web工作流管理系统开发之十四 流程设计器属性页面之实现篇  

 

 

 

 

posted on 2009-11-24 15:03  web报表  阅读(4413)  评论(1编辑  收藏  举报