J2ee是企业级的计算平台,它为分布式和基于组件的软件开发提供了一个“操做系统” javascript
Ant是什么工具?? html
EJB: java
什么是EJB? web
是一种server端组件结构,简化了开发分布式企业级程序的过程 算法
类比:应用server是一个CD播放器,而组件是一张cd,因为有了cd标准,不论什么cd播放器都能播放cd 数据库
EJB分为两个部分: 编程
一、 规范 api
列出了组件与应用server之间相互约定的规则 缓存
二、 一组java接口 安全
组件和server都应该
Java bean 与ejb的差异?
Javabean仅仅是一个含有get/set的java类,javabean是不能部署的
EJB中的角色分工:6种分工
一、 bean供应商:编写组件
二、 应用系统组装商:整个系统的架构师,组织组件协同工做
三、 EJB系统部署员:了解各类执行环境,知道怎么样在server中部署bean
四、 系统管理员:维护和监控已经部署好的系统
五、 容器和server提供商:如weblogic、websphere等等
六、 工具供应商:Jbuilder、wsad、Juint、ant等等
2 EJB基础
EJB技术是基于RMI和JNDI的,学习以前应了解这两项技术
一个企业级BEAN是一个可以在分布式环境中部署的server端软件组件,一个EJB多是由一个或者多个java对象组成,Bean用户没必要关系组件的组成,它们仅仅和组件的接口打交道。
2.1 企业Bean
Bean类型:
一、 会话Bean
模拟商务过程对象,就像动词同样,运行动做
二、 实体Bean
模拟商务数据对象,就像名词同样,如产品、订单等等数据库对象
三、 消息驱动Bean
与会话Bean类似,也是表明动做,仅仅能经过消息来调用它们
2.2 分布式对象:EJB基础
2.3 分布式对象和中间件
2.4 企业级Bean的组成部分
2.4.1 Enterprise Bean
所有的Ejb类都必须实现的接口是:javax.ejb.EnterpriseBean
所有的会话bean都必须实现javax.ejb.SessionBean接口
所有的实体bean都必须实现javax.ejb.EntityBean接口
所有的消息驱动bean都必须实现javax.ejb.MessageDriveBean接口
2.4.2 EJB对象
◆远程接口(Remote接口):
EJB对象必须clone bean类的每个公开的商务方法,bean供应商编写了一个特殊的接口,该接口复制相应的bean类的所有公开的商务方法,该接口称为远程接口(Remote接口)
所有的Remote接口必须来源于javax.ejb.EJBObject
client不能直接调用EJB,client调用的是EJB对象,而不是调用Bean,是client-》EJB对象-》EJB
什么是EJB对象?
EJB对象把所有的client请求都传递给bean,是一种代理对象,具备网络功能,EJB对象把client和Bean链接在一块儿
2.4.3 Home对象
client是经过EJB对象调用Bean的,那么,client是怎样调用获得EJB对象的引用的呢?
就是经过Home对象来引用EJB对象的
是EJB对象的制造生成库
功能:
生成EJB对象
查找现存的EJB对象
删除EJB对象
Home接口:
Home对象、EJB对象、Bean实例之间的关系??
2.4.4 本地接口
由于Home接口生成Bean的速度是很慢的
可以经过本地对象高速、高效的调用企业级Bean,而不是经过EJB对象调用,本地对象实现本地接口,而不是远程接口
EJB对象:请求拦截器
远程接口:请求拦截器上的接口
Home对象:制造生成库
Home接口:制造生成库接口
2.4.5 部署描写叙述
必须在部署文件里声明组件对中间件服务的要求,好比,使用部署描写叙述来声明:
一、 Bean的管理和生命周期要求:指明EJB容器应该怎么管理这些Bean
二、 持久性要求:是本身处理持久性仍是托付容器处理持久性问题
三、 事务处理要求:
四、 安全性要求:
EJB的部署描写叙述是一个XML文件,Bean的提供商负责描写叙述部署文件
2.4.6 供应商特有文件
2.4.7 EJB-JAR文件
Bean类、Home接口、Remote接口以及部署文件一旦生成,就可以打包成EJB-JAR文件了
3 编写第一个Bean
3.1 怎样开发EJB组件
开发一个EJB组件,通常遵循例如如下步骤:
一、 编写Bean的java文件、组件接口、home接口、EJB class文件
二、 编写部署描写叙述附
三、 编写java文件到.CLASS文件里
四、 使用工具生成ejb-jar文件
五、 公布ejb-jar文件
六、 配置EJBserver,可能需要调整数据库链接、缓冲池等等
七、 开启EJBserver
八、 測试
3.1.1 Remote接口
Remote接口复制咱们要暴露的每一个业务方法,注意两点:
一、 该接口继承自javax.ejb.EJBObject,必须实现EJBObject接口所要求的几个方法,如:remove等等
二、 必须编写实际的业务代码
产生hello.java文件,继承自javax.ejb.EJBOjbect
3.1.2 本地接口
本地client将会使用本地接口而不是remote接口,本地接口和remote接口有微小的差异
产生HelloLocal.java文件,继承自javax.ejb.EJBLocalObject
3.1.2 Home接口
Home接口拥有Create和Destroy EJB对象的方法。由Home对象运行Home接口
Home接口注意下面几点:
一、 Create方法通常用于对EJB对象的引用,Create方法也通常用于初始化Bean
要传递建立Bean时的參数,需要覆盖Home接口的create方法,并且要与Bean相应
产生HelloHome.java文件,继承自javax.ejb.EJBHome
3.1.3 Local Home 接口
Local Home接口比Home接口有更高的性能
产生HelloLocalHome.java文件,继承自javax.ejb.EJBLocalHome
3.1.4 Bean类
产生HelloBean.java文件,实现javax.ejb.SessionBean接口
EJBContext:通向容器的途径
容器经过setSessionContext方法将bean和context对象关联起来
3.1.5 部署描写叙述附
部署描写叙述附是一个xml文件
部署描写叙述文件是对前面描写叙述的Remote接口、本地接口、Home接口、LocalHome接口、Bean类的总体描写叙述!!
3.1.6 EJB-JAR文件
打包以上所有文件
3.1.7 部署Bean
部署步骤:
一、 核对EJB-JAR文件
二、 用EJB容器提供的工具生成EJB对象和Home对象
三、 用EJB容器提供的工具生成不论什么必须的RMI存根和骨架
3.1.8 怎样调用Bean
现在開始讨论client的代码,通常都使用基于RMI的client,使用JAVA命名和JNDI在网络中查找对象
代码的特色例如如下:
一、 查找Home对象
EJB的位置透明:
经过文件夹服务,应用程序代码不依赖于特定的机器名字和物理位置,使得编写的代码可以移植。
什么是JNDI?
JNDI提供标准接口用于定位用户、机器、网络、对象等,好比,可以使用JNDI定位内部网络中的打印机,也可以定位JAVA对象及链接数据库。在EJB中,JNDI用于查找Home对象
JNDI怎样定位Home对象?
client使用别名来确认所想要的Home对象
JNDI有两个属性必须设置:
一、 上下文生成库的名字
二、 提供者的URL地址
二、 使用Home对象建立EJB对象
三、 调用EJB对象的商务方法
四、 从内存中清除EJB对象
4 Session Bean
Session Bean与Entity Bean的一个显著的差异是:Session Bean的生命周期比較短
4.1 Session的子类型
4.1.1 状态会话Bean
一个商务过程包括很是多步骤而且持续很是久时,需要使用有状态的Session Bean,在每个方法之间都要保存一种状态(有事务的概念)
4.1.2 无状态会话Bean
一个商务过程仅仅需要一次请求对话,一个方法调用完毕以后,该bean可能被销毁。
为了获得更高的性能你应该选择无状态会话Bean
4.2 状态Bean的特征
4.2.1状态Session Bean的调度原则:
内存中仅仅有几个有限的Bean实例,EJB容器採用LRU算法钝化策略
4.2.2对话状态听从的原则:
当EJB容器钝化Bean对象时,使用对象序列化将对象转换成比特流,写入硬盘
容器必须保留在钝化和激活过程当中成员变量先前的值
4.2.3 激活/钝化回调方法:
了解Bean钝化和激活的过程当中发生了什么??
使用ejbPassivate方法钝化,该方法告知bean,它所保留的对话状态即将被交换出去,并且让Bean释放一些如数据库链接、套接字等。
钝化的时机:
client调用bean对象时,内存中不存在该对象,且EJB容器的缓存区已满,此时,EJB容器在处理请求以前必须钝化一个Bean
激活:
调用ejbActivate,序列号的对象的状态被读会内存
4.2 一个简单的状态会话Bean
4.2 会话Bean的生命周期图表
5 实体Bean
5.1持久的概念
5.1.1 Java对象序列号
将对象持久化到物理存储空间中去
5.1.2 对象-关系映射(ORMAP)
眼下通常手工完毕ORMAP
5.1.3 对象数据库
Java自己作为对象被完整的存储,没有ormap映射层
对象查询语言:OQL
眼下对象数据库的应用并不普遍
5.2 什么是实体Bean
实体Bean:
内存中一个实体的持久数据的Java表现形式
实体Bean类包括的文件:
包含远程接口、Home接口、企业Bean、部署描写叙述符等等
与其它Bean的区别:
一、 实体Bean类映射一个数据库模式中的实体定义
二、 实体Bean类有主键类
5.3 实体Bean的特征
特征:
一、 实体Bean是永久存在的
二、 实体Bean实例是一个相应到数据库中的视图
更新实体Bean的同一时候数据库会本身主动被更新
EJB容器经过调用Bean的ejbload和ejbstore方法在java对象和数据库之间来回的传送数据
三、 几个实体Bean可能表明同一底层数据
四、 实体Bean可能收集再利用
五、 保存实体Bean的两种方法
BMP:Bean管理持久,组件开发人员必须编写代码将内存中的字段转换成数据库中的字段,实体Bean可以经过JDBC运行Insert/Delete语句
CMP:容器管理持久,可以经过容器完毕持久化操做,容器为您生成数据库訪问的代码,容器本身主动生成Insert/Delete方法。
六、 实体的建立和删除
6 编写Bean管理的实体Bean
编写Bean管理的实体Bean时,您必须本身编写数据訪问逻辑
6.1实体Bean编程基础
查询已存在的实体Bean:ejbFind()
(在J2EE1.4SDK中怎么没有ejbFind这种方法呢??)
该方法用于在存储空间中查询一个已存在的实体Bean
7 编写容器管理的实体Bean
8 消息驱动Bean
这一章咱们将会学习messaging,是一种轻量级的通信方式,它在不少场景下比RMI更合适
将会讨论:
一、 对messaging的简单介绍,包含异步的预览和面向消息的中间件
二、 JMS的大纲,消息驱动的Bean是依靠JMS
三、 消息驱动Bean的特性
四、 消息驱动Bean与实体Bean和SessionBean的比較
五、 怎样开发消息驱动的Bean
8.1 为何要使用消息驱动的Bean
在前面的章节中学习了怎样去编写会话Bean和实体Bean,他们都是使用RMI,RMI是一种传统的、重量级的调用组件的方式
RMI有例如如下几点不足:
一、 性能:
RMIclient必须等待server的执行
二、 可靠性
当client调用时,server必须执行,假设server瘫痪或者网络瘫痪,client将不会执行
三、 支持多发送和接收者
RMI限制client和server单点会话,server和client之间不能多点广播
Messaging是一个server和client的中间人,它从消息提供商接收消息,而后为客户广播消息
异步程序:
性能方面:Messagingclient运行一个请求时不会被挂起
MOM:message-oriented middleware,面向消息的中间件
8.1.1 JMS(Java 消息服务)
JMS有两部分:
一、 API,需要编写发送和接收消息的的代码
二、 SPI,服务提供商接口
JMS承诺仅仅需学习JMS API一次,而后在不一样的MOM中重用你的代码
怎样保证消息被发送了呢?
MOM中间件把消息存放在文件或者数据库中,直到client收到消息,若client没有对应,消息将被重发
8.1.2 消息机制的域
几种方式:
1、公布和订阅方式
2、点到点方式
3、请求应答方式
8.1.3 Java消息服务API
JMS消息服务API比RMI更加复杂,需要熟悉很是多中不一样的接口才干编程
JMS编程模型:
一、 定位JMS驱动程序
需要訪问特定的JMS产品的驱动程序,此驱动程序称为链接工厂
二、 建立JMS链接
可以用链接工厂来得到链接
三、 建立JMS会话
JMS会话是链接和发送时可以使用的辅助对象
四、 定位JMS目的地
JMS目的地是发送消息或者接收消息所通过的通道
五、 建立JMS发生者或者JMS使用者
可以使用目的地和会话来生成发生者和使用者
六、 发送和接收消息
七、
API见javax.jms包
8.1.4 JMS与EJB的集成
什么是消息驱动的Bean?
消息驱动的Bean就是能接收JMS的特殊的EJB组件,消息驱动的Bean使用队列或者主题的消息
JMS是用来发送消息到消息驱动Bean的API
消息驱动Bean的特定:
一、 消息驱动Bean没有主接口、本地主接口、远程接口
二、 消息驱动Bean仅能接收来自JMS目的地的消息,仅有一种onMessage()方法
三、 消息驱动Bean不具备不论什么返回值
四、 消息驱动Bean不发送异常给客户
五、 消息驱动Bean是无状态的
六、 消息驱动Bean是可持久的
8.1.5开发消息驱动Bean
消息驱动的Bean是实现两个接口的类,这两个接口是:
一、 javax.jms.messageListener
实现onMessage()方法
二、 javax.ejb.MessageDriveBean
实现ejbCreate方法
开发消息驱动Bean比开发会话Bean和实体Bean要简单