企业门户中待办事宜集成方案及技术实现
彭代文 邓杰 谭鹤 网络

0 概述


    随着信息化程度越来越高,许多企业开始进行信息整合,提高信息利用率,企业门户作为信息整合的一种有效手段,被越来越多的企业用。企业门户可以集成企业内部的业务系统,实现信息的横向集成和纵向贯通,为企业的各业务系统提供内容的统一展现、发布和管理,以及提供与用户交互的统一平台。企业门户主要包含3部分的功能: (1)基础功能,如单点登录、虚拟门户、Portlet框架、门户管理和维护等l(2)基本应用,如Web内容管理、搜索等;(3)专业应用,如业务接入、待办事宜集成等。


    建设企业门户过程中,待办事宜集成是一个普遍需要解决的问题,待办事宜集成是指将各业务系统的待办事宜集成到企业门户的待办事宜模块。企业门户是各业务系统的统一入口,用户在登录企业门户时可以看到权限内需要处理的待办任务,包括邮件、待批公文、待审业务等。通过点击待办事宜的链接,直接进人业务系统的功能模块处理待办任务。待办事宜的集成可以方便用户查看待办任务,避免用户登录到各业务系统去查看,提高用户的工作效率。


1 方案讨论


    1.1 企业门户端


    为了降低耦合度,提高系统的可扩展性,待办事宜集成可以采用Web Service方式实现。由企业门户提供集成待办事宜的Web Service接口,各业务系统调用该接口,将业务系统内的待办任务传送到企业门户(见图1)。该实现方式可以降低企业门户与业务系统的耦合度,同时,Web Service接口调用对业务系统的开发语言没有限制。

 

企业门户的待办事宜模块包括Web Service接口、数据提交、数据访问、统一待办库。统一待办库存储用户的待办任务信息,数据访问读取统一待办库中的待办信息,在企业门户页面中展现,数据提交接收业务系统的待办任务信息,然后存人统一待办库。整个流程是:业务系统调用待办事宜模块的Web Service接口,通过数据提交将待办任务信息存入统一待办库当用产登录企业门户时,根据用户的ID,通过数据访问读取统一待办库中该用户的待办任务信息。


    1.2 业务系统端


    基于企业门户端的实现方式,在业务系统端可采用下面的几种方案实现。


    (1)在业务系统程序中插入待办事宜集成的处理程序。业务系统的待办任务信息在系统的各个业务流程节点产生,在流程节点处插入待办事宜集成的处理程序,调用Web Service接口,将待办任务信息传送企业门户(见图2)。如果业务系统使用了工作流引擎,可以在工作流引擎中增加拦截事件,然后在事件处理程序中进行处理。

 

(2)在线程中周期性读取待办任务数据库表。在业务系统中使用线程监控业务系统待办任务数据库表,以某一固定频度读取数据库的待办信息任务,判断待办任务表的字段变化和新增数据项,然后在待办任务集成处理程序中调用Web Service接口(见图3)。

 

(3)数据库触发调用程序实现。在待办任务的数据库表上建立触发器,当业务系统将待办信息存入待办任务数据库表或者数据库表中字段变化时,触发调用待办任务集成处理程序,调用Web Service接口(见图4)。

 

以上3种集成方案在实时性、扩展性、性能方面各不相同,对比分析如表l所示。

 

(1)实时性。方案1和方案3均能满足待办任务集成的实时性,在产生待办任务的同时,调用相应的待办任务集成的处理程序,及时将待办任务传送至企业门户统一待办库,而方案2是周期去读取数据库待办任务表,只能以设定的频率传送待办任务信息。


    (2)扩展性。扩展性是指在业务系统功能升级或改动时,对待办任务集成的影响。在方案2和方案3中,集成处理程序与业务系统的程序是松耦合,业务系统的程序改动不影响集成处理程序,扩展性好,而方案1的集成处理程序与业务系统的程序是紧耦合的,不利于扩展。


    (3)性能。方案2需要在业务系统程序中使用专门的监控线程,读取周期设定的越小,对性能影响就越大。方案3采用在数据库建立触发器的方式,会对数据库性能有些影响。综上所述,方案l的集成方式


    与业务系统是紧耦合的。不便于系统的功能扩展。方案2的任务信息,实时性不如方案l和方案3,如果为满足实时性将读取周期设定过低,会影响系统性能。方案3即能满足实时性,又与业务系统是松耦合,推荐采用方案3实现待办任务的集成。


