`
yimlin
  • 浏览: 137090 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

企业应用下的业务组件开发实践

阅读更多

作者:  Anders小明


什么是企业应用下的业务组件

首先,这是一个组件,这意味着它需要在容器里运行,因此不包括任何中间件服务,同时以一定结构(文件结构或者压缩格式)组成,被容器识别;其次,这是一个业务组件,即提供的是应用服务,而非技术服务;第三,这是企业应用,在业务上包括功能和服务(Service,当前最时髦的说法,你可以理解为API),技术上(以J2EE来讲)包括:UI资源(JSFJSPJSCSS等)、应用程序(Java)资源和配置文件、数据库表定义、初始化数据和存储过程。

 

为什么要企业应用下的业务组件

组件技术从提出到现在已经有20多年了,为什么要提企业应用业务组件?因为现有的组件技术不支持企业应用环境下的组件要求,J2EEEJB不支持,.NETDLL也不支持。

如前所述,一个企业应用通常包括了交互界面、应用代码以及数据库结构,而不论是EJB还是DLL只支持应用代码,都不包括交互界面和数据库结构。

如果说EJB不是,那么J2EEEAR或者WAR是否算是一个组件?答案也不是,EAR或者WAR部署的是一个企业应用,请注意EJB规范中明确说:The Enterprise JavaBeans architecture is a architecture for the development and deployment of component-based (distributed) business applications(EJB 2.x3.x唯一的区别是2.xdistributed),它们有自己的应用域,彼此相互隔离(简单的看,它们有各自独立的会话管理)。.NET也是有自己的应用域概念。

更进一步,基于应用的部署导致了三个隔离问题:交互(界面)隔离程序访问隔离数据隔离(请注意这三个问题分别对应了企业应用业务组件的三个技术内容)。交互隔离导致了企业用户必须访问不同界面,代码访问隔离导致了点对点的集成以及诸如性能、事务和异步处理等各种非功能性问题,而数据隔离导致了数据有效性、一致性等等问题。所有这些都进而导致了维护的问题。

为了解决这些问题,大厂商们都提出了各种解决方案:Portal来解决交互隔离问题,通过ESB来解决代码访问隔离问题,以及通过所谓的信息服务(Information Service)来解决数据隔离问题。

那么OSGi技术或者SCA技术能否满足要求?答案是目前不能,OSGi最初开发的目的就不是为了企业应用,只是这几年开始成熟,并向企业应用方向发展。09年推出的企业版(草案)刚刚提出针对程序访问问题的方案,如远程服务、事务管理等;交互隔离问题上规范并没有提出相应方案,只有EclipseEquinox提出了界面的扩展点机制,但这也不能解决B/S环境的问题;而数据隔离问题就没有任何方案。SCA从一开始就是面向企业应用,不过不解决交互隔离和数据隔离问题。

此外,对于行业ISV来说,除企业用户面临的这些种种问题,还面临着其它问题。企业用户毕竟只是面对自己的需求,行业ISV却面临着多个企业用户的需求,面临定制化带来的维护问题,特别是业务和技术的隔离问题(即如何保持构建业务组件的所使用技术的平稳升级)。

 

组件的容器

既然要企业应用下的业务组件,而现有的组件技术又无法支撑,那么就需要一个新的组件容器了(当然,作为一个普通开发人员,我们无法新建一个公开标准的组件体系,也独立维护一个私有的)。新的组件容器完全使用现有的中间件技术,并加上一些新的内容,包括如下:

  1. 组件框架,识别组件,以及组件(文件)结构和各个技术工件。
  2. 技术框架,提供业务无关的技术支持,以便于技术的平稳升级切换。
  3. 运行容器,采用现有中间件技术,包括Tomcat、应用服务器和数据库服务等;
  4. 工具,包括打包以及部署工具等。

关于数据隔离问题,在EIP中提到了各种解决方案,这里采用的共享数据库方式,即各个组件都共用一个数据库,各个组件只提供数据库定义和初时数据(如同EJB/OSGi一样,运行时环境由容器提供)。

 

组件的关系

组件的关系分为两种:依赖和联动。依赖关系在已有的组件技术上已经广为认知,而联动则是新创造的(肯定不是第一个创建的,只不过不同人有不同的叫法)。

联动和依赖的区别是:如果有组件B和组件A联动,则组件B可以在没有组件A的情况下运行,并提供相应功能。

针对三种不同技术工件(即三个隔离问题)呈现不同特点,如下:

1. UI资源(交互隔离问题),依赖是指UI资源的嵌入、引用和替换,联动是指UI资源的新增。

2. 应用程序(程序访问隔离),依赖是指API/模型依赖,联动是指消息(传统消息和JMS消息)以及SPI实现。其中,无论是依赖或者联动都涉及到相应的非功能性需求,包括:异步、事务控制和服务时限等。

3. 数据库资源(数据隔离),依赖是指外键关联和级联操作,无明显的联动关系。

这里,需要关注应用程序的依赖和联动

1. SPIAPI存在业务不匹配问题。

虽然组件A依赖组件B,但是不代表组件B提供的服务完全匹配组件A的要求。有时组件A所需要的数据需要组件B的多个API组成,为了开发方便或者组件A所需要的性能问题,可能会在组件B新写一个接口给组件A使用,注意该接口不是组件BAPI,该接口仅适用于组件A

2. 尽可能的使用SPI集成方式

SPI集成方式是相对于API集成方式,API集成方式就是,组件B直接调用其它组件的API及其模型。SPI集成方式(类似于依赖倒置),组件B定义其所需要的接口及其模型,由组件A或者胶水层代码来实现。

这个点对于行业ISV尤为明显。对于企业用户来说,依赖是明确的,组件A依赖/联动于组件B,但对于行业ISV,则面临着定制化问题,虽然组件A依赖/联动于组件B,但是在某个定制化项目中,由于客户已有系统C,而需要组件A依赖/联动于客户已有系统C。此时采用SPI方式。

在开源世界里采用SPI方式更是广泛。很多框架为了兼容(同一功能)不同实现的类库,都是先定义框架所需接口,并同时提供不同类库的胶水代码。

不论是EJB/OSGi/SCA都没有对SPI集成方式的支持。

3. 依赖和联动的非功能性需求。

事实上,非功能性需求都是在集成时才存在的。以事务管理为例,除了及其少数的例子外,大部分事务只能在处理流程才被决定(注意,EJB在这方面着是定义在API上的,这样的设计是不适应需求的),而组件AAPI在用例1中需要被异步调用,而在用例2中需要被同步调用是常见的。即便是OSGi规范,也在这方面没有任何处理。

 

组件的定制化

定制化问题只针对于行业ISV有效,对于企业用户来说,除非是那种跨国企业在面临不同国度的业务模式、法律监管和会计制度等差异,存在定制化需要,即使如此,ISV和企业用户对于同一问题的解决方式也是不同的。

既然我们已经将原有的应用采用组件化方式开发,那么应用的定制化问题就转化为组件的定制化问题。同样,应用的定制化手段也就转化为组件的定制化手段。

 

组件框架

       罗罗嗦嗦的说了半天,有人就说了:这不就是把UIJava和数据库三个东东一打包,然后说这就是一个企业应用下的业务组件,有啥新意呢,不就是模块化开发嘛,一直一来大家都是就是这么搞的嘛,何必搞个怪名词来忽悠。

       是的,就是把UIJava和数据库三个东东整合在一起,组件容器说提到的技术框架很多的开发队伍都有一套,运行容器更是有无数开源商业的,打包部署工具更是写了无数。

这确确实实就是我们常说的模块化开发。但是模块化开发不同于组件开发,模块化开发只是在逻辑上做了切分,物理上(开发出的系统代码)通常并没有真正意义上的隔离,一切都只是在文档中。

我们需要一点干货,只有实实在在的组件框架才能组件化开发真正落地的(如同OSGi框架那样):我们需要一个类似于Equinox的界面扩展框架来支持UI资源的依赖和联动;我们需要一个集成框架来支持应用程序的依赖和联动,解决所面临的种种问题(业务不匹配、SPI集成以及各种非功能性需求);我们需要一个打包部署工具(类似Spring DM)提供部署UI资源、应用程序和数据库定义资源(Spring DM提供了基于Web资源的部署能力)。

 

其它问题

对于采用J2EEB/S环境的组件应用还面临一个问题,即现有Servlet规范只允许一个web.xml,不支持组件各自定义私有的FilterServlet,不过这个问题不是很严重,在现有技术框架已经支持一份简单的web.xml,而新的Servlet规范已经允许多个web.xml

分布式部署以及集群部署问题,这其实不是个问题。基于应用的我们有很多手段和技术,那么基于组件的也一样有办法。

分享到:
评论
1 楼 mercyblitz 2010-03-15  
引用

1. SPI和API存在业务不匹配问题。
虽然组件A依赖组件B,但是不代表组件B提供的服务完全匹配组件A的要求。有时组件A所需要的数据需要组件B的多个API组成,为了开发方便或者组件A所需要的性能问题,可能会在组件B新写一个接口给组件A使用,注意该接口不是组件B的API,该接口仅适用于组件A。

组件B的API协议没有符合A需要,必须添加新的接口在B,或者在原有的基础上面,A添加功能。

SPI必须符合当前API的需求,并且兼容早期API(事实上是API的事情)。

相关推荐

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

    UniEAP®包含开发工具、技术框架、通用技术组件和软件开发方法学,提供从需求、设计、开发、调试、部署到运维的应用全生命周期一站式服务,支撑IT应用的敏捷构建。

    UniEAP®包含开发工具、技术框架、通用技术组件和软件开发方法学,提供从需求、设计、开发、调试、部署到运维的应用全生命周期一站式服务,支撑IT应用的敏捷构建。 家族产品组成 UniEAP®家族产品围绕企业...

    移动端iOS组件化详解.docx

    随着移动互联网的迅猛发展,手机APP已经成为了与我们生活紧密关联的一部分,各种应用场景也都已经落地到了手机移动端,但这也使得APP的业务模块以及对应的代码量越来越繁多,旧的开发架构已经没法满足业务快速发展的...

    C++中COM组件思想实践

    在开发一个产品时,其往往有很多子模块,子业务和子功能,这些都可以抽象成组件(C++中本质表现就是一个类)。...本文以某产品(产品业务为Business)的子功能AAAAAA为例,探讨一下COM组件思想在开发中的应用。

    京东iOS客户端组件管理实践

    先大概交代下背景:京东的iOS客户端从2011年2月发布至今已历经6年+的时间,研发团队也从最终的几个人变成了N多人,业务的复杂度早已不可想象。我个人认为一个超过了10人的团队做组件化是合适的,也有必要。当然少于...

    Web应用前端技术的探索与实践

    Web应用前端技术的探索与实践 1 1 前端开发那些事 1 2 怎样提高前端的质量和工作效率? 1 附件(关于2011年工作的一点浅见) 3 3 探讨一些技术问题 4 3.1 Frameset和iframe 4 3.2 Frameset和Div两种方式的对比 5 ...

    HZERO-基于微服务架构开源免费的企业级PaaS平台

    封装了大量技术开发包、技术应用组件、技术场景实现能力,并支持SaaS模式应用,提供了一个可支持企业各业务系统或产品快速开发实现的微服务应用数字化融合平台,富含各类开箱即用的组件G-General、A-AI、B-BigData、...

    IPv6在企业网络中的部署

    《IPv6在企业网络中的部署》层次分明、阐述清晰、分析透彻、理论与实践并重,不仅适合准备CCNA、CCNP或CCIE认证考试的人员阅读,也是从事计算机网络设计、管理和运维工作的工程技术人员必不可少的参考资料。...

    多组件Web可视化开发平台在调度自动化系统中的应用

    Web可视化开发平台着重阐述了可视化的开发Web应用, 不仅融入了单点登录、图形自动生成、表单设计器、布局设计器、设备拓扑生成和业务功能快速开发功能组件, 还分析了各地区电网业务需求, 进一步强化了各个组件的功能...

    java应用模式

    本书作者是当今面向对象软件开发的权威,他在一组专家级合作者的帮助下,将40多种经常出现的解决方案转化成模式,最终写成这本能够应用于任何一种企业应用平台的、关于解决方案的、不可或缺的手册。本书获得了2003...

    基于Android的视频播放器组件设计源码

    本设计源码提供了一个基于Android的视频播放器组件。...该组件采用插件式开发,无需关注视频底层技术,专注业务与逻辑开发,功能稳定,扩展性强,适合用于学习和实践Android技术,以及开发视频播放相关的应用。

    Flume零基础应用实战企业全场景解决方案视频教程

    3,结合工作实践及分析应用,培养解决实际问题的能力。 4,每一块知识点, 都有配套案例, 学习不再迷茫。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业...

    2023全球软件开发北京大会(公开)PPT汇总(80份).zip

    多云环境下的应用管理与交付实践 前端基建是如何炼成的 工程师成长的金字塔思维 供应链场景的数据安全建设实践 关于DevOps运维的解决⽅案 基于 Web Components 的跨技术栈组件库实践 回归初心,重温 PWA 技术的现实...

    Oracle ADF Survival Guide

    Oracle ADF生存指南涵盖了最新的12c版本,并解释了所有重要的概念和部分,包括ADF Faces,ADF任务流程,ADF业务组件,ADF外观,新的Alta UI以及如何在应用程序的所有层面实现业务逻辑。拥有Oracle数据库和Oracle ...

    移动端组件化架构方案设计

    组件化作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向。我们自2018年起也在不断尝试各种组件化方案,在智慧政务的多个应用中也进行了实践。我们踩过一些坑,也收获了很多宝贵的经验,并...

    beauty of architecture

    2.2 业务组件建模 组件化业务模型(CBM)介绍(一) 组件化业务模型(CBM)介绍(二) 组件化业务模型(CBM)介绍(三) 2.3 领域建模技术 领域驱动建模 从资源,服务到产品建模 延伸阅读 行业业务架构模型 ...

    spring boot 实践学习案例,与其它组件整合

    spring boot 实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、rabbitmq、activemq、elasticsearch、security、shiro等 #### Spring Boot 版本 - 2.0.3.RELEASE #### 模块...

    Eclipse开发入门与项目实践 源代码

    Eclipse开发入门与项目实践 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 第一部分 开发入门 第1章 Eclipse概述及开发环境搭建 2 1.1 Eclipse概述 2...

    CORBA企业解决方案

    我们假定用户需要在一复杂的软硬件环境中编写应用程序,或是需要把一整套组件/应用程序集成到一灵活的企业级系统中。我们还假定用户强烈要求自己的应用程序能运行起来,或者自己的系统能够集成起来,但对于重新创建...

Global site tag (gtag.js) - Google Analytics