EJB学习笔记

来源:互联网 发布:手机镜头 知乎 编辑:程序博客网 时间:2024/05/17 09:08

J2EE

1 J2ee概述

 

J2ee是企业级的计算平台,它为分布式和基于组件的软件开发提供了一个“操作系统”

 

Ant是什么工具??

 

EJB

什么是EJB

是一种服务器端组件结构,简化了开发分布式企业级程序的过程

类比:应用服务器是一个CD播放器,而组件是一张cd,因为有了cd标准,任何cd播放器都能播放cd

EJB分为两个部分:

1、  规范

列出了组件与应用服务器之间相互约定的规则

2、  一组java接口

组件和服务器都应该

Java bean ejb的区别?

Javabean只是一个含有get/setjava类,javabean是不能部署的

 

EJB中的角色分工:6种分工

1、  bean供应商:编写组件

2、  应用系统组装商:整个系统的架构师,组织组件协同工作

3、  EJB系统部署员:了解各种运行环境,知道怎么样在服务器中部署bean

4、  系统管理员:维护和监控已经部署好的系统

5、  容器和服务器提供商:如weblogicwebsphere等等

6、  工具供应商:JbuilderwsadJuintant等等

 

2 EJB基础

 

EJB技术是基于RMIJNDI的,学习之前应了解这两项技术

一个企业级BEAN是一个可以在分布式环境中部署的服务器端软件组件,一个EJB可能是由一个或者多个java对象组成,Bean用户不必关系组件的组成,它们只和组件的接口打交道。

21 企业Bean

Bean类型:

1、  会话Bean

模拟商务过程对象,就像动词一样,执行动作

2、  实体Bean

模拟商务数据对象,就像名词一样,如产品、订单等等数据库对象

3、  消息驱动Bean

与会话Bean类似,也是代表动作,只能通过消息来调用它们

 

22 分布式对象:EJB基础

23 分布式对象和中间件

24 企业级Bean的组成部分

241 Enterprise Bean

所有的Ejb类都必须实现的接口是:javax.ejb.EnterpriseBean

所有的会话bean都必须实现javax.ejb.SessionBean接口

所有的实体bean都必须实现javax.ejb.EntityBean接口

所有的消息驱动bean都必须实现javax.ejb.MessageDriveBean接口

242 EJB对象

◆远程接口(Remote接口):

        EJB对象必须clone bean类的每个公开的商务方法,bean供应商编写了一个特殊的接口,该接口复制对应的bean类的所有公开的商务方法,该接口称为远程接口(Remote接口)

        所有的Remote接口必须来源于javax.ejb.EJBObject

 

客户端不能直接调用EJB,客户端调用的是EJB对象,而不是调用Bean,是 客户端 -》EJB对象 -》EJB

什么是EJB对象?

EJB对象把所有的客户端请求都传递给bean,是一种代理对象,具有网络功能,EJB对象把客户端和Bean连接在一起

 

243 Home对象

客户端是通过EJB对象调用Bean的,那么,客户端是如何调用得到EJB对象的引用的呢?

就是通过Home对象来引用EJB对象的

EJB对象的制造生成库

功能:

        生成EJB对象

        查找现存的EJB对象

        删除EJB对象

 

Home接口:

Home对象、EJB对象、Bean实例之间的关系??

244 本地接口

由于Home接口生成Bean的速度是非常慢的

可以通过本地对象快速、高效的调用企业级Bean,而不是通过EJB对象调用,本地对象实现本地接口,而不是远程接口

EJB对象:请求拦截器

远程接口:请求拦截器上的接口

Home对象:制造生成库

Home接口:制造生成库接口

245 部署描述

       必须在部署文件中声明组件对中间件服务的要求,例如,使用部署描述来声明:

1、  Bean的管理和生命周期要求:指明EJB容器应该怎么管理这些Bean

2、  持久性要求:是自己处理持久性还是委托容器处理持久性问题

3、  事务处理要求:

4、  安全性要求:

EJB的部署描述是一个XML文件,Bean的提供商负责描述部署文件

 

246 供应商特有文件

 

 

247 EJB-JAR文件

Bean类、Home接口、Remote接口以及部署文件一旦生成,就可以打包成EJB-JAR文件了

 

 

 

3 编写第一个Bean

 

 

 

 

31 如何开发EJB组件

开发一个EJB组件,一般遵循如下步骤:

1、  编写Beanjava文件、组件接口、home接口、EJB class文件

2、  编写部署描述附

3、  编写java文件到.CLASS文件中

4、  使用工具生成ejb-jar文件

5、  发布ejb-jar文件

6、  配置EJB服务器,可能需要调整数据库连接、缓冲池等等

7、  开启EJB服务器

8、  测试

 

311 Remote接口

