围绕EMF探索(1)之存储
EMF(Eclipse Modeling Framework)的应用会越来越多,而围绕EMF的query, validate, transaction, persistency等等讲逐渐被大家使用,以及EMF eCore也有非常大的参考价值。今天先讲讲EMF的存储与查询方面的内容。
首先讲讲EMF对象的存储
这两天抽空玩了玩EMF的对象存储,采用了Eclipse Teneo这个组件。这是一种桥梁式的组件,为EMF对象提供了一个持久化的解决方案。目前支持Hibernate和JDO的实现方式。Eclipse Teneo的前身是elver persistency组件,后并入Eclipse EMF Tools项目工程下。
Teneo让EMF对象的存储变得非常简单。这样我们只需要关注EMF对象的关系,而不用过多的考虑每一个eObject该如何与数据库表对应。
在使用Hibernate的情况下,Teneo会根据ePackage所描述的Model中的eObject对象之间的关系,自动的产生hiernate.hbm.xml映射文件。当然我们可以手工指定mapping文件来强制描述eObject与数据库表结构的关系。详细可以参看:
简单的采用Teneo操作eObjects是非常容易的事情,在elver上也提供了那个经典的“Library Model”实例的实现例子,可参考:
final HbDataStore dataStore = HbHelper.INSTANCE.createRegisterDataStore(dataStoreName);
dataStore.setEPackages(new EPackage[] { LibraryPackage.eINSTANCE });
final SessionFactory sessionFactory = dataStore.getSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
LibraryAdapterFactory adapterFactory = new LibraryAdapterFactory();
Library library = LibraryFactory.eINSTANCE.createLibrary();
library.eAdapters().add( adapterFactory.createAdapter(library) );
library.setName("My Library");
session.save(library);
Writer writer = LibraryFactory.eINSTANCE.createWriter();
writer.setName("Writer One");
Book book = LibraryFactory.eINSTANCE.createBook();
book.setPages(305);
book.setTitle("The Hobbit");
book.setCategory(BookCategory.SCIENCE_FICTION_LITERAL);
book.getWriter().add(writer);
library.getWriters().add(writer);
library.getBooks().add(book);
session.getTransaction().commit();
session.close();
再说说EMF的查询吧。
Teneo本身提供了一对查询的支持,比如针对Hibernate的实现,支持对HQL的检索。
Query query = session.createQuery("SELECT book FROM Book book, Writer writ WHERE "
+ " book.title='1984' AND book.author=writ AND writ.name='G. Orwell'");
books = query.list();
但是,Teneo仅仅支持Hibernate的HQL,或JDO的JDOQL,略显得不够完善,或者说,让对象检索变得有些“污染”。
我比较喜Eclipse EMF项目工程下有EMF Query组件,这个组件为“内存中的eObjects”的检索提供一套“查询条件”,但目前EMF Query仅支持内存中的对象关系,这就局限来其现实中的应用价值。
Query query = session.createQuery("FROM Library");
List libraries = query.list();
Library library = (Library) libraries.get(0);
Collection books = queryLargeBook(library);
不过,EMF Query的Condition并没有基于任何开源FP的基础,既没有基于apache的Common Functor,也没有基于JGA(http://jga.sourceforge.net/)。
EMF Query内部结构和实现,我目前还没有看完,姑且先不细说,留待后面补充。
分享到:
相关推荐
火龙果软件工程技术中心 围绕EMF探索(1)之存储 EMF(EclipseModelingFramework)的应用会越来越多,而围绕EMF的query,validate,transaction,persistency等等讲逐渐被大家使用,以及EMFeCore也有非常大的参考价值。...
1. **EMF基础** EMF基于MDE(Model Driven Engineering)理念,允许开发者创建、编辑和管理模型。模型是业务逻辑的一种抽象表示,可以用来生成代码、文档和其他工程制品。EMF提供了元数据模型(EMD,EMF Meta-Data...
EMF(Enhanced Metafile Format)是Windows操作系统中用于存储图形图像的一种文件格式,它扩展了早期的WMF(Windows Metafile Format)格式,提供了更高级的功能和更高的图像质量。这个压缩包包含了深入理解EMF文件...
EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...
1. **记录头**:定义了EMF文件的基本属性,如文件类型、版本号等。 2. **记录体**:包含了实际的绘图指令,这些指令按照顺序执行,以重现图像。 3. **对象表**:记录了所有使用的绘图对象,如笔、刷子等,以及它们的...
3. "使用EMF Query查询EMF模型(2) - 编程入门网" 这部分可能深入介绍了EMF Query(EMF QL),这是一个用于查询和操作EMF模型的强大工具。通过EMF QL,开发者可以方便地检索、分析和修改模型数据。 总结来说,EMF ...
1. **文本提取**:EMF文件可能包含文本信息,这些文本通常是以矢量形式存储的。文本提取过程是从EMF文件中识别并提取出可读的文本内容。这通常需要解析文件结构,找到包含文本的数据块,并将它们转化为人类可读的...
这些生成的代码可以用于存储、加载和操作模型实例。 #### 三、EMF代码生成 EMF提供了强大的代码生成能力,能够根据EMF模型自动生产Java代码。这包括模型类、序列化和反序列化代码、编辑器、视图等。EMF的代码生成...
- XML是一种标记语言,用于存储和传输结构化数据,它与EMF模型之间的映射使得XML数据能够被EMF理解和处理。 2. **创建EMF模型** - 使用EMF,首先需要创建一个Ecore模型,这是EMF的数据模型定义,包含了类、属性和...
1. GEF和EMF的基本概念:介绍这两个框架的核心原理和设计理念。 2. 模型和视图的关系:阐述如何使用EMF来定义数据模型,并通过GEF展示为图形界面。 3. 图形编辑器的构建:详细步骤指导如何使用GEF创建可交互的图形...
1. **元模型(Metamodel)定义**:EMF允许开发者使用Ecore语言定义元模型,这是对数据模型的一种抽象描述。 2. **代码生成**:基于元模型,EMF可以自动生成Java类和其他相关代码,这些代码可以直接在应用程序中使用...
EMF位于Eclipse平台的核心之上,提供了一个高层次的抽象层,用于处理模型定义和模型实例。它是面向对象的,并且可以与Java代码紧密结合。 **1.1.2 目标** - **简化模型定义**:EMF通过简单的API提供了强大的模型...
EMF,另一方面,是Microsoft Windows操作系统中的一个元文件格式,它可以存储矢量和光栅图形信息,适合在Windows应用程序之间交换图形数据。 这个"SVG转EMF"的示例代码提供了在Java环境下进行这种转换的方法。首先...
3. **模型操作**:EMF提供了丰富的API,包括创建、修改、查询模型对象,以及保存和加载模型到XML文件。 4. **图形化编辑器**:EMF集成了GEF(Graphical Editor Framework),可以快速构建基于模型的图形化编辑器,...
EMF(Eclipse Modeling Framework)和Graphiti是两个在Eclipse平台上用于建模和图形化表示的重要工具。本文将深入探讨这两个技术,并结合提供的压缩包文件"emf",为读者提供一个详尽的理解。 首先,EMF是Eclipse...
EMF (Enhanced Metafile) 是Windows操作系统中用于存储矢量图形和光栅图像的文件格式,它在处理复杂的图形和图像是非常有效。而PNG(Portable Network Graphics)则是一种无损压缩的位图格式,广泛应用于网页设计、...
1. **基础概念**:EMF的基础概念包括模型、元模型、实例和资源。模型是对现实世界或业务逻辑的一种抽象,元模型定义了模型的结构和约束,实例是模型的具体实现,而资源则是模型的存储容器。 2. **核心API**:EMF的...
1. **模型定义**:通过扩展XML Schema Definition (XSD) 或者ECORE(EMF的元数据模型)来定义模型结构。ECORE是一种元元模型,用于描述任何概念模型,它是EMF的基础。 2. **代码生成**:根据模型定义自动生成Java类...
1. **理解EMF和BMP格式**:首先,开发者需要理解EMF和BMP文件的结构。EMF包含一系列图形命令,而BMP则是一个二维像素阵列,包含颜色信息。 2. **读取EMF文件**:使用Windows API函数,如`PlayMetaFile()`,可以读取...