Java学习笔记-《Java程序员面试宝典》-第5章Java Web-5.2J2EE与EJB(5.2.1-5.2.4)

来源:互联网 发布:拼接图片软件台词 编辑:程序博客网 时间:2024/06/07 19:52

5.2.1 什么是J2EE

J2EE(Java2 Platform,Enterprise Edition)是Java平台企业版的简称,是用来开发与部署企业级应用的一个架构,它提供了一种统一的、开放标准的多层平台,该平台主要由构件、服务和通信3个模块构成。
构件包含客户端构件和服务器端构件两种类型,其中,客户端构件主要包含两类Applets和Application Clients,服务器端构件分为两类Web构件(Servlet和JSP)和EJBs(Enterprise Java Beans)两种。服务由J2EE平台提供商实现,分为Service API(开发时使用)和运行时服务。通信由容器提供的支持协作构件之间的通信。
从本质上来讲,J2EE只是一个行业标准,主要用来通过Java开发服务器端应用提供一个独立的、可移植的、多用户的企业级平台,从而能够简化应用程序的开发和部署。正是由于J2EE只是一个标准而不是一个成熟的产品,因此目前有很多不同类型的J2EE服务器。只要开发的应用程序符合J2EE的标准,就都可以部署在尊徐了J2EE开发标准的J2EE服务器上。这种标准使得开发人员只需要专注于各种应用系统的商业逻辑与架构设计,而不是过多地考虑底层繁琐的程序编写工作,系统的开发与部署效率大幅提高。

5.2.2 J2EE中常用的术语有哪些

J2EE常用的属于有Web服务器、Web容器、EJB容器、Applet容器、Application Client容器、JNDI、JTA、JAF、RMI等。下面将分别对它们进行解释。
1>Web服务器
Web服务器是指驻留在Internet上的计算机程序。它是一种服务程序,主要工作是接收来自于客户端的请求,然后把对请求的处理结果返回给客户端。用户可以通过浏览器来请求所需的资源,这些资源可以是HTML页面、图片、音频、视频或者PDF文档等,Web服务器接收到请求后会去查找用户请求的资源,然后把找到的资源返回给用户。需要注意的是,它是一个被动的程序,只有当收到客户端的请求后,才会发送响应。
目前最流行的两大Web服务器是:IIS(Internet Information Service)和Apache Htpp Server(简称Apache)。
2>Web容器
Web容器也被叫做Web应用服务器,它是一种服务程序,用来给运行在其中的程序(例如Server、JSP等)提供一个运行的环境。由于Web容器的存在,Servlet只需要关注业务逻辑的处理而不用关注与客户端的交互,因为这些交互都已经由Web容器来协助完成了。常见的Web容器有Tomcat、JBoss、WebLogic和WebSphere等。
下面以Tomcat为例介绍一下Web容器主要完成了哪些工作:当Web服务器(例如Apache)接收到一个客户端对Servlet的请求后,不是直接把这些请求交给Servlet来处理,而是交给Web容器来处理,由Web容器负责给Servlet提供Http请求与响应对象,同时容器调用Servlet的doGet()或doPost()方法来处理用户的请求。
3>EJB容器
EJB容器是一个服务器端容器。EJB(Enterprise JavaBean)是J2EE应用的业务层的技术标准,只要满足J2EE规范的组件就能在EJB容器中运行,这个组件就会被EJB容器高效地管理。同时,EJB容器还给运行在其中的组件提供了安全而优越的服务环境,例如事务管理、邮件服务等。
需要注意的是,EJB组件不能显示地使用EJB容器的API(Application Programming Interface,应用程序接口)来请求容器提供的中间件服务,但可以隐式的让EJB容器知道它们的需求,例如在基于XML的部署描述符中定制所需的配置信息,在Bean类中使用部署注释请求中间件服务。EJB容器为EJB组件隐式地提供中间件服务。
4>Applet容器
Applet容器是一个客户端容器,包含的组件为Applet。Applet是一种嵌入在浏览器中的轻量级客户端,一般而言,只有当使用Web页面无法充分地表现数据或应用界面时,才会使用它。Applet是一种替代Web页面的手段,开发人员只能够使用J2SE开发Applet,处于安全性的考虑,Applet无法使用J2EE的各种Service和API。
5>Application Client容器
Application Client容器是一个客户端容器,包含的组件为Application Client。相对Applet而言,Application Client是一种较为重量级的客户端,它能够使用J2EE的大多数Service和API。
6>JNDI
JNDI全称为Java Naming and Directory Interface,翻译为Java命名和目录接口。它提供了一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可使用名称来访问对象。
通过使用JNDI,一方面实现了快速查找和定位分布式应用程序的功能,另一方面使得程序有了更好的可扩展性。由于JNDI是独立于目录协议的,因此应用还可以使用JNDI访问各中特定的目录服务,例如轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)、网络数据服务(Network Data Service,NDS)和域名系统(Domain Name System,DNS)等。
7>JMS
JMS全称为Java Message Service,翻译为Java消息服务。它是一个Java平台中面向消息中间件的API,主要实现各个应用程序之间进行异步通信,包括创建、发送、接收、读取消息等。通过使用JMS,能够最大限度地提升消息应用的可移植性。JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。
8>JTA
JTA全称为Java Transaction API,译为Java事务服务。它提供各种分布式事务服务(在多个网络计算机上进行数据访问和更新),为J2EE实现分布式事务处理提供了重要的支撑。
9>JAF
JAF的全称我JavaBeans Activation Framework,译为JavaBeans激活框架。它是一个专用的数据处理框架,提供了一种统一处理不同数据格式的方法。
10>RMI
RMI全称为Remote Method Invocation,译为远程方法调用,它主要用于远程调用服务,通过它,可以像调用本地函数一样调用另外一台计算机上运行的程序,而不需要关心远程计算机所使用的系统或所使用的语言,也就是说,只要满足一定的规范,就可以实现在不同的计算机上进行函数调用