Remote接口复制我们要暴露的每一个业务方法,注意两点:

1、  该接口继承自javax.ejb.EJBObject,必须实现EJBObject接口所要求的几个方法,如:remove等等

2、  必须编写实际的业务代码

 

产生hello.java文件,继承自javax.ejb.EJBOjbect

 

312 本地接口

本地客户端将会使用本地接口而不是remote接口,本地接口和remote接口有微小的区别

 

产生HelloLocal.java文件,继承自javax.ejb.EJBLocalObject

312 Home接口

 

Home接口拥有CreateDestroy EJB对象的方法。由Home对象执行Home接口

Home接口注意以下几点:

1、  Create方法通常用于对EJB对象的引用,Create方法也通常用于初始化Bean

 

要传递创建Bean时的参数,需要覆盖Home接口的create方法,并且要与Bean对应

 

产生HelloHome.java文件,继承自javax.ejb.EJBHome

313 Local Home 接口

Local Home接口比Home接口有更高的性能

 

产生HelloLocalHome.java文件,继承自javax.ejb.EJBLocalHome

 

314 Bean

例如:Bean类包含javax.ejb.SessionBean接口,必须实现该接口定义的几个方法,如:ejbActivate()ejbPassivate()ejbRemove()setSessionContext等方法

 

产生HelloBean.java文件,实现javax.ejb.SessionBean接口

 

EJBContext:通向容器的途径

容器通过setSessionContext方法将beancontext对象关联起来

 

315 部署描述附

部署描述附是一个xml文件

部署描述文件是对前面描述的Remote接口、本地接口、Home接口、LocalHome接口、Bean类的总体描述!!

 

316 EJB-JAR文件

打包以上所有文件

 

317 部署Bean

部署步骤:

1、  核对EJB-JAR文件

2、  EJB容器提供的工具生成EJB对象和Home对象

3、  EJB容器提供的工具生成任何必须的RMI存根和骨架

 

318 如何调用Bean

现在开始讨论客户端的代码,一般都使用基于RMI的客户端,使用JAVA命名和JNDI在网络中查找对象

代码的特点如下:

1、  查找Home对象

EJB的位置透明:

       通过目录服务,应用程序代码不依赖于特定的机器名字和物理位置,使得编写的代码可以移植。

什么是JNDI

       JNDI提供标准接口用于定位用户、机器、网络、对象等,例如,可以使用JNDI定位内部网络中的打印机,也可以定位JAVA对象及连接数据库。在EJB中,JNDI用于查找Home对象

 

JNDI如何定位Home对象?

客户端使用别名来确认所想要的Home对象

 

JNDI有两个属性必须设置:

1、  上下文生成库的名字

2、  提供者的URL地址

 

2、  使用Home对象创建EJB对象

3、  调用EJB对象的商务方法

4、  从内存中清除EJB对象

 

 

4 Session Bean

 

Session BeanEntity Bean的一个显著的区别是:Session Bean的生命周期比较短

 

41 Session的子类型

411 状态会话Bean

一个商务过程包含很多步骤而且持续很久时,需要使用有状态的Session Bean,在每个方法之间都要保存一种状态(有事务的概念)

412 无状态会话Bean

       一个商务过程只需要一次请求对话,一个方法调用完成之后,该bean可能被销毁。

为了得到更高的性能你应该选择无状态会话Bean

42 状态Bean的特征

 

421状态Session Bean的调度原则:

       内存中只有几个有限的Bean实例,EJB容器采用LRU算法钝化策略

 

422对话状态遵从的原则:

       EJB容器钝化Bean对象时,使用对象序列化将对象转换成比特流,写入硬盘

容器必须保留在钝化和激活过程中成员变量先前的值

 

423 激活/钝化回调方法:

了解Bean钝化和激活的过程中发生了什么??

       使用ejbPassivate方法钝化,该方法告知bean,它所保留的对话状态即将被交换出去,并且让Bean释放一些如数据库连接、套接字等。

 

钝化的时机:

客户端调用bean对象时,内存中不存在该对象,且EJB容器的缓存区已满,此时,EJB容器在处理请求之前必须钝化一个Bean

      

激活:

       调用ejbActivate,序列号的对象的状态被读会内存

 

42 一个简单的状态会话Bean

 

42 会话Bean的生命周期图表

 

 

5 实体Bean

51持久的概念

511 Java对象序列号

将对象持久化到物理存储空间中去

 

