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   web报表  阅读(4417)  评论(1编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示