J2EE Java2平台企业版(Java 2 Platform,Enterprise Edition)
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能。J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 所以程序员不用自己开发这种服务。
J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,支撑J2EE的13种核心技术:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF,同时还将描述在何时、何处需要使用这些技术。当然,我还要介绍这些不同的技术之间是如何交互的。
J2EE提供了一个框架--一套标准API--用于开发分布式结构的应用,这个框架的实际实现留给了第三方厂商。部分厂商只是专注于整个J2EE架构中 的的特定组件,例如APACHE的TOMCAT提供了对JSP和SERVLETS的支持,BEA系统公司则通过其WEBLOGIC应用服务器产品为整个 J2EE规范提供了一个较为完整的实现。
1.JDBC(Java Database Connectivity)
JDBC API为访问不同的数据库提供了一种统一的途径。
2.JNDI(Java Naming and Directory Interface)Java命名和目录接口
是一个应用程序设计的API,包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务,提供了一致的模型来存取和操作企业级的资源(如DNS和LDAP)、本地文件系统。
JNDI可访问的现有的目录及服务有: DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、 CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
3.EJB
它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。目前符合EJB规范的服务器产品有十几种,如 WebLogic Server,Websphere,iPlanet等。
PS:WEBLOGIC服务器已使建立和部署伸缩性较好的分布式应用的过程大为简化。WEBLOGIC和J2EE代你处理了大量常规的编程任务,包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库访问和连接池、线程池、负载平衡和容错处理等。
J2EE三层应用架构定义了两种基于组建的应用模式,即Web应用和EJB应用(重点看看)。如表3-1所示。
表3-1 Web应用与EJBs应用对比
─────────────────────────────────
Web应用 EJBs应用
─────────────────────────────────
组件 Servlets(Jsps) EJBs
容器 包含在Web服务器中 在应用服务器中
通信协议 Http Java RMI,CORBA IIOP,
Microsoft DCOM等
────────────────────────────────
http://www.51testing.com/html/49/n-8249.html
EJB规范定义了3中基本的BEAN类型-session beans、entity beans 和 message-driven beans。 (待)
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
1.SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例。
2.EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans也是存活的。Entity Beans生命周期能够被容器或者 Beans自己管理。
EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean 和它的数据都将消失;
无状态STATELESS SESSION BEANS: 提供某种单一的服务,不维持任何状态,在服务器故障发生时无法继续存在,生命期相对较短。例如,一个STATELESS SESSION BEAN可能被用于执行温度转换计算。
有状态STATEFUL SESSION BEAN: 提供了与客户端的会话交互,可以存储状态从而代表一个客户。典型例子是购物车。STATEFUL SESSION BEAN在服务器故障时无法继续生存,生命气相对较短。每一个实例只用于一个单个的线程ENTITY BEANS: 提供了一致性数据的表示-- 通常存放在数据库中 -- 在服务器故障发生后能继续存在。多用户情况下可以使用EJB来表示相同的数据。
entity bean 描述了存储在数据库表中的一行持久稳固的数据,如果客户端终止或者服务结束,底层的服务会负责 entity bean 数据的存储。典型例子是客户帐号信息。
Message-driven bean 结合了 session bean 和 Java 信息服务(JMS)信息监听者的功能,它允许一个商业组件异步地接受 JMS 消息。
EJB2与EJB3的区别
4.RMI(Remote Method Invoke)
正如其名字所表示的那样,RMI协议调用远程对象上的方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。
5.JSP(Java Server Pages)
7.XML
8.Java IDL/CORBA
Interface Definition Language,在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开, 或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。
详见http://apps.hi.baidu.com/share/detail/40838020
9.JMS: Java消息服务
Java消息服务(Java Message Service)是一个与具体平台无关的API,是一种允许应用程序创建、发送、接收、和读取消息的JAVA技术。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。
10JTA:Java事务API
Java事务API(JTA:Java Transaction API)和Java事务服务(JTS:Java Transaction Service),为J2EE平台提供了分布式事务服务。
JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配器。
11.XML(Extensible Markup Language)
XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。
XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。
12.JavaMail
JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。
13.JAF(JavaBeans Activation Framework)
JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。