1 J2ee概述

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

Ant是什么工具??

EJB:

什么是EJB?

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

类比:应用server是一个CD播放器,而组件是一张cd,由于有了cd标准,不论什么cd播放器都能播放cd

EJB分为两个部分:

1、 规范

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

2、 一组java接口

组件和server都应该

Java bean 与ejb的差别?

Javabean仅仅是一个含有get/set的java类,javabean是不能部署的

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

1、 bean供应商:编写组件

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

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

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

5、 容器和server提供商:如weblogic、websphere等等

6、 工具供应商:Jbuilder、wsad、Juint、ant等等

2 EJB基础

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

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

2.1 企业Bean

Bean类型:

1、 会话Bean

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

2、 实体Bean

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

3、 消息驱动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 部署描写叙述

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

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

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

3、 事务处理要求:

4、 安全性要求:

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

2.4.6 供应商特有文件

2.4.7 EJB-JAR文件

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

3 编写第一个Bean

3.1 怎样开发EJB组件
开发一个EJB组件,一般遵循例如以下步骤:
1、 编写Bean的java文件、组件接口、home接口、EJB class文件
2、 编写部署描写叙述附
3、 编写java文件到.CLASS文件里
4、 使用工具生成ejb-jar文件
5、 公布ejb-jar文件
6、 配置EJBserver,可能须要调整数据库连接、缓冲池等等
7、 开启EJBserver
8、 測试

3.1.1 Remote接口
Remote接口复制我们要暴露的每个业务方法,注意两点:
1、 该接口继承自javax.ejb.EJBObject,必须实现EJBObject接口所要求的几个方法,如:remove等等
2、 必须编写实际的业务代码

产生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接口注意下面几点:
1、 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类
比如:Bean类包括javax.ejb.SessionBean接口,必须实现该接口定义的几个方法,如:ejbActivate()、ejbPassivate()、ejbRemove()、setSessionContext等方法

产生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
部署步骤:
1、 核对EJB-JAR文件
2、 用EJB容器提供的工具生成EJB对象和Home对象
3、 用EJB容器提供的工具生成不论什么必须的RMI存根和骨架

3.1.8 怎样调用Bean
如今開始讨论client的代码,一般都使用基于RMI的client,使用JAVA命名和JNDI在网络中查找对象
代码的特点例如以下:
1、 查找Home对象

EJB的位置透明:

       通过文件夹服务,应用程序代码不依赖于特定的机器名字和物理位置,使得编写的代码能够移植。

什么是JNDI

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

JNDI怎样定位Home对象?
client使用别名来确认所想要的Home对象

JNDI有两个属性必须设置:
1、 上下文生成库的名字
2、 提供者的URL地址

2、 使用Home对象创建EJB对象
3、 调用EJB对象的商务方法
4、 从内存中清除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的区别:
1、 实体Bean类映射一个数据库模式中的实体定义
2、 实体Bean类有主键类

5.3 实体Bean的特征
特征:
1、 实体Bean是永久存在的
2、 实体Bean实例是一个相应到数据库中的视图
更新实体Bean的同一时候数据库会自己主动被更新
EJB容器通过调用Bean的ejbload和ejbstore方法在java对象和数据库之间来回的传送数据
3、 几个实体Bean可能代表同一底层数据
4、 实体Bean可能收集再利用
5、 保存实体Bean的两种方法
BMP:Bean管理持久,组件开发人员必须编写代码将内存中的字段转换成数据库中的字段,实体Bean能够通过JDBC运行Insert/Delete语句
CMP:容器管理持久,能够通过容器完毕持久化操作,容器为您生成数据库訪问的代码,容器自己主动生成Insert/Delete方法。
6、 实体的创建和删除

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

6.1实体Bean编程基础
查询已存在的实体Bean:ejbFind()
(在J2EE1.4SDK中怎么没有ejbFind这种方法呢??)
       该方法用于在存储空间中查询一个已存在的实体Bean

7 编写容器管理的实体Bean

8 消息驱动Bean

这一章我们将会学习messaging,是一种轻量级的通讯方式,它在很多场景下比RMI更合适
将会讨论:
1、 对messaging的简单介绍,包含异步的预览和面向消息的中间件
2、 JMS的大纲,消息驱动的Bean是依靠JMS
3、 消息驱动Bean的特性
4、 消息驱动Bean与实体Bean和SessionBean的比較
5、 怎样开发消息驱动的Bean

8.1 为什么要使用消息驱动的Bean
在前面的章节中学习了怎样去编写会话Bean和实体Bean,他们都是使用RMI,RMI是一种传统的、重量级的调用组件的方式
RMI有例如以下几点不足:
1、 性能:
RMIclient必须等待server的执行
2、 可靠性
当client调用时,server必须执行,假设server瘫痪或者网络瘫痪,client将不会执行
3、 支持多发送和接收者
RMI限制client和server单点会话,server和client之间不能多点广播

Messaging是一个server和client的中间人,它从消息提供商接收消息,然后为客户广播消息
异步程序:

性能方面:Messagingclient运行一个请求时不会被挂起
MOM:message-oriented middleware,面向消息的中间件

8.1.1 JMS(Java 消息服务)
JMS有两部分:
1、 API,须要编写发送和接收消息的的代码
2、 SPI,服务提供商接口

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

