EJBNoteAllWord文档下载推荐.docx

上传人:b****6 文档编号:17942928 上传时间:2022-12-12 格式:DOCX 页数:74 大小:595.58KB
下载 相关 举报
EJBNoteAllWord文档下载推荐.docx_第1页
第1页 / 共74页
EJBNoteAllWord文档下载推荐.docx_第2页
第2页 / 共74页
EJBNoteAllWord文档下载推荐.docx_第3页
第3页 / 共74页
EJBNoteAllWord文档下载推荐.docx_第4页
第4页 / 共74页
EJBNoteAllWord文档下载推荐.docx_第5页
第5页 / 共74页
点击查看更多>>
下载资源
资源描述

EJBNoteAllWord文档下载推荐.docx

《EJBNoteAllWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《EJBNoteAllWord文档下载推荐.docx(74页珍藏版)》请在冰豆网上搜索。

EJBNoteAllWord文档下载推荐.docx

EJB概述(企业级程序背景知识、EJB概念、原理)

一、EJB是什么?

What?

EnterpriseJavaBean企业JavaBean

定义:

①采用 

Java语言

②开发、部署服务器端的分布式组件

③标准(规范)

标准(规范)JSR:

JavaSpecificationRequestJava规范请求

JCP:

JavaCommunityProcess是95年Sun公司定义的一个开放型组织

好比丐帮要制定班规,邀请各路长老相会,共同制定规范。

国内就有JCP成员:

金蝶公司

JSR220规范

二、企业级程序开发背景知识Why?

⑴企业级程序架构发展历史

Host/Terminal主机/终端

主机

PCUTerm终端

(只接收输入/输出,无计算能力)

优点:

a、安全、可靠,因为有许多冗余组件

b、I/O处理能力很强

缺点:

a、昂贵

b、升级、扩展极其不便

主流的主机厂商:

IBM主机、Unisys主机

Client/Server客户机/服务器

在客户机中有业务逻辑,胖客户端比如SwingDB

ApplicationServer

客户机(安装GUI)

优点:

a、开发难度低、经济

b、代码易维护

a、维护较为困难,业务的改变需要重新安装GUI和后台

b、业务面对客户的数量有限

Multi-layered多层架构(B/S)

应用服务器(可选)

DB

Web服务器

浏览器

A、接收http请求业务逻辑的计算数据的存储

B、表示逻辑数据访问部分的业务逻辑

比如存储过程

维护非常方便

开发复杂度较高

⑵开发一个企业级程序考虑的问题

1、HA高可用性7x24x365

集群:

把多个相似配置的Server通过网络组织在一起,形成逻辑上的概念

2、安全

3、集成

4、性能

5、中间件技术容器提供中间件服务,组件封装业务逻辑,程序员重点在组件

组件、容器都满足标准的要求

6、分布式组件:

A、组件依赖于容器,而JavaBean直接运行于JVM

B、组件依赖于特定的协议

C、组件有特定的生命周期,被容器管理的

分布式应用:

应用程序的逻辑分散在多个服务器之上。

远程方法调用

JVM2方法B

JVM1方法A

✧RemoteMethodInvocations远程方法调用

✧LoadBalancing负载均衡

✧TransparentFail-over透明性容错

✧Back-endIntegration后端集成

✧Transactions事务

✧Clustering群集

✧DynamicRedeployment动态重新部署

✧CleanShutdown完全关机

✧LoggingandAuditing日志和评审

✧SystemsManagement系统管理

✧Threading线程

✧Message-orientedMiddleware面向消息的中间件

✧ComponentLifeCycle组件生命周期

✧Resourcepooling资源池

✧Security安全性

✧Caching缓存…

✧…

⑶为什么要使用EJB(优点)

①容器可以提供大量的中间件服务(事务、安全、资源池、缓存、集群、后端集成)

②可以简化企业级程序的开发EJB组件IDE

③开发分布式应用,目前三大类技术:

CORBA(公用对象请求代理架构)由OMG开发的,和语言、平台无关,但要有一套CORBA现有的类库;

DCoM微软的技术,缺点就是依赖于Windows平台;

EJB

它们都是基于组件的技术

还有Web服务,但性能上目前有限制。

④可伸缩、安全的

三、EJB的基本原理

①代理/委托模式

委托:

原因:

C基于安全的原因,入口很严格

C可能是一个远程对象,A不知道C在哪台JVM中

记录日志、审核等

A没办法或不方便访问C,这是就需要通过Delegater委托类来调用C

C

Delegater

A

客户端委托类被委托类(目标类)