512 对象-关系映射(ORMAP

目前一般手工完成ORMAP

 

513 对象数据库

Java本身做为对象被完整的存储,没有ormap映射层

对象查询语言:OQL

目前对象数据库的应用并不广泛

 

52 什么是实体Bean

实体Bean

内存中一个实体的持久数据的Java表现形式

实体Bean类包含的文件:

       包括远程接口、Home接口、企业Bean、部署描述符等等

与其他Bean的差别:

1、  实体Bean类映射一个数据库模式中的实体定义

2、  实体Bean类有主键类

 

53 实体Bean的特征

特征:

1、  实体Bean是永久存在的

2、  实体Bean实例是一个对应到数据库中的视图

更新实体Bean的同时数据库会自动被更新

EJB容器通过调用Beanejbloadejbstore方法在java对象和数据库之间来回的传送数据

3、  几个实体Bean可能代表同一底层数据

4、  实体Bean可能收集再利用

5、  保存实体Bean的两种方法

BMPBean管理持久,组件开发者必须编写代码将内存中的字段转换成数据库中的字段,实体Bean可以通过JDBC执行Insert/Delete语句

CMP:容器管理持久,可以通过容器完成持久化操作,容器为您生成数据库访问的代码,容器自动生成Insert/Delete方法。

6、  实体的创建和删除

 

 

6 编写Bean管理的实体Bean

编写Bean管理的实体Bean时,您必须自己编写数据访问逻辑

 

61实体Bean编程基础

查询已存在的实体BeanejbFind()

(在J2EE1.4SDK中怎么没有ejbFind这个方法呢??)

       该方法用于在存储空间中查询一个已存在的实体Bean

 

7 编写容器管理的实体Bean

 

8 消息驱动Bean

 

这一章我们将会学习messaging,是一种轻量级的通讯方式,它在许多场景下比RMI更合适

将会讨论:

1、  messaging的简介,包括异步的预览和面向消息的中间件

2、  JMS的大纲,消息驱动的Bean是依靠JMS

3、  消息驱动Bean的特性

4、  消息驱动Bean与实体BeanSessionBean的比较

5、  如何开发消息驱动的Bean

 

81 为什么要使用消息驱动的Bean

在前面的章节中学习了如何去编写会话Bean和实体Bean,他们都是使用RMIRMI是一种传统的、重量级的调用组件的方式

RMI有如下几点不足:

1、  性能:

RMI客户端必须等待服务器的运行

2、  可靠性

当客户端调用时,服务器必须运行,如果服务器瘫痪或者网络瘫痪,客户端将不会执行

3、  支持多发送和接收者

RMI限制客户端和服务器单点会话,服务器和客户端之间不能多点广播

 

Messaging是一个服务器和客户端的中间人,它从消息提供商接收消息,然后为客户广播消息

异步程序:

 

性能方面:Messaging客户端执行一个请求时不会被挂起

MOMmessage-oriented middleware,面向消息的中间件

 

811 JMSJava 消息服务)

JMS有两部分:

1、  API,需要编写发送和接收消息的的代码

2、  SPI,服务提供商接口

 

JMS承诺只需学习JMS API一次,然后在不同的MOM中重用你的代码

 

如何保证消息被发送了呢?

       MOM中间件把消息存放在文件或者数据库中,直到客户端收到消息,若客户端没有相应,消息将被重发

 

812 消息机制的域

几种方式:

1、发布和订阅方式

2、点到点方式

3、请求应答方式

 

813 Java消息服务API

JMS消息服务APIRMI更加复杂,需要熟悉很多中不同的接口才能编程

JMS编程模型:

1、  定位JMS驱动程序

需要访问特定的JMS产品的驱动程序,此驱动程序称为连接工厂

2、  创建JMS连接

可以用连接工厂来获得连接

3、  创建JMS会话

JMS会话是连接和发送时可以使用的辅助对象

4、  定位JMS目的地

JMS目的地是发送消息或者接收消息所经过的通道

5、  创建JMS发生者或者JMS使用者

可以使用目的地和会话来生成发生者和使用者

6、  发送和接收消息

 

7、 

 

 

APIjavax.jms

 

814 JMSEJB的集成

什么是消息驱动的Bean

消息驱动的Bean就是能接收JMS的特殊的EJB组件,消息驱动的Bean使用队列或者主题的消息

JMS是用来发送消息到消息驱动BeanAPI

消息驱动Bean的特定:

1、  消息驱动Bean没有主接口、本地主接口、远程接口

2、  消息驱动Bean仅能接收来自JMS目的地的消息,仅有一种onMessage()方法

3、  消息驱动Bean不具有任何返回值

4、  消息驱动Bean不发送异常给客户

5、  消息驱动Bean是无状态的

6、  消息驱动Bean是可持久的

 

815开发消息驱动Bean

 

消息驱动的Bean是实现两个接口的类,这两个接口是:

1、  javax.jms.messageListener

实现onMessage()方法

2、  javax.ejb.MessageDriveBean

实现ejbCreate方法

开发消息驱动Bean比开发会话Bean和实体Bean要简单

 

原创粉丝点击