5.2.3 EJB有哪些不同的类型

EJB是Enterprise JavaBean的简称,相当于分布式组件对象模型(Distributed Component Object Method,DCOM),它是一种服务器端组件体系结构,用于开发和部署多层的、分布式的以及面向对象的应用系统的跨平台体系结构。EJB简化了Java开发企业级的分布式组件应用程序的过程,它定义了一组可重用的组件—Enterprise Beans,开发人员可以利用这些组件,像搭积木一样建立各种分布式应用。所以,使用EJB可以写出可扩展的、健壮的、安全的应用程序,而不需要开发人员自己去编写负责的分布式组件框架。
依据特性的不同,EJB可以分为以下3种类型:Session Bean(会话Bean),Enter Bean(实体Bean)和Message Driven Bean(消息驱动Bean)。下面将分别对这3种Bean进行介绍。
1>Session Bean
Session Bean用来实现服务器端的业务逻辑,同时协调Bean之间的交互。Session Bean仅存在于客户应用与服务器交互的时间段内,Session Bean中的数据是不保存在数据库的。根据Session Bean是否有状态又可以分为两种类型:Stateless Session Bean(无状态的Session Bean)和Stateful Session Bean(有状态的Session Bean)。
Stateless Session Bean在方法调用期间不维护任何状态,所有事务处理都是在一个方法中处理完成,因此一个Stateless Session Bean可以被多个客户共享,即一个Stateless Session Bean可以同时处理多个客户应用的请求;而Stateful Session Bean则不同,它可以记录客户应用请求的状态,例如在线购物系统中,每个客户都拥有购物车(Stateful Bean),而装在的货物和货物的数量在Session Bean中通过方法来操作,因此每个Stateful Session Bean只能处理一个客户的请求。与Stateless Session Bean相比,Stateful Session Bean的优点是能够记录客户应用的状态,其缺点是它不能被共享、开销较大,性能逊于Stateless Bean,因此当请求用户数量比较多时会消耗更多的内存。
2>Entity Bean
Entity Bean主要是资料组件,代表数据库中的记录,因此它与数据库中的数据有着相同的生存周期,也就是说,只要数据库存在,Entity Bean就一直存在。此外,Entity Bean还可以被多个客户应用共享。Entity有两种对数据持久化的处理方式:1)CMP(Container Managed Persistence,容器管理的持续性)。构件的相关数据库操作由容器自动完成,不需要在bean中编写数据库操作的代码。2)BMP(Bean Managed Persistence,Bean管理的持续性)。构件的相关数据库操作由开发人员在代码中通过JDBC编程来实现。这两种Entity Bean的形态不同,但目的相同,二者的主要区别在于维护资料的角色,CMP是由EJB Container来维护,而BMP则是由Bean自行维护资料的一致性。
Entity Bean一共有3种状态:no-state、pooled和ready。其中,no-state状态表示Bean实例还没有被创建;pooled状态表示Bean实例已经被创建,但还没有和一个EJB Object关联起来;ready状态表示与EJB Object关联起来,若断开关联,则回到pooled状态。
3>Message Driver Bean
Message Driver Bean用来处理异步消息,一般不是由用户来调用的。它的调用方式为:当有异步消息发送到某个Message Driver Bean后,容器会负责调用Message Driver Bean的OnMessage()方法来处理这个异步请求。

5.2.4 EJB与Java Bean有什么异同

EJB是基于Java的远程方法调用(Remote Method Invocation,RMI)技术,可以被远程访问(跨进程、跨计算机),但它必须被部署在Webspere、WebLogic等容器中。EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。
Java Bean是可复用的组件,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器(例如Tomcat)所创建的,因此Java Bean应具有一个无参数的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,是不能跨进程访问的。
EJB与Java Bean都是基于Java语言的构件模型。在开发应用时,既可以选择使用EJB模型,也可以选择使用JavaBean模型。尽管如此,二者也并非完全通用,区别如下图:
这里写图片描述

阅读全文
0 0