委托模式的作用:

(1)解耦合,调用者与被调用者

(2)为我们提供增值服务

代理:

要求委托类与被委托类都实现同一个接口。

IC

代理接口

(表示实现接口)

②远程方法调用RMI

一个Java对象可以透明地访问运行在另一个JVM中的对象。

即跨虚拟机,去调另一个虚拟机中的对象的方法。

透明表示不用处理网络调用的细节。

SUN公司提供RMI协议:

RemoteMethodInvocation.相应的API、命令行工具。

分布式对象:

具有网络使能的Java对象。

此对象可以被客户端所访问,不需要考虑网络细节。

相对与客户端,是运行在另外的JVM中,此对象可以透明地被远程客户端所调用。

Stub:

存根对象,

(1)分布式对象的本地代理;

(2)实现了远程接口;

(3)编码(RMI协议)、解码、网络连接、寻址

Skeleton:

骨架对象,

(1)接受Stub调用请求,将请求进行解码,将请求交给分布式对象,是一种委托关系。

(2)编码

所以,Stub和Skeleton的作用就是屏蔽网络调用的细节。

它们是由RMI的工具rmic来生成的。

RMI远程方法调用,不同JVM的进程。

 运用代理/委托模式

使用EJB能够快速开发和部署分布式组件。

分布式组件可供远程系统访问。

分布式组件又被称为分布式对象、远程对象。

无论是同一进程内的客户,还是进程外的客户及网络中的其他客户,都能够与分布式对象进行交互。

远程接口

 

拦截器

远程方法调用(RMI)过程涉及到的主要步骤如下:

(1)客户调用存根(stub),它是客户端提供的代理对象。

Stub负责将网络通信屏蔽掉,这对于客户而言意义深远。

它能够使用Socket访问网络中的其他资源。

而且,还能够将Java对象(参数)转换成底层网络要求的特定格式。

(2)借助于网络,存根能够实现与服务器端的骨架(skeleton)进行交互。

骨架为服务器端提供的代理对象。

骨架负责将网络通信屏蔽掉,骨架能够接收来自Socket的访问请求,还能够将存根构建好的来自客户的参数转换转换成Java表示。

(3)骨架将来自客户的调用委派给合适的分布式对象实现。

该对象完成具体的访问请求,将结果返回给骨架。

则骨架将结果返回给存根,最后客户获得分布式对象的响应结果。

  注意:

Stub和服务器端实现的对象都实现了远程接口。

利用接口,暴露Bean类中的业务方法,容器会根据业务接口来产生stub和skeleton以及拦截器。

采用代理/委托模式。

显示中间件调用:

需要通过编写代码去调用中间件的API。

我们可以细粒度地控制中间件服务

代码的耦合性太高。

是指业务代码对中间件代码的耦合。

隐式中间件调用:

声明式的。

代码的耦合性低,编程更加简单,编程效率提高。

属于粗粒度的实施,处于方法之上。

请求拦截器:

RequestInteceptor①是由容器生成的;

②它实现了远程接口;

③是调用中间件服务;

④将请求委托给远程对象。

可以通过标注,或部署描述文件,EJB容器会根据这些信息来产生相应的代码。

四、EJB的角色(了解)

◆Beanprovider–developEJBsBean开发人员

◆Applicationassembler–applicationarchitect架构师,集成EJB,选型等

◆EJBdeployerEJB的部署人员,选型,打包部署,性能的优化

◆Systemadministrator系统管理员

◆Containerprovider/Serverprovider应用服务器提供商(容器提供商)

◆Toolvendor工具提供商IDEIBM的WSAD,SUN的NetBeans

五、EJB相关技术

1、JavaEE①用Java语言

②简化开发、部署多层的、分布式的企业级应用的标准和平台

A、JavaEE提供了一个分层的模型:

每一层提供了相应的组件和容器

面试时很重要的JavaEE分层图:

客户层Web层企业组件层(业务层)企业资源层

Html、js

Applet

RMI协议

Http协议

JSP

Servlet

ERP

JavaApplication

MES

Web服务客户端

SOAP协议

EJB容器

Web容器

B、提供了设计的参考(Blueprints)

容器/应用服务器

C、提供标准的API和规范

组件

D、兼容性测试

所以,EJB是JavaEE里的企业组件层中的一种组件技术。

◆EnterpriseJavaBeans(EJB)EJB

◆JavaAPIforWebServices(JAX-WS)Java开发Web服务的API

◆TheWebServicesMetadatafortheJavaPlatform