怎样保证消息被发送了呢?
       MOM中间件把消息存放在文件或者数据库中,直到client收到消息,若client没有对应,消息将被重发

8.1.2 消息机制的域
几种方式:
1、公布和订阅方式
2、点到点方式
3、请求应答方式

8.1.3 Java消息服务API
JMS消息服务API比RMI更加复杂,须要熟悉非常多中不同的接口才干编程
JMS编程模型:
1、 定位JMS驱动程序
须要訪问特定的JMS产品的驱动程序,此驱动程序称为连接工厂
2、 创建JMS连接
能够用连接工厂来获得连接
3、 创建JMS会话
JMS会话是连接和发送时能够使用的辅助对象
4、 定位JMS目的地
JMS目的地是发送消息或者接收消息所经过的通道
5、 创建JMS发生者或者JMS使用者
能够使用目的地和会话来生成发生者和使用者
6、 发送和接收消息

7、

API见javax.jms包

8.1.4 JMS与EJB的集成
什么是消息驱动的Bean?
消息驱动的Bean就是能接收JMS的特殊的EJB组件,消息驱动的Bean使用队列或者主题的消息

JMS是用来发送消息到消息驱动Bean的API

消息驱动Bean的特定:
1、 消息驱动Bean没有主接口、本地主接口、远程接口
2、 消息驱动Bean仅能接收来自JMS目的地的消息,仅有一种onMessage()方法
3、 消息驱动Bean不具有不论什么返回值
4、 消息驱动Bean不发送异常给客户
5、 消息驱动Bean是无状态的
6、 消息驱动Bean是可持久的

8.1.5开发消息驱动Bean

消息驱动的Bean是实现两个接口的类,这两个接口是:
1、 javax.jms.messageListener
实现onMessage()方法
2、 javax.ejb.MessageDriveBean
实现ejbCreate方法
开发消息驱动Bean比开发会话Bean和实体Bean要简单

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EJB学习笔记的更多相关文章

  1. 【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

    之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩. EJB开发依赖的最基本的环境:JDK.Eclipse.JBoss,这里简单介绍一下最基 ...

  2. EJB学习笔记之十(BMT事务和CMT事务)

     1.前言 前两篇博客主要介绍了与事务相关的知识.比如事务的一些特性,以及并发产生的问题.本篇来解说一下EJB中两种处理事务的方式.一种是以生命式方式来管理事务(CMT):还有一种则是在EJB内部使用 ...

  3. EJB学习笔记六(EJB中的拦截器)

     1.前言 听到拦截器,预计都不陌生,尤其是在Servlet规范中,充分应用了拦截器的概念.EJB3也提供了拦截器的支持,本质上是轻量级的AOP实现.拦截器能够将多个业务方法中的通用逻辑从业务方法中抽 ...

  4. [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. ETHREAD APC 《寒江独钓》内核学习笔记(4)

    继续学习windows 中和线程有关系的数据结构: ETHREAD.KTHREAD.TEB 1. 相关阅读材料 <windows 内核原理与实现> --- 潘爱民 2. 数据结构分析 我们 ...

  6. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  7. Hibernate 马士兵 学习笔记 (转)

    目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...

  8. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  9. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

随机推荐

  1. 百度词典搜索_dress code

    百度词典搜索_dress code dress code n.着装标准

  2. Cocos2dx 3.0 过渡篇(二十六)C++11多线程std::thread的简单使用(上)

    昨天练车时有一MM与我交替着练,聊了几句话就多了起来,我对她说:"看到前面那俩教练没?老色鬼两枚!整天调戏女学员."她说:"还好啦,这毕竟是他们的乐趣所在,你不认为教练每 ...

  3. C# 开发Chrome内核浏览器(WebKit.net)

    原文地址:http://www.cnblogs.com/linyijia/p/4045333.html

  4. 使用注解实现 bean 转 csv

    csv 文件是 aaa,bbb,ccc aaa,bbb,ccc 保存 这里的要求是 List<T> 线性表的类型 转换成 类别似 html 中 table的格式,即第一行是 head 后面 ...

  5. Service组件 总结 + 绑定理Service三种实现方式 Messager + Binder + AIDL

    在Android中进程按优先级可以分为五类,优先级从高到低排列: - 前台进程 该进程包含正在与用户进行交互的界面组件,比如一个Activity - 可视进程 该进程中的组件虽然没有和用户交互,但是仍 ...

  6. 初识Mongodb之[CURD]-PHP版

    行动 在了实践之前,希望大家看一下上面的学习资源,了解一下基本操作. 数据连接初始账号password 账号:admin password:admin 首先我们建立一个文件:mongodb.php,设 ...

  7. VS调试技巧之附加进程

    用过VS一段时间的程序猿们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动VS自带的简版IIS作为server启动,进而开启浏览器,最后进行对应的操 ...

  8. HDU1071 The area 【积分】

    The area Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. hdu4585 &amp; BestCoder Round #1 项目管理(vector应用)

    主题链接:pid=4858">http://acm.hdu.edu.cn/showproblem.php?pid=4858 项目管理 Time Limit: 2000/1000 MS ...

  10. python学习笔记之八:迭代器和生成器

    一. 迭代器 在前面的笔记中,已经提到过迭代器(和可迭代),这里会对此进行深入讨论.只讨论一个特殊方法---__iter__,这个方法是迭代器规则的基础. 1.1 迭代器规则 迭代的意思是重复做一些事 ...