430 likes | 716 Views
Persistent Objects. 持久对象. Object Persistence. 问题 解决方案 Language-level Databases Relational O-R Object-Oriented database Hibernate 简介 讨论. Persistence. What happens to the objects of an application when its execution terminates? Transient objects Persistent objects.
E N D
Persistent Objects 持久对象 Institute of Computer Software Nanjing University
Object Persistence • 问题 • 解决方案 • Language-level • Databases • Relational • O-R • Object-Oriented database • Hibernate 简介 • 讨论 Institute of Computer Software Nanjing University
Persistence • What happens to the objects of an application when its execution terminates? • Transient objects • Persistent objects Institute of Computer Software Nanjing University
Java:Writing to an Object Stream // Serialize today's date to a file. FileOutputStream f = new FileOutputStream("tmp"); ObjectOutput s = new ObjectOutputStream(f); s.writeObject("Today"); s.writeObject(new Date()); s.flush(); Institute of Computer Software Nanjing University
Reading from an Object Stream // Deserialize a string and date from a file. FileInputStream in = new FileInputStream("tmp"); ObjectInputStream s = new ObjectInputStream(in); String today = (String)s.readObject(); Date date = (Date)s.readObject(); Institute of Computer Software Nanjing University
对象结构的存储与提取 • 对象持久化的难点之一: • 对象之间的引用 Institute of Computer Software Nanjing University
对象结构的存储与提取 • 需持久化整个对象引用闭包 • Persistence closure • Java的serializable规则 • 缺省规则:非static 非transient 的数据成员 • 用户定义 class List implements Serializable { List next; private static final ObjectStreamField[] serialPersistentFields = {new ObjectStreamField("next", List.class)}; } Institute of Computer Software Nanjing University
对象结构的存储与提取 • 存储格式问题 • 同构环境 • 异构环境 • XML (Tool: Caster …) Institute of Computer Software Nanjing University
对象结构的存储与提取 • 闭包可能太大 • 小对象引用(共享的)大对象 Institute of Computer Software Nanjing University
对象结构的存储与提取 • Java 的 transient 修饰子 • Transient fields 不被序列化 • Static 也不 • 开发者负责维护 Institute of Computer Software Nanjing University
Schema evolution • 持久化问题的又一难点 • 读取对象的类不是存储对象的类,比如做了修改,或是其某个子类? • Naïve approaches • 放弃先前持久化的对象 • 一次性全体转换 • 自动对象转换 • Detection • Notification • Correction Institute of Computer Software Nanjing University
自动对象转换 • Detection:标记对象版本 • Policies: nominal vs. structural • Nominal: class versioning • 命名 • Configuration Management • 或者 Random number (OLE2) • 集中注册处 • Structural: 依据Class 结构 • 据之生成 Class descriptor, • 类名;类全文;类名+属性+方法; 再加类不变式 Institute of Computer Software Nanjing University
自动对象转换 • Notification • 语言机制支持 • Eiffel in Class GENERAL correct_mismatch is do raise_mismatch_exception end 开发者可在ANY中为整个系统重定义该feature Institute of Computer Software Nanjing University
自动对象转换 • Correction • 增加attribute • 删除attribute • 核心在于维护不变式 Institute of Computer Software Nanjing University
自动对象转换:Java • serialVersionUID • 自动定义 (根据类文件生成) • 1. Class name 2. The class modifiers 3. The name of each interface 4. For each field of the class(except private static and private transient fields): • The name of the field • The modifiers of the field • The descriptor of the field • 5. For each method including constructors, except private methods and constructors: • The name of the method • The modifiers of the method • The descriptor of the method Institute of Computer Software Nanjing University
自动对象转换:Java • 手工指定 • ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L; • 类改变时仍然能够反序列化 • Java定义了一些“兼容”条件,符合条件的自动转换 • 可以容忍的:adding fields etc • 太糟糕的: “Changing the type of a field”, del fields, etc Institute of Computer Software Nanjing University
对于实在“糟糕”的类修改 • 可以定制序列化和反序列化方法 private void readObject(ObjectInputStream in) {} private void writeObject(ObjectOutputStream out) {} Institute of Computer Software Nanjing University
对象持久化与数据库 • 为什么要数据库 • 序列化:单个对象入口的一个对象闭包,须一次提取、重建所有对象 • 基于内容的查询? • 并发存取? Institute of Computer Software Nanjing University
数据库 Persistence Programmable structure Arbitrary size Access control Property-based queering Integrity constraints Administration Sharing Locking Transaction 对象持久化与数据库 自然地,要用数据库来存储持久化对象 Institute of Computer Software Nanjing University
对象持久化与数据库 • 关系型数据库:数据库的主流 • 关系 • 关系代数 • Selection, Projection , Join Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
对象持久化与数据库 • 对象 关系 互操作 • 模型不同 • 如果 • 有时对象系统必须处理关系数据库中的数据 • 有时对象结构很简单,关系模型能够表达 • 否则 impedance mismatch Institute of Computer Software Nanjing University
对象持久化与数据库 • impedance mismatch • 关系数据库 • 数据结构规整,成员数目类型固定 • 结构简单,成员类型属于一个既定小集合 • 这些类型由大小固定的类型组合而成 • 那么 • 大小不定的域? • 表示对象引用的域?基于引用的间接查询? • 继承? • 更重要的是:对象identity语义 Institute of Computer Software Nanjing University
对象持久化与数据库 • 面向对象数据库 • 解决面向对象软件系统进行对象持久化时,与关系数据库间的不匹配问题 • 克服关系数据库本身的限制 • 提供更高级的数据库设施 Institute of Computer Software Nanjing University
对象持久化与数据库 • 面向对象数据库最小要求 [zdonik 1990] • 数据库功能 • 支持封装 • 对象联系于唯一ID • 支持对象引用 • 此外 • 对象版本,类版本与schema evolution, Long transactions, locking queris Institute of Computer Software Nanjing University
Hibernate: Object-Relation Mapping • 当前的现实: • 应用分层 • 两层结构 • 三层结构 • N-层结构 Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
对象-关系 映射 • 简单映射 • 将一个类中的一个数据成员定为关键字 • 其它数据成员为属性 • 添加、更新、删除、查询 Institute of Computer Software Nanjing University
对象-关系 映射 • 继承: • 方案1: • 子类父类各自映射到各自的关系上。 • 优点?缺点? Institute of Computer Software Nanjing University
对象-关系 映射 • 继承 • 方案 2: • 所有继承自一个类的类都映射到一个表上 • 增加一栏标记当前记录对应的对象的类 • 优点? 缺点? Institute of Computer Software Nanjing University
对象-关系 映射 • 继承 • 方案 3: • 父类映射的关系與子映射的关系共享相同的主鍵值,父类关系只記錄本身的屬性,如果要查詢的是子类,則透過外鍵參考從父类表格中取得繼承而來的屬性值。 Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
Institute of Computer Software Nanjing University
对象-关系 映射 • Component 映射 • 子对象 • Set 映射 • 对象中某属性是一个集合 • 集合元素仅仅是值,无identity • 映射到另一个关系,用外关键字表明其属于哪个对象 • List 映射 • 与Set类似 再加一栏表示位置 Institute of Computer Software Nanjing University
对象-关系 映射 • Map映射 • Key-Val 属于谁 • Set 和 Map可排序 Institute of Computer Software Nanjing University
对象-关系 映射 • 实体映射 • 实体:有id的关系 • 实体之间的关系 • 一对一 • 一对多 • 多对一 • 多对多 Institute of Computer Software Nanjing University
Hibernate • Session管理 • 事务管理 • 乐观锁定 • 悲观锁定 • Caching … Institute of Computer Software Nanjing University
Java Persistence API • 作为EJB3的一部分 • Hibernate可作为JPA的provider • BTW, about “provider” Institute of Computer Software Nanjing University
讨论 • “数据独立性”? • 传统的数据库为中心的开发 “软件作为服务” • 非(半)结构化数据? • WWW • GOOGLE Institute of Computer Software Nanjing University
作业-10 (复习,不需要提交) • Java语言“transient”关键字与对象序列化有何关系? • 对象序列化与反序列化时的“Schema evolution”问题具体指什么?一般如何处理之? • 为何对象持久化要使用数据库?何谓对象关系映射?尝试学习、使用Hibernate。 Institute of Computer Software Nanjing University