◆JavaRemoteMethodInvocation(RMI)andRMI-IIOP远程方法调用

◆JavaNamingandDirectoryInterface(JNDI)Java命名目录服务接口

◆JavaDatabaseConnectivity(JDBC)

◆JavaTransactionAPI(JTA)andJavaTransactionService(JTS)Java事务服务

◆JavaMessagingService(JMS)Java消息服务

◆JavaServlets

◆JavaServerPages(JSP)

◆JavaServerFaces(JSF)Sun提出的表示层框架

◆JavaEEConnectorArchitecture(JCA)Java连接器,Java应用服务器+遗留系统

◆JavaAPIforXMLParsing(JAXP)XML解析的

◆JavaArchitectureforXMLBinding(JAXB)XMLJava类绑定

◆JavaAuthenticationandAuthorization(JAAS)Java的认证和授权服务,非常复杂

CORBAIIOP协议Interinter-ORBprotocol

EJB的RMI协议兼容性较差,而RMI-IIOP作一个择中。

RMI的API+IIOP的协议

一、步骤

Step1:

编写Bean类、业务接口;

业务接口:

暴露Bean类的可访问方法的普通的Java接口。

特点:

①访问Bean类,必须要通过业务接口

②本地、远程业务接口

EJB的调用者与EJBBean类的实例在同一个容器中运行,使用本地接口,因为使用本地接口无网络调用的开销,性能会有所改进;

反之,EJB的调用者与EJBBean类的实例不在同一个JVM中运行,使用远程接口。

③业务接口可以使用标注来确定类型(远程/本地接口)

Bean类:

封装业务逻辑的普通的Java类。

特点:

①Bean类一定要具有业务接口中声明的方法,但是不一定实现业务接口

②Bean类中可以使用标注来确认Bean的类型。

importjavax.ejb.Stateless;

importjavax.ejb.Remote;

@Stateless某种Bean类(无状态会话Bean)

@Remote(HelloRemote.class)标注远程业务接口

publicclassHelloBeanimplementsHelloRemote{

/**CreatesanewinstanceofHelloBean*/

publicHelloBean(){

}

publicStringsayHello(Stringuser){

//TODOimplementsayHello

return"

Hello,"

+user;

}

}

Step2:

编译step1的代码;

JavaEE的API

Step3:

提供部署描述符;

(可选)

A、标准的部署描述符文件:

ejb-jar.xml与容器无关的

B、容器特定的描述文件:

比如Sun的sun-ejb-jar.xml

Step4:

创建Ejb-jar文件,打包2、3步的产物;

生成.war包包中需要满足一定的结构:

session/ejb/HelloRemote.class

session/ejb/HelloBean.class

META-INF/ejb-jar.xml(optional)

META-INF/{vendor-specificxmlDDfiles}

Step5:

将Ejb-jar文件部署到容器中。

Step6:

通过查看EJB容器验证是否部署成功。

查看EJB的存根有没有绑定到JNDI服务器之上。

Step7:

编写客户端程序调用Bean类进行测试。

1、EJB容器生成Stub,并且绑定到JNDI服务器上。

(绑定名:

默认是远程业务接口的全限定名)

2、客户端通过JNDI来查找Stub

(JNDI服务器的入口信息)

1、EJB容器生成Stub,并且绑定到

JNDI服务器上。

JNDI服务器

(绑定名:

默认是远程业务接口的)

HelloBean

JNDI查找

Test

产生Stub对象

Stub

客户端

JVM#1

应用服务器SunApplicationServer9.0

JVM#2

3、使用业务接口来调用相应的方法。

packageejbclients;

importjavax.naming.InitialContext;

importjavax.naming.Context;

importsession.ejb.HelloRemote;

