EJB开发基础——EJB规范
1、EJB 容器
Enterprise Bean 是在称作 EJB 容器的特殊环境中运行的软件组件。容器容纳和管理 Enterprise Bean 的方式与 Java Web 服务器容纳 Servlet 或 HTML 浏览器容纳 Java Applet 的方式相同。Enterprise Bean 不能在 EJB 容器外部运行。EJB 容器在运行时管理 Enterprise Bean 的各个方面,包括远程访问 bean、安全性、持续、事务、并行性和资源的访问与合用。
EJB容器不允许客户机应用程序直接访问 Enterprise Bean。当客户机应用程序调用 Enterprise Bean 上的远程方法时,容器首先拦截调用,以确保持续、事务和安全性都正确应用于客户机对 bean 执行的每一个操作。容器自动为 bean 管理安全性、事务和持续,bean 开发人员不必将这种类型的逻辑写入 bean 代码本身中。Enterprise Bean 开发人员可以将精力集中于封装商业规则,而容器处理其它一切。
如同 Java Web 服务器管理许多 Servlet,容器同时管理许多 bean。为减少内存消耗和处理,容器合用资源并非常小心地管理所有 bean 的生命周期。当不使用某个 bean 时,容器将它放在池中以便另一个客户机重用,或者可能将它驱逐出内存,仅当需要时再将它调回内存。由于客户机应用程序不能直接访问 bean -- 容器位于客户机和 bean 之间 -- 因此客户机应用程序完全不知道容器的资源管理活动。
例如,未在使用的 bean 可能被驱逐出服务器内存,而它在客户机上的远程引用却丝毫不受影响。客户机在远程引用上调用方法时,容器只需重新实例化 bean 就可以处理请求。客户机应用程序并不知道整个过程。
Enterprise Bean 依赖容器来获取它的需求。如果 Enterprise Bean 需要访问 JDBC 连接或另一个 Enterprise Bean,那么它需要利用容器来完成此项操作;如果 Enterprise Bean 需要访问调用者的身份、获取它自身的引用或访问特性,那么它需要利用容器来完成这些操作。Enterprise Bean 通过以下三种机制之一与容器交互:回调方法、EJBContext 接口或 JNDI。
· 回调方法:
每个 bean 都会实现EJB接口的子类型,该接口定义了一些方法,称作回调方法。每个回调方法在 bean 的生命周期期间向它提示一个不同事件,当容器要合用某个 bean、将其状态存储到数据库、结束事务、从内存中除去该 bean 等操作时,它将调用这些方法来通知该 bean。回调方法可以让 bean 在事件之前或之后立即执行内部调整。
· EJBContext:
每个 bean 都会得到一个 EJBContext 对象,它是对容器的直接引用。EJBContext 接口提供了用于与容器交互的方法,因此那个 bean 可以请求关于环境的信息,如其客户机的身份或事务的状态,或者 bean 可以获取它自身的远程引用。
· Java 命名和目录接口 (JNDI):
JNDI 是 Java 平台的标准扩展,用于访问命名系统,如 LDAP、NetWare、文件系统等。每个 bean 自动拥有对某个特定命名系统(称作环境命名上下文 (ENC))的访问权。ENC 由容器管理,bean 使用 JNDI 来访问 ENC。JNDI ENC 允许 bean 访问资源,如 JDBC 连接、其它 Enterprise Bean,以及特定于该 bean 的属性。
2、 Enterprise Bean
为创建 EJB 服务器端组件,Enterprise Bean 开发人员提供了两个定义 bean 商业方法的接口,以及真正的 bean 实现类。然后客户机使用 bean 的公共接口来创建、操作 bean,以及从服务器除去 bean。实现类,将被称作 bean 类,在运行时被实例化,且成为分布式对象。
Enterprise Bean 存活在 EJB 容器中,客户机应用程序通过网络利用其远程和本地接口访问它们。远程和本地接口暴露了 bean 的能力,并提供了创建、更新、交互和删除 bean 所需的全部方法。bean 是一个服务器端组件,它表示一个商业概念。
Enterprise Bean的组成部分:
(1)企业级Bean类
(2) EJB对象
(3) Home对象
(4)本地接口
(5)部署描述
(6)供应商特有文件
(7)Ejb-jar文件
3、远程和本地接口
远程和本地接口表示 bean,但容器不允许从客户机应用程序直接访问 bean。每次请求、创建、或删除 bean 时,容器都会管理整个过程。
本地接口表示组件的生命周期方法(创建、破坏、查找),而远程接口表示 bean 的商业方法。
远程和本地接口分别扩展javax.ejb.EJBObject 和javax.ejb.EJBHome 接口。
这些 EJB 接口类型定义了一组标准的实用程序方法,并为所有远程和本地接口提供了常用基本类型。
客户机使用 bean 的本地接口来获取对 bean 的远程接口的引用。远程接口定义了诸如用于更改客户名称的读方法和写方法的商业方法,或用于执行任务的商业方法,如使用 HotelClerk bean 在旅馆预定房间。以下是如何从客户机应用程序访问 Customer bean 的示例。在这种情况下,本地接口是 CustomerHome 类型,而远程接口是 Customer 类型。
远程接口定义了 bean 的商业方法,这些方法特定于 bean 表示的商业概念。远程接口是从 javax.ejb.EJBObject 接口划分出的子类,而这个接口又是 java.rmi.Remote 接口的子类。现在,讨论商业方法及其含义。
远程接口定义了读方法和写方法,用于读取和更新有关商业概念的信息。这代表一种 bean,叫作实体 Bean,它表示持久商业对象(数据存储在数据库中的商业对象)。实体 Bean 表示数据库中的商业数据,并添加特定于该数据的行为。
在运行时,应用程序使用远程和本地接口访问 Enterprise Bean。本地接口允许应用程序创建或定位 bean,而远程接口允许应用程序调用 bean 的商业方法。
4、商业方法
商业方法还可以表示 bean 执行的任务。虽然实体 Bean 通常都会有面向任务的方法,但是任务通常代表另一种 bean,称作会话 Bean。会话 Bean 不表示类似于实体 Bean 的数据。它们表示执行服务(如在旅馆预定房间)的商业进程或代理程序。
有两种基本的 Enterprise Bean:实体 Bean,表示数据库中的数据,以及会话 Bean,表示进程或充当执行任务的代理程序。在构建 EJB 应用程序时,您会创建许多 Enterprise Bean,每一个都表示不同的商业概念。每个商业概念都将由实体 Bean 或会话 Bean 表示。您将根据如何使用商业概念来选择它将成为哪种 bean。
5、实体 Bean
对于每一个远程接口都有一个实现类,在远程接口中定义了真正实现商业方法的商业对象。这就是 bean 类;bean 的关键元素。
6、会话 Bean
HotelClerk bean 是一个会话 Bean,它在许多方面都类似于实体 Bean。会话 Bean 表示一组进程或任务,它将代表客户机应用程序执行这些进程或任务。会话 Bean 可以使用其它 bean 来执行任务或直接访问数据库。一小段代码就可以显示会话 Bean 能完成这两件事。
7、生命周期方法
除了远程接口,所有 bean 都还有一个本地接口。本地接口提供了用于创建、破坏和定位 bean 的生命周期方法。这些生命周期行为独立于远程接口,因为它们表示不特定于单个 bean 实例的行为。以下是 Customer bean 的本地接口的定义。它扩展了 javax.ejb.EJBHome 接口,而该接口扩展了 java.rmi.Remote 接口。
EJB技术是基于其它两项技术的:
Java RMI-IIOP和JNDI.
Java RMI-IIOPSHI是J2EE真正实现强大的网络功能的机制。它允许编写分布式对象,可以使对象在内存中,跨Java虚拟机和跨物理设备进行通信。
在Java中,RMI-IIOP不是执行远程方法调用的唯一选择,也可以使用Java远程方法调用(RMI)。
RMI是Java中实现远程方法调用的最初方式。RMI使用java.rmi包, RMI-IIOP同时使用java.rmi包和javax.rmi包。
JNDI是Java命名和目录接口,可以使用JNDI查找一台打印机的位置,也可以用它来定位一个对象或连接一个数据库。
JNDI被广泛用于EJB、RMI-IIOP、JDBC等,它是通过网络查询的标准方法。
EJB开发基础——EJB规范的更多相关文章
- [置顶] Objective-C ,ios,iphone开发基础:命名规范
命名规范:http://bukkake.iteye.com/blog/695492 点击打开链接
- EJB开发第一个无状态会话bean、开发EJBclient
开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与client交互,是编写业务逻辑的地方.在会话bean中能够通过JDBC直接操作数据库.但大多数 ...
- EJB开发第一个无状态会话bean、开发EJB客户端
开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...
- EJB开发第一期---EJB开发配置
一.EJB 3.0简介 1.1 什么是EJB Enterprise JavaBeans是一个用于分布式业务应用的标准服务端组件模型.采用Enterprise JavaBeans架构编写的应用是可伸缩的 ...
- 【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)
之前一直用的EJB开发环境是他们搭建好的,直接拿来用,不过还是感觉老吃别人嚼好的不太好吃,所以自己动手来玩一玩. EJB开发依赖的最基本的环境:JDK.Eclipse.JBoss,这里简单介绍一下最基 ...
- (2.15)Mysql之SQL基础——开发设计最佳规范
(2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...
- EJB3.0 EJB开发消息驱动bean
(7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个 ...
- JavaEE开发基础
1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, Enterprise E ...
- [转]JavaEE开发基础
JavaEE开发基础 1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, E ...
随机推荐
- 创建cube 维度层次
http://blog.programmingsolution.net/ssas-2008/period-dimension-time-dimension-creation-with-year-mon ...
- zz 堆空间与栈空间
http://blog.sina.com.cn/s/blog_7321be1101013aua.htmlhttp://soft.chinabyte.com/os/51/12324551.shtmlht ...
- ElasticSearch基础之映射mapping
[01]什么是mapping? 首先去看看官方文档,非常重要:https://www.elastic.co/guide/en/elasticsearch/reference/current/mappi ...
- CString和CStringA之间的转换
使用UNICODE字符集编程时,总是需要使用那些不支持UNICODE的库,例如sqlite3,Lua等必须使用char*类型的.这个时候用CStringA是最好的. 另外CStringA与CStrin ...
- 3D max模型导入unity 3D中注意事项
一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. ...
- [Xcode 实际操作]九、实用进阶-(13)调用相机并获取拍摄后的图片
目录:[Swift]Xcode实际操作 本文将演示如何调用相机并获取拍摄后的图片. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首 ...
- Cannot convert value '0000-00-00 00:00:00' TIMESTAMP
MySql Timestamp 类型的字段 '0000-00-00 00:00:00' 转换成Java Timestamp 时会抛出 Cannot convert value '0000-00-00 ...
- ZOJ 4019 Schrödinger's Knapsack (from The 18th Zhejiang University Programming Contest Sponsored by TuSimple)
题意: 第一类物品的价值为k1,第二类物品价值为k2,背包的体积是 c ,第一类物品有n 个,每个体积为S11,S12,S13,S14.....S1n ; 第二类物品有 m 个,每个体积为 S21,S ...
- for(;;)
for(;;)就是一个for循环,只是循环的条件没有写到for语句当中,退出条件在for循环体内,要不就是死循环.
- js模拟冒泡排序动态图(1轮)
代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...