启用EMF的自动生成UUID功能

缺省条件下,EMF不会为每个对象维护一个唯一的id,这在一些情况下不太方便,例如要在web环境下编辑一个EMF模型实例,通常需要在URL里传递对象的id以便确定目标。

有两种方式解决这类问题。第一种是在模型里给每个对象增加一个id属性,并维护使其保持唯一,例如在XXXFactory的createXXX()方法里为这个属性赋值。另一种方式是借助EMF的功能。其实EMF的XMIResource维护了一个id与对象的映射表,并且会为每个新创建的对象自动赋值,只要稍微设置一下就可以启用这个功能,具体的方法如下。

1. 在xxx.genmodel里选中package节点,在属性视图里把Resource Type属性的值设置为XMI。

 

2. 重新生成代码,EMF生成的代码里会比原来多出XXXResourceImpl.java文件。

3. 在XXXResourceImpl.java里,覆盖useUUIDs()方法,让其返回true(缺省返回的是false)。

4. 重新生成代码。(删除以前的Manifest.MF和plugin.xml文件以便这两个文件能得到更新)

这样,如果用文本方式查看新创建的模型实例文件,会发现每个对象都多出一个xmi:id属性,如xmi:id="_gitpslkoEd2PdI7FPnuunA"。要在程序里使用这个id,只需要用resource.getId(eobject)即可得到,其中resource可以通过eobject.eResource()很方便的获得。

参考链接:
How To Enable UUID In EMF Generated Model To Get Copy&Paste Working(这个链接里的方法太麻烦了,但功效一样。)
Eclipse GMF - Enabling UUIDs in Semantic model - The Simplest Way(用GMF的时候这个链接里的方法应该比较方便)

posted @ 2008-07-24 21:32  八进制  阅读(5535)  评论(2编辑  收藏  举报