j2EE 汇总

概述

j2ee是为了满足构架企业级应用的需求,而建立的一系列技术标准。这些标准为开发,部署,管理多层以web为基础,以服务端为中心,以组件技术为基础的企业级应用提供开放的标准平台。通过标准的统一,为搭建企业系统构架的提供标准制定的支持。

层次结构

j2ee分三个部分,如图所示:

 

 

 

   

客户端

客户端层比较简单,通过浏览器和客户端程序都可以访问这个应用。客户端程序定义是一个比较宽泛的概念,如果你把他看成一个具体的访问那么他就是一个客户端程序,如果你站在一个更高的视角去看,那么也许他是和另一个企业应用的连接器,那么这个整个应用就应该纳入到eis层里。

服务器端

服务器端又分为web层和业务层。

Web层主要提供web级的操作,它主要包括2部分组成,web组件和web容器。其中javabean也是一种区别于jsp组件和servlet组件的web组件,可以用它来直接访问EIS层。

业务层主要提供业务级的操作,他主要包括2部分组成,ejb组件ejb容器。

在服务器端中包括各类组件-按照j2ee标准所制定的组件模型(jsp组件模型,servlet模型,ejb模型),各类容器-由服务器厂家提供的支持j2ee标准(包括各种处理机制和各种spi)的各种服务器容器。

企业信息资源层(EIS

这一层是一个比较宽泛的概念,各种企业的信息资源都可以被纳入到这一层,如现有的系统和软件程序,数据库,总之企业可以从各类系统渠道或的信息都可以被纳入到这一层中。

各类技术标准

JAX-RPC,SAAJ,JAXR,J2EE Management,JACC,JMX,J2EE Deployment,Web Services for J2EE

1 web层相关技术标准

1)  web层里与视图相关标准

包括有jsp,servlet,jstl等等,其中还有一些没有被定为j2ee的标准的模版技术veocity。

 

Servlet cgi 的区别, CGI(Common Gateway Interface) HTTP 服务器与你的或其它机器上的程序进行 交谈 的一种工具,其程序须运行在网络服务器上。而且CGI大多都是属于应用程序的,只是通过定义一种接口使 得 C,C++,C shell,Perl或VB等语言可以和http服务器通讯从而使得程序可以处理页面的请求,而servlet则 仅仅是针对java语言,专门处理页面请求的一个框架,他不仅对cgi的接口特殊化了,而且他还定义其他一 系列支持web处理的规范(如web容器的spi,各种管理处理等等)。并且servlet应用和cgi应用比较明显的 区别是,一个用线程一个用进程,后者对每个请求都要启一个进程,并且不能重用,所以效率低一些。这个 是比较严格的区分,cgi就是当初定义的那个接口协议,如果更广义的理解cgi,servlet算是cgi的变种。
    而jsp其实又是再servlet的基础上针对其编码效率差的情况,采用静态HTML和动态HTML混合编码的技术,其 实在后 ,web服务器是先吧jsp转换成servlet来处理的。Jstl又是在jsp基础上对标签的封装,而veocity 则是采用模版的一种方式写页面的,这个就牵扯到配置和编码的问题了,他就是把编码工作转移到模版编写 上,是简化了一些,但是也没特别明显的感觉。配置的量大了,配置复杂了其实就又算一个新的语言编码了。

2)  web层里与控制相关的标准:

struts,当然也可以把控制逻辑写到显示里面。

3)  web层里与模型相关的标准:

javabean,也可以把模型层的业务处理写到显示里,也以也业务处理放到ejb业务层里,当然也可以是web层里是不去调用ejb业务层的东东,而直接用web层的javabean来处理业务的逻辑。

4)  web层里WebService相关技术标准

Web Services for J2EE,JAX-RPC,SAAJ,JAXR等。

Web Services for J2EE是J2EE平台中Web服务的总框架,它定义了客户端模型,服务端模型,WSDL绑定和安全规范,它通过定义这样的一个WebService总框架,从而使具体的Web服务实习能够在J2EE供应商中迁移。

JAX-RPC是Web服务中的核心技术,具体通过他定义了Web服务具体构架,和具体实现中的各个操作规范以及操作所遵循的技术标准等。他是一种远处调用类似于RMI,规定了XML到java类型的映射方法,定义了WSDL到java类型的映射方法,定义了客户端和服务端具体编程模型,定义了SOAP消息的Handler框架,提供了复杂java数据库类型映射的扩展框架。

JAX-RPC构架如下:

 

 

 

 

对于JAX-RPC它和其它的远程方法调用(RPC,COM,CORBA,RMI)有什么区别呢?我们看一般的远程方法调用的结构,如下图所示,

 

 

 

 

 

 

他们知识接口描述语言和消息传递协议不同,当然他们具体的运行环境Run Time标准也是不一样的。

SAAJ是一组通用的处理SOAP消息的API,他以前是在JAXM中的后来被划分出来了,使得JAX-RPC也可以调用它。

JAXR是和服务注册,发布相关的标准API,他支持UDDI和ebXML两种服务注册提供者。

 