2 技术实现


    下面对方案3的技术实现进行探论。假定数据库采用Oracle109。因为Java语言的先天优势和Java使用的广泛性,Oracle 8之后的版本,在数据库中集成了Java虚拟机(JVM),因此,可以在Oracle数据库中使用Java语言。

2.1 整体架构


    如图5所示,Database是Oracle数据库,Task是数据库中的待办任务表,Trigger是建立在Task表上的触发器,Java Procedure是Java存储过程,Java Code是Web Service接口调用程序,.class是Java程序用到的类库,Web Service是企业门户提供的Web Service接口,Task是企业门户的统一待办库。图中箭头方向说明了整个程序的调用过程。首先在数据库待办任务Task表上建立触发器,监控Task表中的新增记录和变化字段,当触发器被触发时,调用JavaProcedure,在Java Procedure中调用Java Code,尽PWeb Service接口调用程序;.最后将待办任务信息传送至Task(企业门户统一待办任务库)。

 

在Oracle数据库的存储过程中调用Java Code(Web Service接口调用程序),不同于普通的Java程序调用。普通的Java应用程序必须在某个类中包含main()方法,通过命令java执行该类调用,main()方法是整个程序的入口。在Oracle的存储过程中调用Java Code贝U不同,程序的入口点是类的静态方法。
    2.2 实现过程
    (1)测试Web Service接口调用程序。在Oracle数据库中可以编写和调试Java源程序,但不如其他开发工具方便,所以Web Service的接口程序可以先在Eclipse工具中编写和调试,然后将程序中的main()方法改为一个静态的方法,再导人为Oracle中的存储过程调用。
    开发Web Service接口调用程序可以使用第三方的辅助工具,如Axis(Apache eXtensible InteractionSystem)开源项目,因此会用到开源项目中的类库,在使用时这些类库需要被导入Oracle中。
    (2)将源程序和使用的类库导入Oracle。Oracle提供了loadjava和dropjava工具,用于导入和删除Java程序。可以导入Java源程序、Java类和Jar包,格式分别为.java、.classjar。导入之后Oracle会对类进行解析。用Valid和Invalid2种状态来标识,如果为Invalid,在程序中不能被引用。需要注意的是,在导入的类之问存在相互引用,如果导入类引用了其他Invalid或不存在的类,该也会被标识为Invalid。在导入类时会有许多类被标识为Invalid,比如A类引用了B类,B类引用了C类,如果C类不存在,则A、B、C 3类都会标识为Invalid,这样就会导致A类不能被用。这里与普通的Java程序不同,如果C类不存在,只要A类不调用B类中使用了C类的方法,A类仍然可以被用。对此,Oracle提供了解决方法,在解析时可以指定相关参数。如-resolver和genmissing。
    (3)编写触发器和Java存储过程。Oracle支持用Java编写的存储过程,Java存储过程示例如下:
Create or replace procedure
P—TASK
(appid varchar2,apptaskid
varchar2,handletime varchar2)
as language java
name。Task.run(java。lang.
String,java.1ang.String,java.
1ang.String)。
    该存储过程调用了Task类的run()静态方法。
    在触发器中调用Java存储过程,触发器的示例如下:
create or replace trigge
after update of readmark on
TASK
for each row
when(new.readmark=1)
call P_TASK(:new.appid,:
new.aPPtaskid,:new.
handletime)
T—TASK触发器中调用了
P—TAsK存储过程。


    2.3 问题及解决办法
    (1)JDK版本问题。不同的Oracle版本用的JDK也不同,Oracte9用的是JDKl.3,Oraclel0用的是JDKl.4。在使用开源项目Axis时,如果Axis使用的JDK版本高于Oracle内嵌的JDK版本,在导入类时就出现很多类不能被解析。标识为Invalid。因此,导入的类时要确认使用的JDK版本与Oracle使用的JDK版本相同或更低。

    (2)无法解析Java类。在导人类时,经常会出现很多类被标识Invalid。Java类不能被解析一般是由于类之间的相互引用导致的,除此之外,还有可能是由于Oracle数据库中的SHARED—P00L—SIZE和JAVA—POOL—SIZE这2个初始化参数设置不合理。在加载和解析Java类时,会占用一定的内存,上面2个参数就是设置该内存大小。每个Java类会使用4~8kB的内存,如果内存参数设置得过小,也会导致Java类不能被解析,因此在导人Java类之前要估算好相应的内存大小。

CIO之家 www.ciozj.com 公众号:imciow
关联的文档
也许您喜欢