天天@BLOG

脖子越来越疼,脑袋越来越钝
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

不可不知:企业级开源软件大盘点 (转载)

Posted on 2006-11-02 14:10  天天在线  阅读(278)  评论(0编辑  收藏  举报

由于开源软件特殊的开发方式,使得这个领域真可谓百花齐放,以至于究竟有多少种开源软件,恐怕没有多少人能说清楚。本报评析实验室在开源专家的意见的基础上对其中颇有影响力的企业级开源软件进行了整理,以供读者参考。

 

Linux 操作系统

 

  Red Hat

 

  Red Hat Enterprise Linux(RHEL)作为红帽家族的服务器成员,提供了功能较为强大的操作系统和企业架构方案。它使用开放源码的 Linux 2.6 内核,使得平台稳定性和成熟性较以往有所增强。RHEL采用了大量成熟的开放源代码技术,如SELinuxFirefox等,同时特别针对桌面应用进行了改善,能较好地满足企业安全性和兼容性的要求。系统在新文件系统、即插即用硬件设备的支持以及用户和服务管理方面较以前版本有了显著的提高。

 

  RHEL的缺点是带有一些不标准的内核补丁,使得它难以按照用户的需求进行定制。

 

  Red Flag

 

  Red Flag Linux Desktop 5.0(产品代号为Apatite)是一个稳定、易用的个人桌面系统,系统安装过程简单直观,提供了较完善的系统管理工具和图形图像、多媒体应用以及网络应用方面的多种应用软件。系统采用Linux 2.6内核,为用户提供了一个比较稳定而且高效的使用环境。系统能够较好地支持主流PC硬件设备和目前发展迅速的蓝牙通信技术,能较好地支持蓝牙设备和系统之间多种数据的无线互传。不足之处在于系统在桌面的美观程度、常用工具的易用性以及联机帮助和用户手册汉化等方面还需进一步加强。

 

  拓林思

 

  拓林思(Turbolinux)对产品的稳定性、高效性以及安全性方面进行了特殊加强,Turbolinux 10一直严格遵循该领域的相应标准CGL(carrier_grade_linux),通过了LSB 1.3 标准的完整测试,可以很方便地移植符合LSB 1.3 标准的软件。集成了完善的系统级开发环境和高效、稳定的开发工具,开发型用户不需额外购买即可实现二次开发。同时该产品的易用性显著增强,可以为企业级数据库和大型商业软件提供高效的系统平台,支持24×7 不间断的全天候工作方式。基于对SambaNFS 等各种技术的完全支持,可以与现有的各种操作系统实现互联互通,协同工作,不但保护了用户的前期投资,同时也降低了系统整体部署的成本。

 

  共创

 

  共创桌面Linux(Co-Create Desktop Linux)2005是一个适合普通用户使用的桌面操作系统,它为用户提供了较稳定、高效的计算机使用环境。系统采用开放源码的Linux 2.6内核,提升了Linux作为桌面应用的性能。采用类Windows的界面风格和鼠标与快捷键操作方式,桌面与菜单简洁实用,方便了用户操作。系统还提供了较为丰富易用的系统管理工具以及浏览器、电子邮件、网络聊天工具、多媒体软件等多种应用软件,采用了具备中英文混合输入及智能联想输入能力的共创中文输入法,形成了较完整的办公应用环境。

 

  不足之处是系统在硬件设备的支持能力、常用大型软件的支持能力和X窗口的稳定性等方面还需进一步加强。

 

   Java版 应用服务器

 

  JBoss

 

  JBoss是目前最有影响力的开源应用服务器,它几乎成了开源软件的旗舰产品。和出色的同类商业软件BEAWeblogicIBMWebsphere相比,JBoss的优势在于具有良好的性价比。从出现至今,它已经从一个EJB容器发展成为一个基于J2EEWeb 操作系统(Operating System for Web),它体现了J2EE规范中最新的技术。不仅如此,它的技术创新能力还有影响和引领规范的趋势。它具有良好的运行效率和可靠性,已经得到越来越多的J2EE应用开发者的青睐。

 

  JBoss 是当前最流行的开源J2EE应用服务器之一, 它遵循LGPL协议进行发布。JBoss安全符合J2EE 1.4的标准规范, 提供EJBJMS ServletJSPJMXJNDI等规范的支持。 JBoss以其优秀的基于JMX微内核在J2EE应用服务器领域独树一帜,其体系结构分为:

 

  微内核层 微内核层采用基于JMX的体系架构,它提供对轻量级组件模型的热部署和高级类装载和全生命周期管理的特性。

 

  服务层 在微内核层之上采用了面向服务的体系结构。它由一系列服务组成,包括事务、消息、邮件、安全、连接池等。服务可以采用热插拔的方式进行部署,而无需停止整个服务器。同时也可以定制自己的服务并将服务打包成SAR,进行独立的部署,通过这种机制,使得JBoss更易于灵活地进行扩展。

 

  应用层 JBoss 通过提供统一容器服务,为应用中的对象提供各种互通的行为能力。同时JBoss还支持 AOP的方式, 以透明化的方式简化应用开发的过程。

 

  JBoss应用服务器(AS)4.0 通过了J2EE 1.4的认证。JBoss AS 4.0极大地简化了Java中间件开发,使用更加简单的、更加易于管理的POJO,这种新的模式转变为推动整个Java 应用服务器的发展起到了重要的作用。新版本的JBoss 5.0也正在研发之中,全新的JavaEE 5.0体系架构将为JavaEE应用软件开发人员带来更多优秀的特性。

 

  JOnAS

 

  JOnAS由欧洲的ObjectWeb协会开发,也是比较有影响力的一个开放源代码的J2EE实现。JOnAS主要是J2EE容器的实现,J2EE服务等都由ObjectWeb其他项目实现,它们之间接口定义良好,可以很方便地共同组合为一个应用服务器。JOnAS本身的技术特点不是很明显,但它目前在着力推倡OSGi技术,这应该是它未来一段时间的卖点。目前ObjectWeb也在积极寻求跟中国的合作,JOnAS4.8就已经有来自中国团队的贡献。随着欧盟和中国的合作深入,开源应用服务器在未来的合作应该会走得更远。

 

  PKUAS

 

  PKUAS(Peking University Application Server)由北京大学信息科学技术学院软件研究所自行设计开发。分为遵循J2EE1.3J2EE1.4 J2EE5等三种版本。PKUAS积极倡导采用微内核和构件化思想来构造,也就是自己构造微内核和集成框架,而其他则选择优秀的开源软件。200512PKUAS 2005ObjectWeb的源码库中开放,20067PKUAS的动态集群内容也被JOnAS团队采纳,被集成到了JOnAS4.8中。

 

  Plug-in体系架构 PKUAS借鉴操作系统的微内核思想,通过抽取一组基本功能形成一个内核,将平台内部的其他功能封装在各个相对独立的模块内,允许用户根据需要定制与扩展这些功能模块,在系统启动阶段由内核装配成构件运行支撑平台。

 

  丰富的服务和工具集合 PKUAS不仅提供J2EE定义的标准服务,包括名字服务、通信服务、事务服务、数据服务、消息服务、安全服务、Java Mail服务等,还提供扩展的功能服务,包括日志服务、集群服务和用户自定义服务等。

 

  ● PKUAS集群服务实现了可灵活定制的负载平衡框架,支持常见的负载平衡策略。PKUAS支持客户端对服务器群组变化的感知和适应,这部分实现已被JOnAS采纳。

 

  ● PKUAS提供了可插拔的基于集成开发环境(EclipseJBuilder)中的开发部署插件,帮助用户简化J2EE应用和EJB开发及部署的过程。

 

● PKUAS提供从其他应用服务器到PKUAS的应用移植工具,包括WL4PKUASJBOSS4PKUAS

 

此外,PKUAS还附带有需求建模和体系结构建模工具,支持全生命周期的应用开发,这些工具目前也在积极实用化过程之中。

 

    Apache Geronimo

 

  Apache Geronimo Apache 软件基金会的开放源码J2EE服务器,它集成了众多先进技术和设计理念。这些技术和理念大多源自独立的项目,其配置和部署模型也各不相同。Apache Geronimo能将这些项目和方法的配置及部署完全整合到一个统一、易用的模型中。

 

  Apache Geronimo是由Apache Software Foundation(负责流行的 Apache HTTP 服务器开发的团队)创建的一个开源的、认证的J2EE 服务器,它遵循ASF 2.0协议进行发布。作为 J2EE 服务器,Geronimo 可以部署和运行 Web 应用程序和企业应用程序。可以使用 Java ServerPage(JSP)ServletFilter Enterprise JavaBean(EJB)来构建应用程序。这个应用程序可以通过 Java Data Access API(JDBC)连接器访问外部 RDBMS、通过 Java Naming and Directory Interface(JNDI)访问目录服务,通过 Java Message Service(JMS)访问事务性消息队列,通过 JavaMail 访问电子邮件等。

 

  在Geronimo,考虑到JMX对大规模应用服务的性能和开发复杂度带来的影响,在后期使用了以控制反转(Inversion of Control)为基础的全新内核架构,这种架构有益于服务的插入,因为代码可以以服务逻辑为中心。要获得 JMX 可管理性,只需要根据 IoC 依赖性添加一些编码规范即可。这种设计也使得从 Geronimo 中的服务管理变得更简单。

 

  Geronimo 现在已逐步成为服务器端产品开发最有吸引力的容器之一。它丰富的功能集、无责任要求的Apache许可和随时可部署的、认证的J2EE 1.4容器等优势,使得它将成为JavaEE应用服务器市场的又一有力竞争者。

 

  JFox

 

  JFox 是由Huihoo.org开源软件社区推出的JavaEE应用服务器。为了简化EJB的开发,提高开发和部署的效率,在表达形式上做了一些改进,其目标是在规范和开发效率之间找到一个平衡,既尽可能遵循规范,又尽可能改变EJB开发缓慢、部署麻烦的现状,切实提供一个快速的J2EE平台。

 

  它遵循LGPL协议进行发布。JFox应用服务器通过与国际知名开源组织,如ObjectWebApache 等合作,充分发挥全球开源开发人员的资源和优势,使JFox逐步走向成熟和完善。并逐步进入商业应用领域。

 

  JFox应用服务器在保证对J2EE规范兼容的前提下,提供了更多高级的特性:

 

  采用增强型IoC 内核,并结合JMX的优势,支持基于Web组件管理;

 

  采用动态代理调用框架,无需EJB预编译;

 

  采用协议后决的调用方式在调用过程中可以动态改变调用EJB协议;

 

  采用优化的调用链模型,提高服务端执行速度;

 

  支持远程和本地调用自动切换,同一个应用服务器上的EJB之间的调用自动使用本地调用,无需实现本地接口;

 

  高性能事务处理,JFox采用了先进的事务处理模型,提高了事务处理的调用性能。

 

JavaWeb框架

 

  Struts

 

  Struts是一个基于Sun J2EE平台的MVC框架,主要采用ServletJSP技术来实现的。它已成为用Java创建Web应用的一个最流行的框架工具,Struts所实现的MVC模式给Web 应用带来了良好的层次划分,同时也提供了一系列的工具来简化Web应用的开发。

 

  Struts通过提供一个中心化的Servlet来实现MVC中的控制器模式。Struts中的控制器提供集中请求转发功能,就好似一个路由器系统,解析来自客户端发起的请求,并将请求定向到对应的业务逻辑上,最后将业务逻辑处理得到的结果展现到对应的视图上。通过这种模式,它将控制器与视图逻辑进行了较好的分离,使得应用系统能更快适应业务逻辑的变化。在视图技术上,Struts不仅限于JSP,同时可以与XML/XSLTVelocity等技术进行结合。这些丰富的标签库为加速应用开发提供了更为快捷的途径。

 

  Struts框架也为用户提供了极为丰富的开发文档,同时Struts相关的书籍也大量上市,这为开发人员学习和使用Struts提供了可靠的保障和支持。Struts经过多年的发展,已经拥有大量的开发者群体,这些开发群体使得Struts的开发和改进工作得到不断的支持,Struts框架因此具备更为长期和稳定的发展潜力。

 

WebWork

 

  WebWork是由OpenSymphony组织开发的、致力于构件化和代码重用的拉出式MVC模式J2EE Web框架,它以其精巧、灵活、功能强大而闻名。WebWork 2.x早期是由著名的开源专家Rickard Oberg开发完成, 随着技术的演化,WebWork项目现在被拆分成两个单独的项目Xwork1WebWork2两个项目。 Xwork是一个标准的Command模式实现,完全从Web层脱离出来。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。在WebWork 2.2中添加了对AJAX的支持,这支持构建在DWRDojo这两个框架的基础之上。

 

  WebWorkStruts的不同表现在以下一些方面:

 

  线程模型: Struts 的请求只有一个实例去处理,这使得所有资源都必须保持同步,会产生线程安全的问题。在WebWork的实现中,每一个请求对应一个Action, 每一个处理都是相对隔离,不会产生线程安全的问题。

 

  容器外测试: StrutsAction依赖ServletRequestServletResponse,因此进行单元测试时必须依赖容器本身。WebWork2中的Action不依赖任何容器,可以较好地进行容器外测试。

 

  Action的控制: WebWork提供Action拦截器处理机制,允许在每一个Action前后进行其他操作。

 

  WebWork用户群体较小,相关的文档资料和支持工具也较少,比较适合技术能力较强的开发人员使用。

 

  EasyJWeb

 

  EasyJWeb是基于Java技术、应用于Web应用程序快速开发的MVC框架,框架设计构思来源于国内众多项目实践,框架充分借鉴了当前主要流行的开源Web框架 (StrutsWebwork),吸取了其优点及精华,利用Velocity作为模板页面引擎,是一个实现了页面及代码完全分离的MVC开发框架。EasyJWeb具有以下几个特点:

 

  1.零配文件置支持。EasyJWeb实现零配置支持,可以不写一句配置文件就在框架基础上构建运用(适合小型网站系统)

 

  2.简易的模板页面设计支持。放弃使用JSP,使用简单Velocity脚本语言作为页面模板。

 

  3.页面程序完全分离。实现显示与程序逻辑的完全分离,克服了传统JSP页面难于维护的问题。

 

  4.基于页面组件的框架。灵活的页面组件配置可以直接通过配置文件设置字段级的事件组件。

 

  5.快速开发支持。通过EasyJWeb Tools,可以自动生成应用软件模板代码,定制并管理自己的J2EE代码模板。

 

  EasyJWeb是本次Web框架中推荐的惟一来自中国开源社区的一个,是一个能实现中小型 Web应用系统快速开发的简易Web框架。尽管没有能够同Eclipse结合的插件,而是使用自己的一套开发工具,但在国内有一定影响力。

 

    Turbine

 

  Turbine是基于Servlet的框架包,也是开放源代码Jakarta项目。目前还没有关于Turbine的大量文档。它类似于Struts,但是有一些主要区别,突出的一点就是它并没有与JSP耦合。Turbine还有一个特点是它提供了大量可重用的构件,不过这些构件是离散的。

 

JavaWeb服务器

 

  Jetty

 

  Jetty是一个免费的和开源的Servlet容器。Jetty最大的特点是它既可以作为独立的Web服务器,也可以为一个已经存在的应用程序提供Servlet功能。也就是说它可以非常轻易地嵌入到个人的Java 应用中,这样用户就不必把Web应用发布到一个服务器上。正因为Jetty的存在,Tomcat才不至于成为一枝独秀,Web服务器领域才会更加有趣。

 

  Tomcat

 

  Tomcat是一个免费、开源的Servlet容器,它是Apache基金会的Jakarta项目中的旗舰产品,由ApacheSun和其他一些公司及个人共同开发而成。它曾被JavaWorld杂志评为2001年度最具创新的Java产品(Most Innovative Java Product),同时它又是Sun公司官方推荐的ServletJSP容器。ServletJSP的最新规范都可以在Tomcat的新版本中得到实现。它是目前应用最为广泛的Servlet容器,许多J2EE应用服务器都集成它作为自己的Servlet容器。

 

Java版 持久层框架

 

  Apache Torque

 

  Apache Torque是一个使用关系数据库作为存储手段的Java应用程序持久化工具,是 Apache 的公开源代码项目。TorqueWeb应用程序框架Jakarta Apache Turbine发展而来,但现在已完全独立于TurbineTorque 主要包含两部分: 一部分是 Generator,它可以产生应用程序需要的所有数据库资源,包括SQLJava文件。另外一部分是 Runtime,提供使用这些代码访问数据库的运行时环境。

 

  Hibernate

 

  Hibernate最早是Sourceforge.net的一个子项目,后被JBoss购入麾下,目前已成为炙手可热的持久数据管理框架。它是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。

 

  iBatis

 

  iBatis提供了ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致。对于具体的数据操作,Hibernate 会自动生成SQL 语句,而iBatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,iBatis SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。

 

    JavaJ2EE框架

 

  Spring

 

  Spring是由Interface21公司的CEO Rod Johnson领导开发的开源J2EE应用框架,它解决了许多在J2EE开发中常见问题。Spring还提供了管理业务对象的一致方法,并且鼓励对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。

 

  SpringJ2EE应用开发提供了一个完整的分层体系架构,为使用轻量级的方法解决复杂的企业级应用开发提供了一个最佳实践。Spring应用框架由几个模块组成:

 

  Spring核心容器: Setting Injection为主的IoC(反转控制容器), 通过XML配置模式,应用组件间的依赖进行关联。

 

  Spring Context: Spring Context作为贯穿Spring整体的一个引线,为框架内集成的服务提供上下文环境。

 

  Spring MVC框架: 将已有的Web MVC框架与Spring进行集成,使现有的MVC框架能与Spring IoC容器进行挂接,提供从控制层到业务层的反转控制式编程。

 

  Spring AOP: Spring提供了面向方面的编程能力。

 

  Spring ORM: 集成了HibernateJDOIbatis SQL Map 等持久化组件,为上层应用开发提供了一致的持久化编程模型。

 

  Spring DAO: JDBC的应用开发操作进行抽象,提供统一的模板方法和异常层次结构,同时提供透明的事物处理机制,极大地简化了基于数据库应用的开发过程。

 

    Spring框架的这种松耦合编程体系结构和非入侵性的特性,使得J2EE的应用开发不依赖于任何J2EE应用服务器,为提高J2EE应用开发的整体质量起到了极其关键的作用。

 

  JFoxSOAF

 

  JFoxSOAF(JFox Service-Oriented Application Framework)Huihoo.org 开源社区开发,是以Type3模式的IoC为核心的J2EE应用开发框架。JFoxSOAF采用基于IoC微内核的系统设计架构,将现有众多开源的成熟软件框架、组件集成到一个体系中来,将原来相对零散的部件构成一个整体,为应用项目的开发提供一个完整的框架结构和实践的指南。JFoxSOAF作为应用服务器上层的技术基础件,提供三个层面的系统服务,即应用服务层、业务服务层、系统服务层。

 

  JFoxSOAFSpring的不同表现在以下几方面:

 

  IoC核心容器: JFoxSOAF采用基于构造器注入方式的IoC容器,无需在大量的XML描述文件中声明类间的依赖关系,极大地简化了应用开发的部署描述。

 

  独立的上下文环境: JFoxSOAF采用独立的上下文环境,通过ServiceFactory, 任何一个类都可以在任何环境获得注入在IoC容器中的实例,从而建立起引用关系。SpringWeb应用中,必须通过Web容器环境获得上下文的环境。

 

  JDBC开发模板: JFoxSOAF集成了DBUtils作为JDBC DAO的模板框架,提供数据自动填装功能,简化了CRUD操作的开发过程,简单易用。SpringDAO模板功能也非常强大,但其需要手工进行数据填装操作,增大了应用开发的复杂度。

 

  事务处理: JFoxSOAF采用JOTM作为事务处理器,提供编程式的事务管理,Spring框架提供声明式的事务管理,更易于灵活地配置开发。

 

  .Net 开源框架

 

  Castle

 

  Castle.Net系统级框架,它通过将一些成熟开源应用进行无缝整合而成的一套完善的应用系统框架,这其中包括了ActiveRecordDynamicProxyMonoRailMicroKernel/WindsorMicroKernel/WindsorCastle的底层核心实现,它采用IoC容器对系统进行运行期动态设置,主要包括FacilitiesComponentsServices三大部分。

 

  ActiveRecord对当前热门的ORM框架NHibernate进行了封装处理,主要包括将一些常用的数据进行抽象化、通过Attribute来取代mapping文件等。在ActiveRecord的实现中,Model对象必须继承于Active-RecordBase对象以便于Castle容器进行控制,限制Model对象从其他非持久化对象继承的可能,这是有违NHibernate/Hibernate最初的设计思想的。在Hibernate的设计思想中,Model对象可以是任意的Java Bean对象。MonoRailRuby on Rail.Net实现,这是一个MVC Web框架。它与传统WebForm在控制上的不同在于WebForm采用页控制器模式,而MVC采用前端控制器模式。在界面表达方式上MonoRail采用模板引擎输出,模板引擎在PHPJSP上已广泛使用,而在ASP

 

  .NET上因为服务端控件的强大功能和易用性而很少有人使用,两者是各有优缺点。

 

  Spring.NET

 

  Spring.NET是由Spring框架移植而来的,Spring框架是Java著名的应用系统框架,它已成为了替代轻量级企业应用的开发标准框架了。Spring.NET包括:

 

  Spring.Core core就是一个对象工厂(ObjectFactory), 它通过配置中的对象定义来创建对象,它的目的是消除对象的new操作。在配置文件中,除了定义对象的一些属性外,还能定义对象之间的相互关系,这就使得对象之间的耦合延迟到了运行时,如果针对接口或抽象类进行编程,则还可以通过具体对象的不同实现来定制系统的行为。

 

  Spring.AOP 这是按AOP联盟的接口定义来实现的,AOP即面向截面编程,其核心是通过给对象创建一个动态代理对象来接管对象的操作,这样就能对操作进行前置和后置处理了。

 

  Spring.Data 这是一个由第三方实现的整合到Spring内的数据访问组件,目前已包括了NHibernate的实现部分。Spring

 

  .NET还显得不够成熟,一些功能因为平台的局限性而导致了移植上的困难, Castle相比就差了一些。

 

  Nhibernate

 

  Nhibernate.NET持久层框架,它从Java上的Hibernate移植而来。作为一种o/r mapping框架,它具有以下一些特点: 完善的数据映射及关联操作; 可扩展的持久机制; 强大的数据加载功能; 面向对象的数据查询语言HQL; 缓存机制; 多数据库支持。

 

  Nhibernate的强大之处在于开发者几乎不用去了解任何数据存储和查询的细节问题,而能更专注地通过面向对象设计来构建系统。其HQL查询语言完全是针对对象及其属性来设计的,与SQL语法保持一致,降低了学习的曲线。

 

  当然,Nhibernate还有一些不足之处,如报表数据。另外在性能上, Nhibernate通过反射来执行一些操作以及数据行到对象之间的转换, 都会造成性能上的一些损失。

 

  iBatis.NET

 

  作为另一种.Net持久层框架,iBatis.NET同样是从Java上的iBatis移植而来的o/r mapping框架,它包括DataMappingDataAccess两部分:

 

  DataMapping: ORM的实现部分, 对象映射通过映射文件来定义,支持one-to-oneone-to-many等对象关系映射。与Nhibernate显著不同的是,ibatis.net不会自动生成SQL语句,它通过预先定义好的SQL映射来执行数据操作,对于想自由操作SQL或使用复杂表达式的人来说,这是个不错的选择。

 

  DataAccess: 数据存取框架实现,通过在配置文件中定义DAO接口及其实现,就可以方便使用DaoManager进行数据操作了,这也是一个在运行时决定具体实现的标准应用。

 

    Java版 工作流

 

  Shark

 

  Shark是体系和功能最为复杂的代表。它是另一款遵循WfMCXPDL标准开源工作流引擎,并且同时遵循OMG组织的Workflow Management Facility规范。在所有开源工作流引擎中,Shark的体系最为完备和复杂。其一直秉承着模块化的思想,所以比较容易扩展。但是自从被Together公司收购后,Shark的商业化色彩已经越来越浓,改称为Together Workflow Server,并仅以Community Edition的形式提供了部分开源代码供参考。

 

  OSWorkflow

 

  OSWorkflow是最轻量型的代表,也是一款非常灵活和低级别定位的工作流引擎的实现框架。低级别定位的意思是说,它不是定位在解决流程模型对象和运转场景,而是提供一套可维护调度的机制,供开发人员自主扩展。这个维护流程调度机制OSWorkflow选择的是基于行为(Action)FSM理论,所以OSWorkflow更像是一个复杂而灵活的有限状态调度机。

 

  OSWorkflow在国内项目应用得较多,很多国内的简易审批流程项目都是基于其引擎二次开发而来。这主要是由于OSWorkflow是基于Action驱动的,而国内的客户也很容易接受这样的操作习惯。但OSWorkflow所依赖的FSM模型对于分支、聚合、子流程的支持度很低,这一点在实施过程中需要注意。

 

  jBpm

 

  jBpm是最适合扩展的代表,是在所有开源引擎中最适宜被商业化应用的一款。首先其流程建模模型是基于Activity Diagram(活动图)的,并在引擎构建上融入了FSMPetriNet思想,所以其内核和根基比较牢固扎实。其次,自从被JBoss收购后,其3. x系列的结构更加趋于微内核,Plug-in思想也更加深入。其同时还提供了对BPEL扩展,存储支持JBoss Hibernate实现,集成了JBoss seam,规则引擎准备采用JBoss rules,并准备集成JBoss Messaging。这样,不论从内核和外围应用,jBpm都具有了强劲的动力。

 

  另外,jBpmToken的应用也很有特色,巧妙地利用Parent-Child Token的机制处理分支、父子流程等复杂应用场景。这个设计思想很值得大家学习参考。

 

  YAWL

 

  YAWL是算法和模式最值得研究的代表,它是Alast力主倡导的一款基于PetriNet建模的工作流引擎,其将PetriNetTokenAndXOROR算法进行了融合,并对Workflow Patterns(工作流模式)中所有模式提供支持。但YAWL本身仅是一个研究性项目,所以其结构和实现缺少了商业化应用的特点。但有必要研究一下YAWL,一方面可以加深对工作流模式的理解,另一方面,YAWL的一些建模思想、处理算法很值得推敲和吸纳。

 

  ActiveBPEL

 

  ActiveBPEL BPEL引擎的代表,也是一款可执行BPEL4WS规范的开源流程引擎,其结构和实现方式具有很高的参考价值。目前国内很多正在开发基于BPEL产品的中小型软件厂商,其实现的很多基础性内容和思想都参考自ActiveBPEL。受目前国内中小型客户对流程需求的限制,基于BPEL的开源引擎或小型产品被市场接受度还很低。但BPEL所围绕的业务流程及流程整合应用是一个发展趋势。

@忙碌,不代表有效率;方法,远胜于苦干