`

基于Spring和EJB的JCF通用调用框架的研究与实现

    博客分类:
  • Java
阅读更多
<o:p></o:p>
<o:p></o:p>
        使用Spring,你能够利用许多EJB所提供的特性,例如可申明的事务管理,对象池和简单的ORM(对象角色建模)等功能。在本文中,我们将要重点讨论的是如何将Spring技术应用在使用EJB构建的系统中,同时拥有SpringEJB的优点。
关键词      Spring Hibernate Struts EJB SLSB Java Command Framework(JCF)<o:p></o:p>
1.       引言<o:p></o:p>
开发大规模系统时,其复杂程度将大大增加。整个开发过程涉及到各种角色,例如UI设计人员,前台开发人员,后台开发人员,工作流开发人员,接口开发人员等。每个角色负责自己的任务,完成后再联调,或者是在开发过程中就已经开始了联调。如果将所有的代码都放到一块代码将会变得很乱,很难管理。尤其在系统间的信息沟通或者是将其他系统的功能增加到本系统的时候就要进行代码的拷贝,另外一种办法是通过远程访问来访问其他系统的功能,如果两个都是java应用就可以通过EJB的远程访问,如果是非java应用可以通过web service来远程访问。本文描述了一个基于SpringEJB的通用调用框架,将SpringEJB融合到一块,取其精华,去其糟粕。用SpringIOCAOP功能,使得系统的各个Bean之间解耦,而且很容易将事务和安全加到系统中。由于EJBEntity Bean饱受争议,开发效率和运行效率都不太高,所以本框架不采用Entity Bean,采用Hibernate作为系统的持久层,SpringHibernate可谓是Spring的一大亮点了,使用Srping之后,Hibernate的开发更加简便了。在Rod JohnsonJuergen Hoeller所写的书《Expert One-on-One J2EE without EJB》中,狠狠的将EJB批了一通,但是在传统J2EE应用程序中, EJB构成了应用程序架构的基础。尽管Spring提供了EJB所提供的许多服务的简化版本,例如可申明的事务管理和对象持久性,但是,在一段时间内,许多应用程序将会继续使用EJB来构建。而且EJB中的Session BeanMDB还是有其存在的价值,尤其是无状态会话BeanStateLess Session Bean下文简称SLSB),简单得来使得系统具有分布式的功能。在Spring外再套一个SLSB使得系统天生就具有了远程访问的能力,再加上一个Command模式,SLSB变为系统功能调用的入口点,相应的业务逻辑都写在Spring控制的Bean中。而MDB可以开发异步调用系统。在Spring中,支持对EJB的调用,你能够在基于EJB的解决方案中使用SpringSpring简化EJB的创建,提供一个简单,友好的方法来访问EJB资源。本框架不关注在Spring中如何调用EJB,而是关注于在EJB中如何访问SpringBean资源,如何将客户端的请求送到相应的Spring管理的POJOplain old Java object)。<o:p></o:p>
<o:p></o:p>
2.       项目背景
JCF架构参考商务领航项目原有JCF实现。商务领航项目分为前台,工作流,后台三大模块,前台的请求通过工作流系统的调度来调用后台的业务方法,其中后台和工作流系统都提供了带有远程接口的session bean供其客户端程序调用。后台提供一个业务方法在系统中命名为“Command”,代表一个动作,若干个Command组成一个“Service”,客户端在一个请求Request中设入service名字和参数,经过服务端的运行后返回一个“Response,Response中带有返回的结果。作者在开发的过程中发现原有JCF框架的开发过程中由于引入了EJB给测试带来了很大的麻烦,断点跟踪很难跟到EJB后面的Command,而且配置文件比较繁琐,在三大模块联调的时候浪费了很多的人力物力。现引入Spring以减少测试带来的时间耗费,减少了代码量,并且引进了目前流行的ORM工具Hibernate。其体系结构图如下:
<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" o:extrusionok="f" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>

<v:shape id="_x0000_i1025" style="WIDTH: 459pt; HEIGHT: 295.5pt" o:ole="" type="#_x0000_t75"></v:shape>

 

1 JCF框架体系结构图
       本框架综合运用DelegateSession façadeCommand等设计模式,把商业逻辑放到客户端(servlet,applet,等等)有严重的负面效果,影响性能和可维护性,使用session facade模式可以纠正这个问题,需要把商业逻辑放到session bean中,session bean的每个方法映射到一个特定的工作单元,或者用例。这样做,客户端被从服务器端的对象模型屏蔽起来,并且在一个事务和一次网络调用的round trip中执行用例。 
     直接从客户端调用session facade会导致客户端和服务器之间的依赖(在一个大型项目和复杂的客户端代码中),因为对EJB的紧耦合,如Business Delegate模式所讨论的。这些问题能被用 business delegate解决,增加一个封装所有对ejb层的存取的对象层。business delegate能帮助让客户端代码简单,使客户端和服务器之间的依赖最小。
       然而,用session facadebusiness delegate开发会导致长期的变化->发布->测试的round-trip,会成为大型项目的瓶颈。问题的关键是商业逻辑放在一个session bean层,几乎是重量级的开发。使用Command模式来封装商业逻辑到轻量级的command bean,使客户端从EJB解耦,在一个网络调用中执行,作为EJB层的一个façade。用Spring来管理这些Command,这些Command就作为一个Spring Beans被管理起来。这样做有以下好处:
1.         因为轻量级的开发/分发过程,方便了RAD<o:p></o:p>
2.         把商业逻辑从表示逻辑分离;<o:p></o:p>
3.         使客户端从ejb解耦;<o:p></o:p>
4.         命令(command)可以本地执行或产生哑(dummy)数据;<o:p></o:p>
5.         用上Srping的声明式的事务和Spring Acegi安全支持;<o:p></o:p>
6.         灵活的错误处理措施;
7.         command是无状态的,一个round trip可以执行若干个Command,组成一个工作流程Processor,该Processor共享一个状态。
      

 

<v:imagedata o:title="" src="file:///C:\DOCUME~1\HEWENQ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"><v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" o:extrusionok="f" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 459pt; HEIGHT: 295.5pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:\DOCUME~1\HEWENQ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"></v:imagedata></v:shape></v:imagedata>
  • 大小: 709.8 KB
  • 大小: 117.2 KB
分享到:
评论
3 楼 onecan 2007-06-22  
还有后续的文章哦
2 楼 netwalkerli 2007-06-01  
恩,不错!能否详细点?
1 楼 onecan 2007-05-30  

相关推荐

    基于动态代理的Java远程调用框架的研究1

    总结起来,基于动态代理的Java远程调用框架旨在克服RMI和EJB的一些缺点,提供更加简洁、灵活和高效的远程调用解决方案。它利用Java的动态代理特性,降低了分布式系统开发的复杂性,同时保持了高度的可扩展性和可定制...

    spring集成ejb

    Spring 集成 EJB(Enterprise JavaBeans)是将轻量级的 Spring 框架与企业级的 EJB 3.x 技术相结合的一种方式,以实现更灵活且高效的企业应用开发。Spring 提供了一个丰富的IoC(Inversion of Control,控制反转)和...

    spring和EJB3的一些包

    Spring 和 EJB3 是两种在企业级 Java 应用开发中广泛使用的框架。Spring 框架以其轻量级、模块化和灵活的设计而闻名,而 EJB3(Enterprise JavaBeans 3)则是 Java EE(现在称为Jakarta EE)平台的一部分,提供了...

    Struts2+Spring+EJB框架整合实例

    Struts2、Spring和EJB(Struts2+Spring+EJB,简称SSE)是Java企业级开发中常用的三大框架,它们各自承担着不同的职责,共同构建了一个强大的应用架构。Struts2作为MVC(Model-View-Controller)框架,负责处理用户...

    ejb spring

    3. **Spring与ejb的协作**:在某些场景下,会话bean可能只负责协调工作,而具体的业务逻辑由Spring的bean来执行。这种方式可以将 ejb 的强健性与 Spring 的易用性结合在一起。 **CommonEjbProj项目概述** ...

    基于Facade的EJB远程调用技术

    基于Facade的EJB远程调用技术 基于Facade的EJB远程调用技术

    ejb3+spring+struts实现简单银行系统

    在Java开发领域,EJB(Enterprise JavaBeans)3、Spring框架和Struts框架是常见的企业级应用开发技术,它们结合使用可以构建高效、可扩展的Web应用程序,特别是对于复杂的业务逻辑如银行系统。以下是这三个技术在...

    Hibernate+Spring+EJB+Ajax-关于这四种技术的详细讲解

    在IT行业中,Hibernate、Spring、EJB(Enterprise JavaBeans)和Ajax是四个非常重要的技术,它们各自在软件开发的不同方面发挥着关键作用。下面将分别详细介绍这些技术,并探讨它们之间的协同工作方式。 **...

    struts2+spring+ejb3源代码(完整版)

    Struts2、Spring和EJB3是Java Web开发中的三个重要框架,它们分别在MVC模式、依赖注入和企业级服务方面发挥着关键作用。这个压缩包提供的源代码是一个完整的项目示例,展示了如何将这三个框架集成到一个应用程序中。...

    各种EJB之间的调用示例

    Enterprise JavaBeans(EJB)是Java EE平台中的核心组件,用于构建可扩展、安全和事务处理的服务器端应用程序。EJB提供了多种类型的组件,包括Session Beans、Message-driven Beans和Entity Beans,它们各自承担不同...

    EJB分布式远程调用的小例子的简单实现

    EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于...通过接口定义、EJB实现、JNDI查找和客户端调用,我们可以构建起可靠的分布式系统。此示例提供了一个简单但实用的起点,帮助开发者理解并实践这一技术。

    Struts + Spring + EJB3 demo

    Struts、Spring和EJB3是Java开发中的三个重要框架,它们在企业级应用程序开发中发挥着关键作用。Struts提供了MVC(Model-View-Controller)架构,Spring强化了依赖注入和面向切面编程,而EJB3则是Java EE平台上的...

    EJB3.0和Spring比较

    EJB3.0和Spring是两种广泛使用的Java企业级应用程序开发框架,它们在很多方面有所不同,这些差异主要体现在以下几个关键点: 1. **厂商无关性(Vendor Independence)** - EJB3.0遵循开放标准,由Java社区内的开源...

    JNDI调用分布式EJB3 通用接口

    标题“JNDI调用分布式EJB3 通用接口”意味着我们将探讨如何使用JNDI来查找和调用分布在不同节点上的EJB3组件。EJB3中的一个重要特性是它可以跨网络进行分布,这使得应用程序能够利用多台服务器的资源,提高可伸缩性...

    spring with ejb3

    标题 "spring with ejb3" 暗示了我们即将探讨的是如何在Spring框架中集成和使用EJB 3(Enterprise JavaBeans 3)技术。EJB 3是Java EE平台的一部分,它提供了用于构建企业级应用的服务和组件模型。Spring则是一个轻...

    精通JSF基于EJB HibernateSpring整合天发与项目实践 书本源码

    《精通JSF基于EJB Hibernate Spring整合天发与项目实践》是一本深入讲解Java服务器页面(JavaServer Faces,简称JSF)、企业级JavaBean(Enterprise JavaBeans,简称EJB)、Hibernate对象关系映射(Object-...

    struct ,spring,ejb架构原理培训

    在实际项目中,Structs、Spring和EJB常常被结合起来使用,以实现最佳的性能和灵活性。例如,Structs可以作为前端控制器,处理HTTP请求,Spring则负责业务逻辑和数据访问,而EJB可以在需要分布式处理或高可用性的情况...

Global site tag (gtag.js) - Google Analytics