程祖红EJB课堂笔记Word格式.docx
- 文档编号:18731921
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:74
- 大小:595.54KB
程祖红EJB课堂笔记Word格式.docx
《程祖红EJB课堂笔记Word格式.docx》由会员分享,可在线阅读,更多相关《程祖红EJB课堂笔记Word格式.docx(74页珍藏版)》请在冰豆网上搜索。
定时服务(任务管理)
参考书:
《精通EJB3.0》、《JavaEnterpriseBean3.0》
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的编程模型EJB_Day22008-04-29
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,客户端
EJB_Day32008-04-30
有状态会话Bean的生命周期:
4.@init是为了兼容EJB2.0时ejbcreate()是给属性赋初值(了解)
当客户端调用@Remove的方法,就会把Bean删除。
会话Bean发布为一个Web服务(WebServices)
企业中的实际运用:
a.做集成
b.动态的电子商务(要求较高)
一、Web服务(概念、特点、原因、编程...)
1、什么是Web服务?
WebServices是一种使用WSDL、SOAP技术,并使用xm
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程祖红 EJB 课堂 笔记