1 / 43

Persistent Objects

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.

Download Presentation

Persistent Objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Persistent Objects 持久对象 Institute of Computer Software Nanjing University

  2. Object Persistence • 问题 • 解决方案 • Language-level • Databases • Relational • O-R • Object-Oriented database • Hibernate 简介 • 讨论 Institute of Computer Software Nanjing University

  3. Persistence • What happens to the objects of an application when its execution terminates? • Transient objects • Persistent objects Institute of Computer Software Nanjing University

  4. 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

  5. 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

  6. 对象结构的存储与提取 • 对象持久化的难点之一: • 对象之间的引用 Institute of Computer Software Nanjing University

  7. 对象结构的存储与提取 • 需持久化整个对象引用闭包 • 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

  8. 对象结构的存储与提取 • 存储格式问题 • 同构环境 • 异构环境 • XML (Tool: Caster …) Institute of Computer Software Nanjing University

  9. 对象结构的存储与提取 • 闭包可能太大 • 小对象引用(共享的)大对象 Institute of Computer Software Nanjing University

  10. 对象结构的存储与提取 • Java 的 transient 修饰子 • Transient fields 不被序列化 • Static 也不 • 开发者负责维护 Institute of Computer Software Nanjing University

  11. Schema evolution • 持久化问题的又一难点 • 读取对象的类不是存储对象的类,比如做了修改,或是其某个子类? • Naïve approaches • 放弃先前持久化的对象 • 一次性全体转换 • 自动对象转换 • Detection • Notification • Correction Institute of Computer Software Nanjing University

  12. 自动对象转换 • Detection:标记对象版本 • Policies: nominal vs. structural • Nominal: class versioning • 命名 • Configuration Management • 或者 Random number (OLE2) • 集中注册处 • Structural: 依据Class 结构 • 据之生成 Class descriptor, • 类名;类全文;类名+属性+方法; 再加类不变式 Institute of Computer Software Nanjing University

  13. 自动对象转换 • Notification • 语言机制支持 • Eiffel in Class GENERAL correct_mismatch is do raise_mismatch_exception end 开发者可在ANY中为整个系统重定义该feature Institute of Computer Software Nanjing University

  14. 自动对象转换 • Correction • 增加attribute • 删除attribute • 核心在于维护不变式 Institute of Computer Software Nanjing University

  15. 自动对象转换: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

  16. 自动对象转换: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

  17. 对于实在“糟糕”的类修改 • 可以定制序列化和反序列化方法 private void readObject(ObjectInputStream in) {} private void writeObject(ObjectOutputStream out) {} Institute of Computer Software Nanjing University

  18. 对象持久化与数据库 • 为什么要数据库 • 序列化:单个对象入口的一个对象闭包,须一次提取、重建所有对象 • 基于内容的查询? • 并发存取? Institute of Computer Software Nanjing University

  19. 数据库 Persistence Programmable structure Arbitrary size Access control Property-based queering Integrity constraints Administration Sharing Locking Transaction 对象持久化与数据库 自然地,要用数据库来存储持久化对象 Institute of Computer Software Nanjing University

  20. 对象持久化与数据库 • 关系型数据库:数据库的主流 • 关系 • 关系代数 • Selection, Projection , Join Institute of Computer Software Nanjing University

  21. Institute of Computer Software Nanjing University

  22. Institute of Computer Software Nanjing University

  23. 对象持久化与数据库 • 对象 关系 互操作 • 模型不同 • 如果 • 有时对象系统必须处理关系数据库中的数据 • 有时对象结构很简单,关系模型能够表达 • 否则 impedance mismatch Institute of Computer Software Nanjing University

  24. 对象持久化与数据库 • impedance mismatch • 关系数据库 • 数据结构规整,成员数目类型固定 • 结构简单,成员类型属于一个既定小集合 • 这些类型由大小固定的类型组合而成 • 那么 • 大小不定的域? • 表示对象引用的域?基于引用的间接查询? • 继承? • 更重要的是:对象identity语义 Institute of Computer Software Nanjing University

  25. 对象持久化与数据库 • 面向对象数据库 • 解决面向对象软件系统进行对象持久化时,与关系数据库间的不匹配问题 • 克服关系数据库本身的限制 • 提供更高级的数据库设施 Institute of Computer Software Nanjing University

  26. 对象持久化与数据库 • 面向对象数据库最小要求 [zdonik 1990] • 数据库功能 • 支持封装 • 对象联系于唯一ID • 支持对象引用 • 此外 • 对象版本,类版本与schema evolution, Long transactions, locking queris Institute of Computer Software Nanjing University

  27. Hibernate: Object-Relation Mapping • 当前的现实: • 应用分层 • 两层结构 • 三层结构 • N-层结构 Institute of Computer Software Nanjing University

  28. Institute of Computer Software Nanjing University

  29. Institute of Computer Software Nanjing University

  30. Institute of Computer Software Nanjing University

  31. 对象-关系 映射 • 简单映射 • 将一个类中的一个数据成员定为关键字 • 其它数据成员为属性 • 添加、更新、删除、查询 Institute of Computer Software Nanjing University

  32. 对象-关系 映射 • 继承: • 方案1: • 子类父类各自映射到各自的关系上。 • 优点?缺点? Institute of Computer Software Nanjing University

  33. 对象-关系 映射 • 继承 • 方案 2: • 所有继承自一个类的类都映射到一个表上 • 增加一栏标记当前记录对应的对象的类 • 优点? 缺点? Institute of Computer Software Nanjing University

  34. 对象-关系 映射 • 继承 • 方案 3: • 父类映射的关系與子映射的关系共享相同的主鍵值,父类关系只記錄本身的屬性,如果要查詢的是子类,則透過外鍵參考從父类表格中取得繼承而來的屬性值。 Institute of Computer Software Nanjing University

  35. Institute of Computer Software Nanjing University

  36. Institute of Computer Software Nanjing University

  37. 对象-关系 映射 • Component 映射 • 子对象 • Set 映射 • 对象中某属性是一个集合 • 集合元素仅仅是值,无identity • 映射到另一个关系,用外关键字表明其属于哪个对象 • List 映射 • 与Set类似 再加一栏表示位置 Institute of Computer Software Nanjing University

  38. 对象-关系 映射 • Map映射 • Key-Val 属于谁 • Set 和 Map可排序 Institute of Computer Software Nanjing University

  39. 对象-关系 映射 • 实体映射 • 实体:有id的关系 • 实体之间的关系 • 一对一 • 一对多 • 多对一 • 多对多 Institute of Computer Software Nanjing University

  40. Hibernate • Session管理 • 事务管理 • 乐观锁定 • 悲观锁定 • Caching … Institute of Computer Software Nanjing University

  41. Java Persistence API • 作为EJB3的一部分 • Hibernate可作为JPA的provider • BTW, about “provider” Institute of Computer Software Nanjing University

  42. 讨论 • “数据独立性”? • 传统的数据库为中心的开发 “软件作为服务” • 非(半)结构化数据? • WWW • GOOGLE Institute of Computer Software Nanjing University

  43. 作业-10 (复习,不需要提交) • Java语言“transient”关键字与对象序列化有何关系? • 对象序列化与反序列化时的“Schema evolution”问题具体指什么?一般如何处理之? • 为何对象持久化要使用数据库?何谓对象关系映射?尝试学习、使用Hibernate。 Institute of Computer Software Nanjing University

More Related