【发布时间】:2012-02-21 19:29:50
【问题描述】:
我有两个不同版本的 EMF 插件,可以加载某个 .xmi。后一个版本已更改,因此与前一个版本的 xmi 不兼容。我想要做的是使用第一个插件加载 xmi,然后使用新插件以编程方式构建模型,从而迁移旧模型。除了 EMF 模型中的一些变化之外,它们是相同的。
如何加载这些插件?是否可以?有更好的策略吗?
【问题讨论】:
标签: java eclipse osgi eclipse-emf mde
我有两个不同版本的 EMF 插件,可以加载某个 .xmi。后一个版本已更改,因此与前一个版本的 xmi 不兼容。我想要做的是使用第一个插件加载 xmi,然后使用新插件以编程方式构建模型,从而迁移旧模型。除了 EMF 模型中的一些变化之外,它们是相同的。
如何加载这些插件?是否可以?有更好的策略吗?
【问题讨论】:
标签: java eclipse osgi eclipse-emf mde
我建议更改旧版本的 id(可能还有 EMF 包 URI),这样您就可以同时拥有两个代码和模型。
由于您需要在同一个插件(迁移器)中同时处理旧类和新类,因此您无法同时工作。
但是,您应该查看dynamic EMF technology,您可以在其中打开没有生成包的旧模型(另一方面,您必须使用反射 API)。使用这种方法,您可以编写一个转换器,使用 EMF 反射 API 打开旧模型,然后手动将其转换为您的新模型版本。
【讨论】:
抱歉,这是不可能的,因为这些插件是单例的。而且在迁移过程中您无法切换插件,因为 Java 基类会妨碍您。
一种可能的解决方案是使用EDapt 技术。该技术允许您在加载模型时自动迁移模型。我在两个不同的项目中使用了 COPE(EDapt 的前身)并取得了巨大成功。
【讨论】: