使用Apache OpenJPA开发EJB 3.0应用,第6部分:处理实体生命周期事件的回调

企业应用开发过程中,经常会存在这样的需求:当企业应用中的某些数据被增 加、删除、修改时,引发一些特定的动作,完成企业应用中的一些特别的要求, 比如企业应用中要完成数据操作日志、处理数据之间的某种关系、或者是完成一 些局部的统计工作等。通常情况下,开发者有两种选择:

开发者提供独立 的代码来处理这种需求;

使用关系型数据库中的“触发器”技 术 , 让开发者指定在特定表中添加、删除、修改数据时引发特定的动作,完成数 据库中数据的处理。

然而这两种方式都有一定的局限性,在第 1 种方式 中,特别设计的代码和主体程序之间的耦合性较高,无法独立维护,很难复用; 第 2 种方式仅仅适用于关系型数据库开发的情况,开发方式比较受局限。

OpenJPA 中提供了另外一种方式来处理这种特殊的需求,即回调方法。回 调方法可以监视实体的整个生命周期,在生命周期的各个时期均可以轻松的加入 开发者自己的代码,处理实际业务中的特殊需求。OpenJPA 中目前支持的实体生 命周期包括:实体持久化之前、实体可以被持久化、实体被加载之后、实体状态 写入数据库之前、实体状态写入数据库之后、实体被删除之前、实体被删除之后 。

OpenJPA 中的回调方法可以在两个层次上实现 :

在实体类中定 义回调方法

开发者在实体类中编写与实际业务需求相匹配的处理方法,通过注释将这 些方法注册到实体生命周期监听机制中,当实体的对应生命周期事件触发时,这 些方法将被调用,从而满足用户的特定业务需求。这种方式适用于那些回调方法 不太多、业务也不复杂的情况,同时这也不是被推荐的一种编程方式。

为实体类提供监听器

开发者除了在实体类中定义回调方法之外,还有一种方式可以将实体的生 命周期事件和 Java 方法联系起来,就是使用实体监听器,它使用类似 Awt 或者 Swing 中的监听机制。开发者提供实体监听器,然后将这些监听器注册到合适的 实体上,实体成为事件发生的源。当实体生命周期事件触发时,这些被注册的实 体监听器将会逐一被激活。使用实体监听器,可以实现监听器的继承、共享、复 用,因此能够适用于比简单使用回调方法更复杂的业务环境下。

实体生命周期相关注释

OpenJPA 中能够为实体生命周期的多个阶段提 供回调支持,包括实体持久化之前、持久化时、被初始化时等。实体生命周期的 每一个阶段在 JPA 中都有相应的回调方法注释,这些注释可以在实体类或者实体 类的监听器中使用,开发者使用这些注释来指派回调发生时实体类中被调用的方 法。

时间: 2024-10-30 02:54:42

使用Apache OpenJPA开发EJB 3.0应用,第6部分:处理实体生命周期事件的回调的相关文章

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联

对象和对象之间除了继承关系之外,还存在着关联关系:包括一对一.一对多 .多对一和多对多关系,在 OpenJPA 框架下,开发者只需要使用 javax.persistence.OneToOne 这样的注释,并提供相应的配置内容,就可以轻松 的实现实体之间的关联关系,并且能够实现实体的级联创建.更新和删除. 本文中我们将以实体之间的一对一关联关系为例,深入地讲述如何使用 OpenJPA 框架提供的注释,实现企业应用中实体之间的关联关系.文中将提供一 个简单的例子,详细的说明如何定义类和类之间的一对一

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承

面向对象和关系型数据库 Java 语言天生就是一门面向对象的编程语言,在 Java 世界中,被处理的内 容都被组织成一个一个的对象,对象和对象之间存在着继承.引用关系,这样的 关系无法通过简单的方式直接映射到关系型数据库中.因此在关系型数据库与面 向对象之间存在着阻抗失谐. 我们通过一个简单的例子来说明这种阻抗失谐给企业应用开发者带来的困难. 假设在企业应用中存在三个 Java 类:Animal.Fish 和 Dog.Animal 仅仅具备 两个属性:id 和 name.Fish 是一种 Ani

使用Apache OpenJPA开发EJB 3.0应用,第5部分: 实体标识的自动生成

