在 EMF 模型中使用 Java 关键字易失性



我们将EMF 2.7与多线程Eclipse RCP 3.x应用程序一起使用。现在,一些 EMF 模型和特征/属性分别由不同的线程访问。因此,我们需要将这些变量设为 [1] volatile

在 .ecore 或 .ecorediag 文件中有没有办法配置EMF 模型的属性,以便代码生成器会自动在生成的模型代码中添加 volatile 关键字? 还是我们必须手动将其添加到生成的代码中(尽管它不合适..(?

如果可以在模型定义中而不是在生成的代码中指定"可变",这将非常有用。

以下是在生成的 EMF 模型中手动添加易失性的示例:

public class EGuiStateImpl extends MinimalEObjectImpl.Container implements 
     EGuiState {
/**
* @generated NOT
*/
protected volatile ESummary summary;

[1] Java 关键字 volatile 用于指示变量的值将被不同的线程修改。

默认情况下,EMF 生成的模型不会为多线程做好准备。EMF中的"易失性"意味着属性(又名功能(不会生成任何字段,它与Java的易失性语法无关。(你应该阅读EMF书或至少EMF Refcardz(

您始终可以修改 javajet 模板以生成不同的代码,但同样,不建议这样做,因为默认的 EMF 生成不是为多线程设计的。

如果您需要基于多线程 EMF 的应用程序,请考虑使用也支持事务的 EMF CDO。

在 EClass 下的 ecore 模型中,选择要使 EAttribute 或 EReference 变得易变。右键单击>显示属性。在属性视图的末尾,有一个默认为"false"的Volatile设置。

注意:我实际上还没有尝试过,但我猜改变它应该有效。

最新更新