u d di 全称是 Universal Description, Discovery and Integration (统一描述、发现和集成)的缩写。 UDDI 的意图是作为一个注册簿,就象黄页是一个地区企业的注 册簿一样。象在黄页中那样,在 UDDI 注册簿中,企业将在不同的目录下注册它们自己或其服务。通过浏览一个 UDDI 注册簿,开发人员能够查找一种服务或一个公 司,并发现如何调用该服务。他着重的是 web 服务的注册集成和发现,而现在我们小型应用中,这部分都是人工控制的,但是对于大型应用来说就必须通过一个标 准对这部分规范化,通过制定规范,由各个厂商提供系统或编码,控制管理起来。而 JAXR 则是注册时的一个标准 api ,他通过制定底层注册消息的传输协议( soap )和解析协议(语义化注册消息并制定处理 api spi )使得我们仅用关心注册消息正文部分,并按协议处理。

 

JAXM这个不是J2EE里的一部分,是通过另一种标准来实现WebService的,JAX-RPC是通过基于XML的远程方法调用(rpc),而JAXM是基于XML数据消息的来实现的,当要发生面向文档的数据和大量,粗粒度或复杂的流数据的时候用JAXM比较好,而且JAXM的单向(one-way)接受消息模式是支持异步,且保证消息可靠的到达对方。他的另一种罅隙接受模式是请求-响应(request-respone)

Connector Architecture,在原有的连接器结构中,只支持J2EE组件到EIS的单向调用,Connector Architecture 1。5版本中从EIS可以直接调用J2EE组件,这样就可以通过连接器把EJB等组件向外暴露为Web服务端点,而在J2EE1。4中是支持直接把无状态会话bean部署成WebService,从而在业务层就实现web服务。

看下JAX-RPC可以发附件。

2 业务层相关技术标准

1)  务层里的EJB,定义了java服务器端的构件模型,包括5种,无状态会话bean,有状态会话bean,cmp实体bean,bmp实体bean,消息bean等等,这个在后面详细介绍。

2)  RMI,EJB的调用其实就是使用的RMI来实现的。RMI是专用做java的远程调用的,而CORBA是通用的和语言无关的,CORBA多了通用性,在性能和简洁上自然就不如RMI,如前面画的远程调用一样他们各种用自己的接口描述语言和消息传输协议进行通讯,CORBA的接口描述语言是IDL of CORBA,传输语言是IIOP,而RMI的接口描述语言是Java RMI interface in RMI,传输语言是JRMP(Java Remote Messaging Protocol,Java 远程消息传递协议)。而两种远程调用的结合就出现了RMI-IIOP,他使RMI的传输语言变为IIOP以便RMI 调用集成到现有的 CORBA 基础架构中,仅需极少修改就可以在 IIOP 上运行 RMI 调用。只是2种标准的接口描述语言不同,但这个并不很影响2个的互相调用。(因此通过IIOP,EJB可以和CORBA对象互操作)

3)  JMS,一个统一各种MOM系统接口的规范,他包括点对点ptp和发布/订阅pub/sub两种消息模式。提供可靠消息传输,事务,和消息过滤机制。

3 各层间交互所使用的技术标准

1)  业务层和EIS层:JCA为连接J2EE应用服务器和已有的企业应用系统(ERP/CRM等)提供了解决方案。通过JCA 的架构,定义了应用服务器和资源适配器中的的系统级合同(连接池,事务管理和安全)和J2EE服务器按接口交互,在具体方法中调用EIS,为资源适配器的客户端定义了通用的客户端接口CCI(EJB具体使用的接口API),同样定义了JCA打包和部署的细节。使得EIS和应用服务器不需要提供专门的接口,而是通过对统一规范的接口进行支持,这样对于任意一个EIS和应用服务器的互联只需编写资源适配器就可以了。应用服务器为JCA提供了安全管理,连接管理,和事务管理方面的工作。

2)   

 

4各类基础技术标准

1)  XML相关技术标准,包括XML本身技术基础,以及JAXP所用到的SAX,DOM,JDOM。

2)  JNDI相关技术标准,

3)  JDBC技术标准,这个就不用多说了。

4)  JavaMail技术标准,这个也不多说。

5)  J2SE技术标准,其中上述一些技术标准包含在J2SE里的,但由于其特殊性他们单独列出来了。

容器介绍

各类组件在一个称为容器的结构中执行。容器为一个或更多的组件提供应用的上下文及运行环境并且为组件提供管理和控制服务(包括线程管理,事务管理有7种级别的事务处理,状态管理,安全属性和资源共享等),容器可以是客户端的也可以是服务器端的,象浏览器中的用于执行applet的java虚拟机就是客户端的容器,而J2EE中,容器主要有web容器和EJB容器。

组件是一个可重用的软件构件,他是一个预先构建的封装的代码模块,他能够与其他组件或是硬编码一道很快的生成定制的应用程序。

组件模型定义组件的级别体系结构,指定他的接口结构,以及与容器和另外的组件交互的机制。组件模型提供了创建 并且能实现一起工作以形成更大的应用程序组件指南。Ejb就是一个组件模型。

 

EJB介绍