数据的唯一性是所有应用程序非常基本的要求,由开发者或者用户来维护这种 唯一性存在着较大的风险,因此,由系统自动产生唯一标识是一种常见的做法. OpenJPA 中支持四种不同的实体标识自动生成策略: 容器自动生成的实体 标识: 使用数据库的自动增长字段生成实体标识: 根据数据库序 列号(Sequence)技术生成实体标识: 使用数据库表的字段生成实体标识 : 这四种方式各有优缺点,开发者可以根据实际情况进行选择. 可选择的注释 要让容器和数据库结合管理实体标识的自动生成,根据实际 情况的不同,开发

使用Apache OpenJPA开发EJB 3.0应用,第2部分:开发第一个Open JPA应用

在上一部分中,我们了解了 EJB 3.0 标准和 OpenJPA 的基本特性,现在我们 将开始讲述如何使用 OpenJPA 开发企业应用.本文中,我们将假设有一个 Animal 对象,在某一个应用场景中,我们需要使用 OpenJPA 框架提供的工具和 接口完成 Animal 对象的持久化.属性修改.删除.查找功能.本文将通过简单 的文字和代码描述使用 OpenJPA 开发的步骤和方法,以及开发过程中如何使用 OpenJPA 提供的工具协助完成开发任务. 下载及安装 OpenJPA 支持环境准备

使用Apache OpenJPA开发EJB 3.0应用,第8部分

在Java EE环境下开发.部署OpenJPA 应用 在 本系列 文章的第 1 部分:OpenJPA 与 EJB 3.0中介绍 OpenJPA 时,曾经 提到"OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB3.0 标准的容器集成",在本系列的前面几篇文章中都 只是讲解了如何将 OpenJPA 作为独立的持久层框架发挥作用,在本文中,我们将 会了解如何在 JBoss 应用服务器中使用 OpenJPA 开发实体 Bean.并且

使用Apache OpenJPA开发EJB 3.0应用,第1部分: OpenJPA与EJB 3.0

简介: Java Persistence API(JPA)是 EJB 3.0 新引入的数据持久化编程模型,它 利用 Java 5 中的注释(Annotation)和对象/关系映射,为数据持久化提供了更 简单.易用的编程方式. 本系列 文章将全面介绍其开源实现 - Apache OpenJPA,将为学习 JPA 标准和使用 OpenJPA 进行实际的应用开发提供详细的指 南. 本文是系列文章的第一部分,概述了关系型数据库和面向对象之间的阻抗失谐 (impedance mismatch),介绍了 E

使用Apache OpenJPA开发EJB 3.0应用,第7部分

使用Eclipse Dali开发OpenJPA应用 关于 Eclipse Dali JPA 工具 Dali JPA Tools 是由 Eclipse.org 推出.支持 JPA 项目开发的插件,主要 目标是为用户开发.编辑 EJB 3.0 中 JPA 实体的映射关系提供可视化工具支持 .Dali 是 Eclipse WTP(Web Tools Platform)工具集中的一部分,这是由 Eclipse.org 提供.支持 Web 应用和 Java EE 应用开发的工具集. 目前 Dali 的最新

将遗留Hibernate应用程序迁移到OpenJPA和EJB 3.0(一)

简介:通过使用 EJB 2.1 以及 OpenJPA 和 EJB 3.0 中的等效功能比较 Hibernate 应用程序中的特 性和功能,学习如何将 Hibernate 应用程序源代码.对象关系映射和配置参数迁移到 OpenJPA. 引言 Hibernate 是开放源代码持久性和查询框架,提供传统 Java 对象 (POJO) 到关 系数据库表的与对象相关的映射,以及数据查询和检索功能.Apache OpenJPA 项目将按照 EJB 3.0 Java Persistence API 规范的定义

《Android应用开发攻略》——3.10 为测试重现活动生命周期场景

3.10 为测试重现活动生命周期场景 Daniel Fowler3.10.1 问题 应用程序应该适应活动生命周期.开发人员必须知道如何重现不同的生命周期场景.3.10.2 解决方案 利用日志获得对活动生命周期的全面了解,就能更容易地为测试重现生命周期场景.3.10.3 讨论 Android是为了移动的生活方式而设计的,在这种方式下,用户忙于多种工作:打电话.检查邮件.发送SMS信息.参与社交网络.拍照.访问互联网.运行应用程序等,甚至完成某些工作!因此,移动设备可能有多个应用程序,从而在内存中加