持久化对象:有关EJB的持久化对象技术分析

  表格型关系型数据库和树型Java对象的间映射问题是个至今争论不休问题好在现在已经有了些好解决方案在本文中我们将介绍EJB技术是怎样用自已特定方式来解决这个问题
  只要是涉及到保存及查询信息 那绝大多数应用都需要和关系数据库打交道但由于关系数据库和Java对象在结构上有着本质区别有关它们的间映射关系对于那些Java开发者们来说个很令人头痛问题关系型数据库是以表格方式存储数据而Java对象是以树型方式表现这种类型上不匹配引发了各种各样对象持久化解决方案用来缩小关系世界和对象世界的间鸿沟EJB框架正是这种解决方案的
  对象持久性
  目前有很多区别工具出现使得开发人员可以将JAVA对象转化为数据库中字段或记录或者将数据库中字段或记录还原为JAVA对象这些处理涉及到要将树型JAVA对象序列化到数据库中反的亦然此工作核心是怎样在保证最小性能损失前提下来完成这项工作
  EJB框架提供了这样个对象持久化机制我们将在本文中讨论这种机制但首先我们还是对EJB构架作个全面认识
  企业级JavaBeans(EJB)
  EJB技术可以这样定义:它是个基于JAVA服务端为分布式应用提供个可复用组件框架所有商业逻辑、部署定义、对象持久性都由这个框架统管理EJB框架些特色如下:
  · EJB是种运行在服务端环境下JAVA对象
  · EJB能分布在区别机器上进行远程访问但对客户端来而言EJB和本地JavaBean样方便
  · EJB容器对EJB进行统管理
  尽管企业级JavaBean名字和普通JavaBean在命名上有些相像但它们在设计上有着本质上区别为了能让你更清楚地认识到这点我们最好先了解下EJB基本概念、几种EJB组件模式和其配置环境
  EJB运行环境
  从本质上来说EJB只是实现了特定接口普通JAVA对象但这个对象必须运行在个特定环境:EJB容器中如果脱离了EJB容器EJB是无法运行EJB和EJB容器的间关系有时候被称为"反向"――或者叫"好莱坞原理"(别联系我到时候我会给你打电话)
  EJB容器是种用来管理EJB运行时环境它容纳并管理区别类型EJB这和JAVA servlet容器管理servlet有些类似EJB容器负责化EJB并给其提供系统级服务
  当客户端个EJB时并不直接和EJB打交道客户端和EJB被容器隔离起来
  EJB容器提供服务
  当开发者创建系列类和接口用来组成个EJB时容器会为他们提供如下系统级服务:
  · 事务处理
  · 安全管理
  · EJB持久化管理
  · EJB远程访问
  · EJB生命周期管理
  · 数据库连接池
  · EJB例子池管理
  由于EJB容器负责为EJB提供这种底层服务使得个EJB开发者只需关注具体应用商业逻辑从而减少了很多不必要麻烦
  EJB类型
  EJB规范标准定义了以下 3种区别类型EJB类型:
  · 消息驱动EJB(MDB)
  · 会话EJB
  · 实体EJB
  当客户端和会话EJB或实体EJB交互时它们通信方式是同步通信而消息驱动EJB(MDB)则只和JMS进行交互它相当于JMS中个发布/订阅主题
  消息驱动EJB
  消息驱动EJB工作在异步通信模式下个消息驱动EJB充当个消息侦听者角色它侦听从JMS发布/订阅主题中传来消息
  EJB容器管理着消息驱动EJB生命周期然而和会话EJB和实体EJB区别的处在于客户端并不能直接思路方法消息驱动EJB是通过个名为onMessage回调来接收客户端消息
  会话EJB
  会话EJB特点是不能同时被多个客户端共享当客户端会话EJB思路方法时先经过EJB容器处理然后再由容器对会话EJB进行会话EJB处理开发者编写商业逻辑容器再将处理结果返回给客户端会话EJB不能在多个会话中持久保存它分为两种类型:有状态会话EJB和无状态会话EJB
  有状态会话EJB
  当个客户端和某个有状态会话EJB开启个会话时这个EJB为客户端维护了个会话状态这暗示着客户端向此EJB发出区别请求的间保证EJB成员变量值不会丢失
  旦客户端结束和有状态会话EJB交互后EJB容器会自动销毁它于是整个会话结束并且此有状态会话EJB所保存状态数据会全部丢失
  无状态会话EJB
  无状态会话EJB并不为客户端保存任何状态数据你可以这样认为:客户端每次对无状态会话EJB都会产生个新EJB例子因此所有状态信息都不会保存 同样EJB容器也不会持久化任何无状态会话EJB因此开发者必须意识到客户端和无状态会话EJB的间进行交互时所有状态数据都是临时无状态会话EJB这种特性使得容器可以重复地使用它例子因此无状态会话EJB能得到比有状态会话EJB更好性能
  实体EJB
  实体EJB表达种持久存储商业逻辑通常存储于关系型数据库中实体EJB和关系型数据库有如下相似的处:
  · 实体EJB是持久――它可以在应用生命周期的外存在甚至可以在EJB容器生命周期以外存在
  · 实体EJB允许共享访问――多个客户端可以共享同个实体EJB而容器负责管理它们的间同步
  · 实体EJB有主键――主键用来确定实体EJB个唯例子利用它可以找到个特定持久化实体
  · 实体EJB有事务概念――由于客户端能并发访问并修改它数据因此事务管理是非常重要事务管理属性被显示地定义在部署描述文件中而容器负责管理事务边界
  要实现对象-关系映射那实体EJB必须能提供插入、更新、查询、删除操作而用于管理实体EJB对象和数据源的间映射过程被称为持久化换句话说持久化是个将信息写入外部数据源个过程EJB规范标准定义了实体EJB两种持久化方式:Bean自身管理持久化(BMP)和容器管理持久化(CMP)
  Bean自身管理持久化(BMP)
  如果你选用BMP那你必须在你代码中负责维护所有持久化发那么所有数据层访问代码都必须由开发者来完成这种方式能带给开发者更大灵活性
  容器管理持久化(CMP)
  如果你选用CMP那你不用编写数据层访问代码EJB容器将会为你管理所有持久化因此数据层访问代码和数据源的间是松耦合这能减轻开发者代码编写量并且使得CMP能部署到区别厂商应用服务器中也不必关心具体数据源(参见图1)
   }
  }
 }
 catch (NamingException e)
 {
  .err.prln(e.toString);
 }
 catch (FinderException e)
 {
  .err.prln(e.toString);
 }
  users;
}


  由于Java树型对象和表格型关系数据库中在构架上差异对于开发者来说将Java对象持久化到关系型数据库中这工作是件非常复杂事情它们的间这种差异引发了若干种对象持久技术产生以使得关系型世界和对象世界的间鸿沟日益缩小EJB框架提供了个基于容器管理持久化机制如果使用得当将会是种提供给开发者优秀解决方案
Tags:  持久化类 持久化 数据持久化 持久化对象

延伸阅读

最新评论

发表评论