基于Struts和EJB的Web Service框架研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Struts和EJB的Web Service框架研究
摘要struts与ejb大大提高了web应用开发的效率。
web效劳及其相关技术的出现为解决了ejb组件与其他类型组件之间的协同工作与信息交互。
本文通过分析struts 架构与web 效劳的集成,给出了一个结合struts框架将ejb包装成web效劳的新的基于分层的mvc结构框架。
关键词struts;mvc;ejb;web效劳
0前言
struts与ejb结合进行b/s模式的开发,解决了“表示〞与“业务逻辑〞的别离,“业务逻辑〞与“数据〞的别离问题以及页面的多变性问题,发挥ejb基于组件分布式计算结构的优势,从而大大提高了web应用的开发效率,数据平安性和可维护性。
ejb组件作为一种成熟的组件技术已经被广泛应用于各个领域,然而随着企业的开展,企业不断实施应用新的系统。
如何确保新应用程序与旧应用程序之间的交互,如何将现有的系统集成到新系统?传统的rmi-iiop和corba技术由于自身的局限性,限制了ejb组件与其他类型组件之间的协同工作与信息交互,而web效劳及其相关技术的出现为解决软件开发环境中组件间的互操作问题提供了一种有效手段,它是在internet上进行分布式计算的根本构造块。
为快速高效的开发集成早期应用程序的新系统,我们需要为web效劳构建struts应用系统。
1struts与ejb结合b/s的开发模式
1.1 mvc模式
mvc〔model/view/controller)模式最早是在smaltalk中出现的。
mvc包括三类对象,简单地说,model是应用对象,view是它在屏幕上的表示,controller定义用户界面对用户输入的响应方式。
mvc设计模式中的“模型〞指的是真正执行任务的代码。
在模型同界面别离的情况下,代码即可实现可管理性和可重用性。
模型通常被称为“业务逻辑〞。
所谓“视图〞就是使用界面,界面的每一局部都只能包含采集数据的足够逻辑,并把它传递给设计模式中的其他组成局部以进行处理。
“控制器〞控制着模型和视图之间的交互过程。
它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型。
在jsp开发中,最长使用model2。
model2实际上就符合mvc模式,其中各组件的关系如图1所示。
图1 model2中各组件的关系
1.2 struts+ejb开发模式
struts是一种符合mvc模式的框架。
struts采用jsp作为mvc的视图,java servlet作为控制器,javabean作为模型。
struts的处理过程如图2所示。
图2 struts+ejb的mvc
首先,控制器〔action servlet〕进行初始化工作,读取配置文件〔struts-config.xml〕,为不同的struts模块初始化相应的moduleconfig对象。
控制器接收请求,并从actionconfig中找出对应于该请求的action子类,如果没有对应的action,控制器直接将请求转发给jsp或者静态页面,否那么控制器将请求分发至具体action类进行处理。
在控制器调用具体action 的execute方法之前,actionform对象将利用请求中的参数来填充自己。
action要处理的业务逻辑封装在javabean中,通过javabean调用ejb以完成业务处理。
action执行完后返回一个actionfroward对象。
2简单的web效劳体系结构
当您要将企业应用程序转变成与web 效劳一起使用时,最简单的途径就是将单个操作与单个的企业效劳结合在一块,如图3所示。
图3 简单web效劳体系结构
在这种设计方法中,实现业务逻辑的效劳与实现数据检索的效劳是混合在一起的。
这样的一种web 效劳可以很容易从已有的业务组件中开发出来。
然而,它有很多的缺点:对用户没有提供统一认证,提供者与订阅者耦合不紧,业务逻辑没有重用。
简而言之,对于一个连贯的解决方案来说这并不是一个非常好的体系结构。
3采用struts的web 效劳
前面讲过,struts 架构清晰地区分开了视图、控制器以及模型。
模型包含所有必须的业务逻辑,从存储数据仓库中检索数据。
您可以构建一个简单的web 效劳层——称为wsmanager 层——这样的模型可以提供web 效劳也可以订购web 效劳。
使用这种体系结构的应用程序将基于组件开发的最正确点与internet结合在了一起,如图4所示。
其它struts相关组件前面已讨论,下面主要讨论这种体系结构中wsmanager层,因为它是此体系结构中真正新加的局部。
作为web效劳端和ejb容器之间的中间件,wsmanager 接收jax-rpc 端点的请求。
将客户端请求映射到wsmanager 类中的方法调用。
这些客户端请求是soap 信息的格式。
wsmanager 必须实现平安认证,转变参数,在指定请求到模型效劳之前,要对这些请求进行参数预处理。
请求所包含的参数形式有java 对象,java原始参数,xml 文档,或者甚至是soap 文档分片〔例如,soap element 对象〕。
这些类型必须要转化成内部所支持的schema〔例如,预定义的java 数据访问对象〕。
图4 采用web效劳的struts应用程序
wsmanager 也可以生成响应;这个过程由方法调用返回值的简单构造所组成。
wsmanager 中保存这样的功能,您可以通过缓存数据从而防止重复访问模型效劳层。
您还可以集中管理响应聚集以及xml 文档转换,如果您要返回给调度者的文档必须遵守与内部schema 不同的schema 时,这一点就显得尤其重要。
在以上模型中,web效劳的客户端通过soap消息与web效劳端点进行交互从而到达使用ejb 组件提供的效劳的目的。
在web效劳端,wsmanager 处理所有soap 请求并把它们委派到模型层〔ejb层,使用session facade 设计模式〕所暴露的业务逻辑。
这样有很多好处,因为wsmanager 会:
〔1〕作为初始联系点来管理请求与效劳。
〔2〕调用平安效劳,包括身份验证与授权使用,从而防止任何重复的层访问。
〔3〕委派业务处理〔采用由struts 应用程序所使用的模型效劳〕wsmanager代理对ejb的方法调用。
接受客户端传递的所有参数然后简单地把这个调用代理给会话外观的某个方法,把对ejb的调用过程从web效劳端点中别离出来。
〔4〕隐藏与ejb相关的系统异常。
与api相关的系统异常,比方remoteexception,ejbexception 都在wsmanager中被捕获然后作为一个非ejb的相关异常(比方一个自定义的业务代理异常)通过web效劳端点重新抛出给客户端。
应用级的异常仍然被传递给web效劳端点,然后由web效劳端点通过soap消息发送给调用web效劳的客户端。
〔5〕缓存数据防止任何不必要的数据库访问,可以在本地缓存一个会话bean方法调用返回结果,然后在后续请求中把它们传递给web效劳端点。
还可以缓存一个会话bean的引用。
〔6〕具有重新尝试失败事务的能力。
wsmanager可以实现判断事务失败原因所需的复杂错误处理代码。
通过重新执行会话外观的方法来重新尝试执行事务,wsmanager对web效劳端点隐藏了复杂的处理过程。
〔7〕快速方便地进行web效劳地发布和使用。
在wsmanager 类中实现的每一个公共方法都将作为一种web效劳发布出来。
换句话说,您要为这些类发布一种web 效劳描述。
web 效劳描述是由效劳的web 效劳描述语言〔web services description language,wsdl〕描述与由它所引用的任何xml schema 所组成。
应用程序可以利用在公共注册表或者企业内部中已存的web效劳。
wsmanager有解析必要的wsdl文件的方法并且调用相关的操作返回一个值。
4总结
通过在action和ejb层间参加wsmanager层即在web容器和ejb容器之间参加wsmanager 中间件,很好地结合了struts和web效劳。
使用本文所说明的体系结构,我们可以快速高效地开发出这样的企业应用程序,它非常健壮,很容易维护,而且能很容易地与早期应用程序集成在一起。
参考文献
【1】飞思科技产品研发中心编著,jsp应用开发详解。
北京:电子工业出版社,2004.1【3】ed roman著,刘晓华等译,精通ejb(第二版)。
北京:电子工业出版社,2002.10
【4】/developerworks/cn/webservice。