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规范的更多相关文章

  1. [置顶] Objective-C ,ios,iphone开发基础:命名规范

    命名规范:http://bukkake.iteye.com/blog/695492  点击打开链接

  2. EJB开发第一个无状态会话bean、开发EJBclient

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与client交互,是编写业务逻辑的地方.在会话bean中能够通过JDBC直接操作数据库.但大多数 ...

  3. EJB开发第一个无状态会话bean、开发EJB客户端

    开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下 ...

  4. EJB开发第一期---EJB开发配置

    一.EJB 3.0简介 1.1 什么是EJB Enterprise JavaBeans是一个用于分布式业务应用的标准服务端组件模型.采用Enterprise JavaBeans架构编写的应用是可伸缩的 ...

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

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

  6. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

  7. EJB3.0 EJB开发消息驱动bean

    (7)EJB3.0 EJB开发消息驱动bean JMS 一: Java消息服务(Java Message Service) 二:jms中的消息 消息传递系统的中心就是消息.一条 Message 由三个 ...

  8. JavaEE开发基础

    1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, Enterprise E ...

  9. [转]JavaEE开发基础

    JavaEE开发基础 1 JavaEE简介 Java平台有三个版本,分别是JavaSE(Java Platform, Standard Edition),JavaEE(Java Platform, E ...

随机推荐

  1. 洛谷 - P5429 - Fence Planning - 并查集

    https://www.luogu.org/problemnew/show/P5429 很明显是要维护整个连通块的共同性质,并查集一搞就完事了. #include<bits/stdc++.h&g ...

  2. POJ3697【BFS】

    题意: n个点的完全图,删掉m条边以后,求与1联通的点的个数. 思路: 直接判断 遍历图,n(n+1)/2=5e7 复杂度n^2......,哦,这样也行... //#include<bits/ ...

  3. ZOJ3158 【DFS】

    题意: 从上往下切割,不能切边缘,然后问你两个差值,要小于给出的值. 思路: 直接爆搜,枚举每一行的劈开位置: #include<bits/stdc++.h> using namespac ...

  4. mongodb 由于计算机死机造成的无法启动故障

    一次计算机死机,重启后,mongodb无法启动,log显示: exception in initAndListen: 12596 old lock file, terminating Sun Mar ...

  5. nginx 的启动、停止与重启

    详解 ./nginx #打开 nginx nginx -s reload|reopen|stop|quit #重新加载配置|重启|停止|退出 nginx nginx -t #测试配置是否有语法错误 n ...

  6. PHP不重新编译,单独添加模块扩展的方法

    php自身提供了很多扩展,比如curl,gmp, mbstring等.我们在编译安装php时未必安装了所有扩展.那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢? 我们以curl扩展模 ...

  7. 解读ping -n 4 127.1 >nul 2>nul

    命令解读 ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可以检查网络是否连通,可以很好 ...

  8. c# 参数传递问题(形参与实参)

    形参是指被调用方法中的参数 实参是指传递给方法的参数 (1)值类型传参是按值传递 值类型传参,形参接受到的是实参的一个副本,即形参发生变化,实参不会发生任何变化 (2)引用类型参数按值传递 当参数传递 ...

  9. bzoj1492 [NOI2007]货币兑换Cash【cdq分治】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1492 推荐博客:http://www.cnblogs.com/zig-zag/archive ...

  10. python入门之数据类型之字符串

    str方法 name.capitalize() 将name的首字母大写 name.center(20,'*') 将name居中,长度变为20,其余用*填充 name.count('chy') 返回na ...