当前位置:首页 > 思想汇报 > [JSF与EJB3.0集成应用研究]应用研究
 

[JSF与EJB3.0集成应用研究]应用研究

发布时间:2019-01-11 04:00:03 影响了:

  摘要:通过对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 ();
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文   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].省略/en/jsr/detail?id=244.
  [2] JCP Expert Group. JSR-252(JSF1.2)[S/OL].省略/en/jsr/detail?id=252.
  [3] JCP Expert Group. JSR-220(EJB3.0)[S/OL].省略/en/jsr/detail?id=220.
  [4] Jboss org Seam Reference Documentation[EB/OL].
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3