1 综述

会话bean主要是业务逻辑的处理,实体bean主要业务数据的表示,消息渠道bean主要提供。

Bean组成,主接口EJBHome,EJBLocalHome,会话和实体都有,用户通过主接口的create方法生成组件接口。组件接口,EJBObject和EJBLocalObject,会话和实体都有,其实就是RMI的stub,客户端用于远程调用的代理类。Bean实现类,逻辑的真实处理类,每种bean都有,一般使用ide的时候只用写bean类其他的可以用ide工具生成。Ejb-jar.xml包括每个ejb的各类信息,ejb描述信息,资源引用信息(由于在J2EE中为了便于系统的迁移,各类资源都是采用JNDI服务来调用的)。还有就是在部署的时候生成的一系列stub和skeleton类。

2 无状态会话bean

最常用的EJB,他不能维持一个调用客户的状态,当方法执行完后,状态不会被保持。调用完成后,无状态会话bean被释放到缓冲池中等待下一个调用。

3 有状态会话bean

可以一对一的维持每个调用客户的状态,并且再不同的方法调用中维持这个状态。它是通过bean中实例变量来保存客户状态的,并通过ejbcreate的时候传入相同的参数,来得到同一个会话bean,并通过对会话bean状态类型的声明使得系统可以确认他的状态类型,若为有状态的则系统会调用他响应额外增加的方法,如钝化和激活等。在EJB2.1中引入了定时器服务,他通过bean类实现TimedObject接口即可,除了有状态会话bean其他的EJB都可以使用。

Handle的使用可以使得不通过JNDI而是通过handle对ejb调用,由于EJB的调用是可以再多个jvm间进行的,所以只要把handle传过去,就可以调用。Handle对有状态会话bean尤其有用,通过handle可以保留这个ejb。

4 cmp实体bean

各个字段完全是由配置生成的和数据库做一对一的对应,一切数据库操作定义和操作均由容器完成的。实体bean在他的组成中除了基本的接口和类外又加了一个主键类,每个实体bean都要有,主键类用于在主接口中的findByPrimaryKey方法中查找实例,主键类最多是String和Integer。会话bean是通过主接口的create方法来得到组件接口的,而实体bean除了可以通过create返回一个新增的组件接口外,还可以通过finder方法返回已有的组件接口或是组件接口集合。(find方法的查询条件是在部署描述符里用EJB QL来指定。还有注意find和ejbSelect的区别,ejbSelect是Bean用于内部执行查询的辅助方法,客户端是看不到的。)

cmp中关系复杂的实体bean,使得多个实体bean之间可以存在一对一,一对多,多对多的关系。主要是通过在bean的实现类和组件接口中增加CMR(容器管理方法)和在部署描述符中增加ejb-relation说明。

实体bean中可以使用任意的java数据类型,也可以自定义值对象,只要在部署描述符中说明即可。而关系复杂实体中也是bean中存在自定义值对象,这个值对象直接就是他有关系的接口组件或他们的集合。

5 bmp实体bean

cmp不同的是他的数据库操作定义是自己完成的,而数据库操作是容器完成的。即ejbCreate,ejbPostCreate,ejbRemove,ejbLoad,ejbStore,ejbSelect方法的具体jdbc操作是由用户在编写bean时定义的,而不是容器自动生成的。此外还有一种不实用实体bean的数据库访问,这种则是数据的操作定义和操作都是自己完成的,和容器无关。Bmp中各个数据库操作定义是用户编写的因此可以把关系复杂实体bean的处理机制移到sql语句中去,而不用上升的实体bean这个级别上再来处理。

vo,po,pojo,orm,to)

orm是操作pojo的,他的目的是让操作po象操作pojo一样,而实体bean的观念就不同他是让用户直接操po的

6 消息驱动bean

通过和MOM消息中间件一起使用,解决企业级系统的集成,他支持异步通信,支持ptp和pub/sub两种消息模式,并且是松耦合的。消息驱动bean可以作为消息的发送者也可以作为消息的消费者(任意一个遵循JMS的java应用都发送和消费消息,当然也包括哪些直接调用他们api的java和非java语言应用)。由于消息驱动bean不是通过组件接口调用的,所以他bean组成没有主接口和组件接口,但是他的实现类中必须有一个onmessage方法用来消费消息。

已有的MOM有IBM的MQSeries,Microsoft的MSMQ,以及BEA的MessageQ等。他们都是支持JMS,对于不支持JMS的MOM通过JCA构架也是可以让消息渠道bean监听的。

企业级应用的集成

1 使用连接器体系结构

提供比较紧密的企业级应用集成,支持事务和安全性高。缺点耦合度比较高,要针对具体的EIS完成适配器编写。

2 使用消息服务

提供比较松散的企业级应用集成,支持事务,与平台无关与语言无关,通过MOM提供一种异步整合的技术。

3 使用web服务

提供较为松散的企业级应用集成,与平台无关与语言无关,支持同步和异步的的整合,并且不依赖与其他中间件(如MOM),但是它使用SOAP消息作为载体,而SOAP不为事务处理,可靠交付或保证通信定义语义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值