publicclassMain{

publicstaticvoidmain(String[]args)throwsException{

System.setProperty("

jndi.factory"

"

com.sun.jndi.cosnaming.CNCtxFactory"

);

jndi.provider.url"

corbaloc:

:

localhost:

3700/NameService"

Contextctx=newInitialContext();

构造初始化上下文对象

HelloRemoteh=(HelloRemote)h就是存根,用远程业务接口来引用的

ctx.lookup(HelloRemote.class.getName());

Stub默认的JNDI的名字

System.out.println(h.sayHello("

George"

));

Skeleton

Bean类

端口号信息:

http:

//localhoat:

4848

加入客户端需要依赖于Sun的运行库:

appserv-rt.jarjavaee.jar

业务接口

二、EJB3.0的编程模型

1、EJB的类型

①会话Bean:

封装业务逻辑

②实体Bean:

封装数据访问的逻辑,类似orm方案。

③消息驱动Bean:

处理消息

2、EJB的调用过程

3、EJB3.0的改进(了解)

①取消了home接口(远程、本地)

倾入式方案

②取消了组件接口

③取消了远程对象接口、本地对象接口

④使用标注来代替部署描述文件比如@Stateless

a.标注和部署描述文件可以同时使用;

b.描述文件优先级高

⑤使用依赖注入DI——对象间的依赖关系由容器来提供。

三、会话Bean

1、会话Bean的概念

用来封装业务逻辑(业务流程、业务规则、算法、工作流的一种EJB)

①BO(BussinessObject)类似Entity业务对象,不仅有数据,还有业务对象的关系;

BPOService

②生命周期非常短暂(内存中,不会被持久化)

《SLSB》

sayHello()

2、无状态会话BeanStatelessSessionBeansSLSB类图

主要内容:

特点、编程、生命周期

用来建模,只需要一次方法调用即可完成的业务逻辑

特点:

①不保存客户端的状态

②使用Pooling来提高并发的性能(池化的思想很重要)

Bean实例

Client

pooling

③可以被多用户共享

编程:

TaxBean

getTaxRate(city:

String):

double

生命周期:

①实例化,调用Bean类缺省的构造器

②依赖注入(可选)

③调用@PostConstruct回调方法(可选)

在EJB容器调用@Remove之后,销毁之前

初始化

EJB会回调Bean类的相应的回调方法

@Remove修饰的方法只是EJB容器销毁其实例

A.对于无状态会话Bean,不会真正删除

B.有状态会话Bean,会删除此Bean

注意:

1、回调方法不能够在事务、安全上下文环境中运行。

在默认情况下,Bean的所有的业务方法,都会有事务支持。

(有事务上下文对象存在),

这是一种隐式中间件服务。

2、回调方法可以定义在单独的回调类(POJO)

A.回调方法必须带一个参数:

InvocationContext

B.使用标注将回调类与Bean类绑定

C.在Bean类中写

D.@PostConstruct、@PreDestroy只能放在方法的前面.

补充:

方法的调用一般有三种:

a).同步调用A调用B,必须等B完成才可以进行后续工作。

b).异步调用A向B发送消息,不必等待B的回应。

c).回调,也是同步调用的一种。

A调用B,B再调用A。

<

I>

>

Callback

Method()

B

fb(Callbackc)

fa()

publicvoidfb(){

newB().fb(this);

好莱坞原则:

Don’tcallme,I’llcallyou!

3、有状态会话Bean

⑴、特点:

①需要多次方法调用来完成一个业务流程

②需要维护客户端的状态

③不能够被多用户共享

④使用cache来提高并发性

⑵、激活、钝化机制:

EJB容器需要对有状态会话Bean的状态进行保存(持久化设备)或者从持久化设备中恢复其状态。

钝化:

1、挑选某个相对空闲的Bean(LRU算法最近最少使用算法)

2、钝化其状态。

激活:

2、读取保存的状态。

钝化

Client1

Client2

供C使用

cache

Client3

钝化过程:

A.(默认被钝化的状态)

1、有状态会话Bean的基本类型、对象类型都会被自动持久化到磁盘中去。

(采用序列号协议)

2、home接口的引用也会被自动钝化。

3、Bean的业务接口的引用

4、EntityManager、TimeService....也会自动钝化。

B.(默认情况下不被自动钝化的状态)

数据库连接Connection、Socket等EJB不会帮助钝化,需要使用回调方法:

@Passivation

在此标注的方法中,一般用来释放这些资源。

@PrePassivate默认的钝化机制不支持的状态,在该方法中处理.

@PostActivate与@PrePassivate对应,用于重新获得资源

在@PrePassivate中close,在@PostActivate中获取连接,不过用得少,因为用数据源等。

⑶、编程:

练习:

购物车的EJBSessionBean实现,1,EJBModule2,客户端

有状态会话Bean的生命周期:

4.@init是为了兼容EJB2.0时ejbcreate()是给属性赋初值(了解)

当客户端调用@Remove的方法,就会把Bean删除。

会话Bean发布为一个Web服务(WebServices)

企业中的实际运用:

a.做集成

b.动态的电子商务(要求较高)

一、Web服务(概念、特点、原因、编程...)

1、什么是Web服务?

WebServices是一种使用WSDL、SOAP技术,并使用xml文档来交换信息的网络应用程序。

案例:

某医院

病例保险公司

不同保险公司会有不同的索赔系统,开发的语言不同,维护起来极其

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1