EMF学习笔记(三)——使用EMF编程——持久化

阅读: 评论:0

EMF学习笔记(三)——使用EMF编程——持久化

EMF学习笔记(三)——使用EMF编程——持久化

  • 持久化Persistence
    • 持久化框架的概述
    • EMF持久化API
      • URI
      • URIConverter
      • Resource
      • ResourceFactory和ResourceFactoryRegistry
      • ResourceSet
    • XML资源
    • EMF资源和资源工厂实现
    • 性能考量
    • 主动对象的定制存储

持久化(Persistence)

  EMF拥有一个强大的模型持久化框架。通过一个高度可定制资源实现(resource implementation)来支持XML序列化
  EMF不要求持久化是基于XML或者是基于流(stream)。这个框架提供的API灵活到足以支持任何种类的存储,甚至在不同类型的存储中保存对象,其中包含引用。

持久化框架的概述

  EMF中持久化的基本单元叫做资源(resource),它是一个或多个与其内容一起持久化的对象容器
  EMF对象由Resource接口来进行持久化,方法是将对象添加到资源的内容列表中,然后调用save()方法,例子如下:

PurchaseOrder po = ...
Resource resource = ...
Contents().add(po);
resource.save(null);

  这个例子中,save()方法的参数,一个Map,如果指定了保存操作的选项,那么这个参数将非空(non-null)。EMF的XML资源支持的选项详细介绍在15.3.3。
  持久化的逆操作,从持久化形式中在内存重建活动(actiive)的对象。使用load()方法从资源的内容列表中访问对象:

Resource resource = ...
resource.load(null);
PurchaseOrder po = (Contents().get(0);

  Resource接口的详细说明在15.2.3。
  上面的代码带来了以下问题:XML序列化写到哪里?从哪里读入?开始的时候如何获取资源?
  为了管理不同资源中对象之间的引用,EMF持久化框架包含了另一种接口,称作ResourceSet,作用相当于资源的容器getResources()方法返回的是资源的列表,以一个集合(set)的形式。
  通常而言,资源是由资源集合创建的,或者是加载的。如下:

ResourceSet resourceSet = new ResourceSetImpl();
URI uri = ateURI("file:/c:/data/out.epo2");
Resource resource = ateResource(uri);

  这里我们创建了一个资源集合,调用createResource()来创建特定的资源。这个方法的参数是URI,它被用来指定资源,在资源集合中识别出这个资源。然后,我们调用save()load()方法,资源可以使用这个URI来决定写出读入的位置。这里的URI是文件模式(file-scheme),其他支持的URI类型详见15.2.1。
  EMF不会向资源集合提供工厂。由用户来决定实例化合适的实现。ResourceSetImpl是一个功能灵活的实现,通常应该是足够的。如果有必要的话,它也可以被扩展以及定制。
  传给createResource()URI还有另外的用途。资源集合维持(maintain)资源工厂注册表。为了创建一个资源,需要查询(consult)它的注册表,以根据特定的URI来获取一个合适的工厂。这个工厂实际上创建了对应的资源,并且决定对象如何被持久化
  注册表根据模式(scheme)或者文件扩展名(file extension)来选择资源工厂。我们可以对.epo2文件扩展名注册EMF的默认XMI资源工厂:

ResourceFactoryRegistry().getExtensionToFactoryMap().
put("epo2", new XMIResourceFactoryImpl());

  当使用Eclipse里生成的模型时,这种注册不是必要的,因为相似的注册会通过模型插件(model plug-in)清单文件(manifest file)中指定的扩展名来自动地执行。然而,当独立运行时,注册必须被明确地执行。否则,createResource()将无法创建资源并且会返回null。详见15.2.4的Resource的嵌套工厂和Registry接口以及15.2.5的ResourceSet
  现在已经有了对持久化框架的足够理解,来编写简单但有效的程序来保存采购清单:

PurchaseOrder po = createPurchaseOrder();
ResourceSet resourceSet = new ResourceSetImpl();
ResourceFactoryRegistry().getExtensionToFactoryMap().put("epo2", new XMIResourceFactoryImpl());
URI uri = ateURI("file:/c:/data/out.epo2");
Resource resource = ateResource(uri);
Contents().add(po);
try
{resource.save(null);System.out.println("saved");
}catch (IOException e)
{System.out.println("failed to write " + uri);
}

  这里的createPurchaseOrder()<

本文发布于:2024-02-03 01:41:15,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170689567247808.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:emf开发
标签:持久   学习笔记   EMF
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23