围绕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也有非常大的参考价值。...
emf和wmf文件的互转,有源码,供大家学习,交流!
EMF和BMP文件格式的相互转换:BOOL CConvertEMFToBMP::ConvertBMPToEMF(const char*pszBMPFile,const char* pszEMFFile)
emf入门教程,并附有插件。比较适合初学者
eclipse-emf-2.6.0-1.el6.i686.rpm
EMF读取XML
EMF 自学笔记
详细讲述了emf和gef的用法,和模型开发过程,有很多实例的
EMF治疗癌症疾病的领域正在Swift扩展,我们的研究可能会邀请进行进一步的实验和临床研究,在这些研究中,可以系统地应用各种潜在的EMF治疗方案(组合频率和调制频率)以获得更有效的EMF抗癌治疗方法。
包含3个文件: 微软emf文件格式详解.pdf emf.hlp (Enhanced Metafiles in Win32) emfexplorer_src.zip
emf文件是windows的一种打印格式,该资源可以对emf文件进行文本提取和推送打印机打印以及转换成图像
emf转bmpemf
图片1.emf
线路1.emf
基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码
矢量格式转换程序,基于JAVA实现的SVG转EMF的的示例代码,下载后导入到eclipse即可运行。
This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.
EMF图片转为JPG/PNG 需安装GraphicsMagick 提供实例代码