- 浏览: 184138 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
梦行Monxin商城系统:
最困难的事情就是认识自己
分享我的大型Java多用户商城系统开发的心得和困难 -
梦行Monxin商城系统:
只要坚持下去,总会有意想不到的收获。
java多用户商城系统LegendShop开发指南 -
onecan:
听从了大家的意见,LegendShop已经把Hibernate ...
分享我的大型Java多用户商城系统开发的心得和困难 -
onecan:
最新版本已经不是免费的了
Java多用户商城,给你一个创业的平台 -
www314599782:
架构很不错我要把它写到我的项目里去
分享我的大型Java多用户商城系统开发的心得和困难
<o:p></o:p>
<o:p></o:p>
摘 要 使用Spring,你能够利用许多EJB所提供的特性,例如可申明的事务管理,对象池和简单的ORM(对象角色建模)等功能。在本文中,我们将要重点讨论的是如何将Spring技术应用在使用EJB构建的系统中,同时拥有Spring和EJB的优点。
关键词 Spring Hibernate Struts EJB SLSB Java Command Framework(JCF)<o:p></o:p>
1. 引言<o:p></o:p>
开发大规模系统时,其复杂程度将大大增加。整个开发过程涉及到各种角色,例如UI设计人员,前台开发人员,后台开发人员,工作流开发人员,接口开发人员等。每个角色负责自己的任务,完成后再联调,或者是在开发过程中就已经开始了联调。如果将所有的代码都放到一块代码将会变得很乱,很难管理。尤其在系统间的信息沟通或者是将其他系统的功能增加到本系统的时候就要进行代码的拷贝,另外一种办法是通过远程访问来访问其他系统的功能,如果两个都是java应用就可以通过EJB的远程访问,如果是非java应用可以通过web service来远程访问。本文描述了一个基于Spring和EJB的通用调用框架,将Spring和EJB融合到一块,取其精华,去其糟粕。用Spring的IOC和AOP功能,使得系统的各个Bean之间解耦,而且很容易将事务和安全加到系统中。由于EJB的Entity Bean饱受争议,开发效率和运行效率都不太高,所以本框架不采用Entity Bean,采用Hibernate作为系统的持久层,Spring对Hibernate可谓是Spring的一大亮点了,使用Srping之后,Hibernate的开发更加简便了。在Rod Johnson和Juergen Hoeller所写的书《Expert One-on-One J2EE without EJB》中,狠狠的将EJB批了一通,但是在传统J2EE应用程序中, EJB构成了应用程序架构的基础。尽管Spring提供了EJB所提供的许多服务的简化版本,例如可申明的事务管理和对象持久性,但是,在一段时间内,许多应用程序将会继续使用EJB来构建。而且EJB中的Session Bean和MDB还是有其存在的价值,尤其是无状态会话Bean(StateLess Session Bean下文简称SLSB),简单得来使得系统具有分布式的功能。在Spring外再套一个SLSB使得系统天生就具有了远程访问的能力,再加上一个Command模式,SLSB变为系统功能调用的入口点,相应的业务逻辑都写在Spring控制的Bean中。而MDB可以开发异步调用系统。在Spring中,支持对EJB的调用,你能够在基于EJB的解决方案中使用Spring,Spring简化EJB的创建,提供一个简单,友好的方法来访问EJB资源。本框架不关注在Spring中如何调用EJB,而是关注于在EJB中如何访问Spring的Bean资源,如何将客户端的请求送到相应的Spring管理的POJO(plain 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框架体系结构图
本框架综合运用Delegate、Session façade、Command等设计模式,把商业逻辑放到客户端(servlet,applet,等等)有严重的负面效果,影响性能和可维护性,使用session facade模式可以纠正这个问题,需要把商业逻辑放到session bean中,session bean的每个方法映射到一个特定的工作单元,或者用例。这样做,客户端被从服务器端的对象模型屏蔽起来,并且在一个事务和一次网络调用的round trip中执行用例。
直接从客户端调用session facade会导致客户端和服务器之间的依赖(在一个大型项目和复杂的客户端代码中),因为对EJB的紧耦合,如Business Delegate模式所讨论的。这些问题能被用 business delegate解决,增加一个封装所有对ejb层的存取的对象层。business delegate能帮助让客户端代码简单,使客户端和服务器之间的依赖最小。
然而,用session facade和business 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>
发表评论
-
dao2
2014-09-24 09:47 0dao1212 -
resume-mr wang
2014-08-05 15:59 0f aaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... -
legendshop dao
2014-04-14 09:20 0legendshop dao -
ControlDataPopulate
2014-01-06 18:35 0package util; import java.io.B ... -
Excel2SqlConvertor
2014-01-06 18:34 0import java.io.File; import jav ... -
test
2013-01-07 23:26 0dfgdfg -
java多用户商城系统LegendShop开发指南
2012-09-08 18:33 16286LegendShop是基于JAVA编程语言开发的开源电子商 ... -
Java多用户商城LegendShop功能说明
2012-09-08 18:13 1727... -
用Spring Cache 实现Hibernate的二级缓存机制
2012-05-14 12:40 4387因为系统中同时采用Hibernate和Jdbc两种技术, ... -
答复: 大型Java多用户商城系统设计开发的心得和困难
2012-01-04 13:35 2127evanzzy 写道非要拿掉Hiber ... -
分享我的大型Java多用户商城系统开发的心得和困难
2012-01-03 15:37 16300看到别的朋友在ITEYE上发表的“开发电子商务网站技术选型“有 ... -
Java多用户商城,给你一个创业的平台
2011-06-05 11:08 8798现在网上开店的趋 势是越来越多了,一个好的商城系统是如虎添翼。 ... -
关于一个java网购平台的技术方案
2010-05-02 23:38 1714最近用Java做了一个网上购物平台,其技术方案终于写完了 ... -
关于产品动态属性的做法
2010-04-14 14:17 2735最近在做一个电子商务网站( http://www ... -
[Java][JavaScript]字符串数组与字符串之间的互转
2010-02-24 15:49 62971、Java 1-1、字符串数组=>字 ... -
Eclipse WTP 入门
2010-02-24 15:43 2161(转)WTP (Web Tools Platform) 是一个 ... -
JPA annotation 参考
2010-02-24 15:35 1230(转)Table Table用来定义entity主表的name ... -
JMS - javax.jms.IllegalStateException in JBOSS问题之解决
2007-07-07 17:38 4272在jms中的代码如下: java 代码 ... -
设计模式之Command
2007-06-24 12:16 1391原作:板桥里人 Command ... -
struts+spring+hibernate通用分页方法 (2)
2007-06-23 12:07 4073接上: 在struts的Action中: java 代码 ...
相关推荐
spring与ejb.pdf 详细讲述spring 与ejb
基于Facade的EJB远程调用技术 基于Facade的EJB远程调用技术
简单的Struts2+Spring+EJB框架整合实例
spring集成ejb
spring和EJB3的一些包,包括文档,基本上是英文的
EJB分布式远程调用的小例子的简单实现。[附源码]
各种EJB之间的调用示例
向Spring 框架提供上下文信息,包括企业服务,如 JNDI、EJB、电子邮件、国际化、校验和调度等。 Spring AOP。通过配置管理特性,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块直接将面向方面...
《JavaEE实用开发指南:基于Weblogic+EJB3+Struts2+Hibernate+Spring》-- part2/3
精通JSF基于EJB Hibernate Spring整合开发与项目
Java如何在多个EJB之间相互调用的例子,也就是各种EJB之间的调用例子,向初学者演示如何实现调用的具体代码及步骤,涉及以下相关方法:用远程接口的引用访问EJB、函数将被FirstEJB调用,同时它将调用secondEJB。...
EJB3.0和Spring比较
struts2+spring+ejb3源代码(完整版)
ajax、spring、ejb试题 选择题和简答题。
java最新面试题 java struts servlet spring ejb
Hibernate+Spring+EJB+Ajax-关于这四种技术的详细讲解。全面、易懂。
基于Java的各种EJB之间的调用示例.zip
基于java的各种EJB之间的调用示例.zip
基于Java和EJB的信息管理系统开发框架.pdf
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1.第3部分。三部分全下完再解压第一部分!