JSF与EJB3.0集成应用研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:UltraSparc
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:通过对JSF和EJB3.0技术的研究分析,提出了集成二者进行Web应用开发的几种方法,给出了实现集成的关键代码,最后分析了JSF与EJB3.0集成应用的优势及发展前景。
  关键词:JSF1.2;EJB3.0;JNDI;Jboss Seam
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31670-02
  Study on the Integration of JSF and EJB3.O
  FU Ming-teng,LIU Dong-fei
  (School of Computer Science and Technology,Wuhan 430070,China)
  Abstract:According to the analyses about the technology of JSF and EJB3.0, this paper put forward the various methods of integrating JSF with EJB3.0 to develop a Web application. The codes of realization were given in paper. In the end the advantages and development prospects of integrating JSF with EJB3.0 were discussed.
  Key words:JSF;EJB3.0;JNDI;Jboss Seam
  
  1 引言
  
  SUN公司最新推出了JSF1.2这个新的表现层框架和一套以注释为基础的EJB编程模型EJB3.0,并引入了新的Java Persistence标准,这是一套基于Java EE的基本架构。Web应用开发的关键是提供良好的数据持久化层、简捷快速的表示层构造以及对业务逻辑、页面导航的有效管理。以JSF+EJB3.0的集成模式开发Web应用系统,能很好的兼顾开发效率与维护成本,具有极高的实用价值,同时两者均为Web应用框架并且都遵循Servlet规范,也为二者的整合提供了基础。
  
  2 JSF概述
  
  JavaServer Faces(JSF)是一种用于构建Web应用程序的新标准Java框架。它提供了一种以组件为中心来开发Java Web用户界面的方法,从而简化了开发。通过JSF,可以在页面中轻松自如地使用Web组件、捕获用户行为所产生的事件、执行验证、建立页面导航等。
  JSF通过将良好构建的模型-视图-控制器(MVC)设计模式集成到它的体系结构中,确保了应用程序具有更高的可维护性,JSF按照MVC架构可以分为3部分:View(视图)、Controller(控制器)和Model(模型)。
  (1)View层
  该层即用户使用界面,它是与用户交互的部分。开发者使用JSF内建或其他厂商提供的Render Kit来开发。
  (2)Controller层
  该层位于View层与Model层之间,控制着它们之间的交互过程。在JSF中java.faces.webapp.FacesServlet作为Controller,它配合faces-config.xml配置文件控制WEB应用程序的运作流程。
  (3)Model层
  该层是进行业务操作的部分,由它来实现业务逻辑。JSF中一般使用JavaBean,被称为后台(backing)或托管(managed)bean。
  
  3 EJB3.0概述
  
  为了减少EJB开发的复杂性,Sun公司于2006年5月推出了EJB3.0新规范,EJB3.0新规范中两个重要的变更分别是:使用了Java5中的程序注释工具和基于Hibernate的O/R映射模型。EJB3.0引入了DI(依赖注入)容器类与POJO持久类这些新功能。
  在EJB3.0里,任何类型的企业级Bean只是一个加了适当注释的简单Java对象(POJO),这就减少了在创建EJB时所需的类、接口、部署描述符的数量,注释可以用于定义bean的业务接口、O/R映射信息、资源引用信息。EJB 3.0通过用纯旧式Java对象(POJO)取代抽象bean类,用纯旧式Java接口(POJI)取代组件与主接口(Component & Home),也不必实现业务接口,简化了EJB的开发过程。
  在Java EE5中,开发了通用持久化规范Java Persistence API 1.0(JPA 1.0)代替以前规范中的Entity Bean。JPA是java持久化技术的一个集大成者,它吸取了Hibernate、JDO、TopLink等优秀技术和框架,将这几年发展成熟起来的基于POJO模型的O/R Mapping技术标准化,成为在java中通用的API。大大减轻了编程的复杂性。
  
  4 JSF与EJB3.0的集成
  
  虽然JSF与EJB3.0被作为标准搭载在JavaEE5里,但JavaEE5却没有给出一个结合JSF与EJB3.0的API。要同时在一个WEB应用中使用JSF和EJB3的话,开发者必须自己考虑一个实现方案。开发者可以用下面二种方法来实现JSF与EJB3.0的集成。
  4.1 使用JSF的Backing Bean调用EJB组件
  包含JSF标签的JSP页面是表示层,Faces Servlet提供了controller的功能,将JSF中的属于Bean角色的Backing Bean作为EJB与UI的接口,其作用是在真正的业务逻辑Bean及UI组件之间搭起桥梁。而另一面的EJB容器则成为MVC模式中的Model层,其中会话bean执行独立的、解除耦合的任务;实体bean已经升级为独立的持久层框架(即JPA1.0),应用O/R Mapping技术处理与数据库之间的业务,通过EntityManager对实体(Entity)进行持久化,查询,删除等操作。体系结构如图1所示:
  图1 基于JSF和EJB3.0的WEB应用的体系结构
  在本集成方案中,JSF与EJB3.0的交互,依靠JSF中的Backing Bean来调用EJB。可以用以下方法来实现:
  (1)编写工具类
  EJB使用JNDI(Java Naming and Directory Interface)名来定位存取某特定的对象;JNDI服务是EJB标准所规定的一项标准服务,所有EJB服务的提供商,必须为其EJB服务器实现JNDI服务。
  客户端在调用EJB组件时都需要遵循如下步骤:
  a.借助于JNDI,查找到EJB组件的本地或远程业务接口;
  b.借助业务接口,调用EJB实例中的业务方法。
  开发者可以利用业务委派模式编写一个工具类,它处理连接到 EJB 容器、获取所需资源。Backing Bean通过这个工具类调用EJB来实现业务逻辑,下面是这个工具类的关键代码:
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  public class ServiceDelegate {
  private static ServiceDelegate instance = new ServiceDelegate ();
  public static ServiceDelegate getInstance() {
  return instance;
  }
  /* 创建一个 ServiceDelegate 实例*/
  public ServiceDelegate () {
  try {
  //借助JNDI,查找SessionBean
  InitialContext ctx = new InitialContext();
  [SessionBean业务接口] xxxService =([SessionBean业务接口]) ctx
  .lookup("SessionBean业务接口的JNDI名称");
  } catch (NamingException e) {
  e.printStackTrace();
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  ……
  /*此处省略调用EJB业务方法代码*/
  ……
  }
  (2)使用依赖注入机制
  依赖注入就是由容器负责查找被依赖的对象并注入到依赖bean中,而bean本身不再需要进行JNDI或者context查询。EJB3里可以直接在EJB组件里申明类似@Stateless等注释(annotation)便可标明该EJB为无状态Session Bean,而客户端程序里也只需要在程序里申明类似@EJB的注释便可完成对EJB的调用,而省略了配置过程。其原理是这样的:EJB容器会在配置EJB时解析EJB组件里的注释,根据被申明的注释和默认配置把EJB登录到JNDI里。而客户端程序的运行环境(比如WEB容器)在运行时需要对SERVLET等进行解析,分析被注释的成员变量的类型或名称,根据这些信息得到JNDI名,调用lookup方法,得到对EJB对象的引用,然后使用DI和AOP技术自动完成对EJB的调用。
  SUN公司的Java EE应用服务器GlassFish已经在 Web 层支持 Servlet 2.5 和 JSF 1.2 关于 Java EE 5 的依存关系注入申明,如果将JSF+EJB3应用程序部署在同一个GlassFish应用服务器中,在 Java EE 5 中,backing bean调用EJB组件时,您不必编写任何JNDI查找代码。仅使用 @EJB 声明来标识一个字段,服务器会在创建 managed bean 后注入一个 EJB。
  4.2 利用JBoss Seam框架
  由于JSF的定位是表示层框架,与应用层交互的唯一手段,只有Managed Beans。在Sun的蓝图里,应用层由EJB主持大局。应用层和表示层之间需要某种技术来粘合。Managed Beans有一定的粘合作用,但远远不能满足企业应用编程的需求。为了解决现有框架(包括 EJB 3.0,JSF 和 BPM)之间存在的这一问题,JBoss推出了JBoss Seam 框架,JBoss Seam提供了一致的,以注释为基础的整合EJB3.0和JSF1.2的方法。在JBoss Seam中,你只要为EJB3.0组件提供一个简单的注释,就可以在JSF中直接使用EJB3.0组件了。
  在一般的开发模型中,JSF的Managed Bean与EJB3的Entity由于分属于2个不同的组件模型,所以他们的状态也不得不分别管理。比如,在JSF里用faces-config.xml定义Managed Bean,JSF框架根据faces-config.xml的定义对Managed Bean加以管理。在使用EJB3的情况,得把Managed Bean传送给EJB3框架,EJB3对自己的Entity的状态加以管理。而使用JBoss Seam的情况,JSF的Managed Bean则不再需要在faces-config.xml里定义,JBoss Seam本身提供了一种称为Seam组件的Bean(Java Bean),只要在普通的Java Bean里,对它加以标注(annotation),JBoss Seam便可将其自动映射(mapping)为JSF的Managed Bean和EJB3的Entity。
  使用Jboss Seam 集成JSF和EJB3的方法如下:
  (1)Jboss Seam与JSF集成
  首先在web.xml中设置:
  
  
  org.jboss.seam.servlet.SeamListener
  

  设置 faces-config.xml:
  
  
  org.jboss.seam.jsf.SeamPhaseListener
  

  (2) Jboss Seam与EJB3的集成
  设置ejb-jar.xml:
  
  
  org.jboss.seam.ejb.SeamInterceptor
  

  

  
  
  *
  org.jboss.seam.ejb.SeamInterceptor
  

  

  以上为所有的EJB Beans定义了SeamInterceptor回调。EJB3容器会在调用Session Bean之前先调用SeamInterceptor。这就使得Seam跟Session Bean有机结合起来了。
  
  5 总结与展望
  
  通过使用规范里UI组件、注释和POJO等新技术,采用JSF1.2与EJB3.0集成的方法减轻了开发人员进行底层开发的工作量,而且开发和设计过程层次分明、结构简单。
  JSF和EJB3.0 是用于构建 Web 应用程序的强大技术。如果
  能将两个框架统一起来,无疑它们会相得益彰:无态和有态 EJB 是用于 JSF 的极好的事件处理支持 Bean;JPA可以提供自动且透明的对象关系型数据库映射;可视的 JSF 组件可以将自己的状态绑定到实体 Bean 上。因此,它们是实现面向对象域模型的一个很好的解决方案。为了统一JSF managed beans和EJB 3.0这两种组件模型JBOSS向JCP提交Web Beans技术规范预览草案——JSR 299。该项目的目标是让EJB 3.0 组件能够同时作为JSF managed beans来使用,统一这两种组件模型,进而简化Java中的WEB应用编程模型。
  
  参考文献:
  [1] JCP Expert Group. JSR-244(java EE5.0)[S/OL]. http://jcp.org/en/jsr/detail?id=244.
  [2] JCP Expert Group. JSR-252(JSF1.2)[S/OL]. http://jcp.org/en/jsr/detail?id=252.
  [3] JCP Expert Group. JSR-220(EJB3.0)[S/OL]. http://jcp.org/en/jsr/detail?id=220.
  [4] Jboss org Seam Reference Documentation[EB/OL].
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:Windows Server 2003是已经被广泛使用的网络操作系统,它的安全影响到网络的安全,所以如何提高Windows Server 2003的安全性显得尤为重要。本文介绍了Windows Server 2003采用的用于提高安全性的组件,分析了影响Windows Server 2003的安全因素,由于篇幅原因,只是列出了几种比较常见的几种不安全因素,最后并给出了提高系统安全的措施。  
期刊
摘要:介绍了一种基于ARM的模糊自整定PID温度控制系统,采用了预测与模糊PID相结合的控制技术。精确度高,稳定性好,适用范围宽,实验表明该系统对具有非线性、时变性和时间滞后性的工农业过程具有较好的控制效果。  关键词:ARM;温度控制;预测技术;PID参数模糊自整定  中图法分类号:TP311 文献标识码:A文章编号:1009-3044(2007)18-31681-01  A Fuzzy Aut
期刊
摘要:如何在ASP.Net中嵌入Office Active控件,如同操作Microsoft Word、Excel、PowerPoint、Visio一样,在网页上操作Office Active控件,生成我们所需要的各种Office文档。在ASP.Net的代码中得以实现,就增强了B/S应用系统的可用性及可扩展性。  关键词:Office Active控件;控件属性;保存到web;数字签名;注册Acti
期刊
摘要:随着现代软件工程的发展,软件质量的要求逐渐得到提高,而软件测试也因此受到越来越多的重视。在企业级应用领域,以xunit为代表的自动测试框架已经趋于成熟。但是在嵌入式系统开发领域,由于软件系统对硬件平台的依赖,软件在通用性和易测试性方面都比较欠缺,从而导致自动测试系统的贫乏。本文分析说明了软件测试的作用,特别是在嵌入式开发过程中的作用,以及实施软件测试所需要的代价。基于以上理论,本文论述了一个
期刊
摘要:随着IT市场规模的快速增长,以信息技术为基础的IT项目管理受到越来越广泛的重视。本文从全面提高学生在未来职场中综合执行力的角度出发,结合高职高专学生的特点,在“IT项目管理”课程中进行了一系列的教学改革与实践。  关键词:IT;项目管理;教学;改革  中图分类号:TP3文献标识码:A 文章编号:1009-3044(2007)18-31745-02  The Reform and Practi
期刊
摘要:随着嵌入式系统的发展,嵌入式系统GUI成为一个新的研究热点。QTE/Qtopia是一套十分完善的嵌入式图形系统解决方案,它采用framebuffer作为底层图形引擎。QTE是底层的核心库,提供了图形界面编程接口,Qtopia是专门针对嵌入式产品的可定制和开发的用户界面系统。文中分别介绍了它们的结构和框架,并给出了它们的移植方案,包括交叉编译环境建立,文件修改,编译参数设置。  关键词: 嵌入
期刊
摘要:在电力电子技术课程教学中,有许多电路需要画波形图进行分析,而这些波形图往往非常复杂,只靠板书既费时费力,图形不够规范,又看不到动态情况,教学效果非常不理想。Matlab/Simulink动态仿真工具为解决此类问题提供了一个很好的的途径。本文介绍了MATLAB/ Simulink仿真软件的特点和功能,并以三相桥式全控整流电路为例对其进行了建模和仿真分析。结果表明,利用该软件辅助电力电子教学,不
期刊
摘要:Agent是人工智能及计算机软件领域内的一个新兴技术。文章探讨了Agent技术以及如何把Agent技术应用于网络教学中,以提高网络教学系统的智能性,并给出了智能Agent在网络教学系统中的应用模式与实现方法。简要分析了Agent技术给网络教育带来的优点。  关键词:Agent;网络教学;XML  中图分类号:TP18文献标识码:A文章编号:1009-3044(2007)18-31692-02
期刊
摘要:针对嵌入式SQL编程技术,本文论述了如何在PowerBulider语言中实现嵌入式SQL编程技术,详细描述了技术的原理及具体实现的细节,并给出相应的编程实例代码。  关键词:PowerBlider;嵌入式SQL;通信区;游标  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31679-02  The Programming Technology of Em
期刊
摘要:喷溅动画字效果大量使用于动画片片头中,文字散乱成沙又被聚合成新的文字是吸引观众视觉的一大亮点,如果用FLASH来制作,其喷溅效果没有那么平滑,本文将介绍使用Photoshop+ImageReady的方法来简单实现。  关键词:喷溅动画字;Photoshop;ImageReady  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)18-31723-02  Photo
期刊