【问题标题】:Using Hibernate with Dynamic Eclipse Plug-ins将 Hibernate 与动态 Eclipse 插件一起使用
【发布时间】:2010-04-17 23:56:00
【问题描述】:

我的应用程序使用的不同插件中的类名称完全相同,我希望能够使用 Hibernate 正确配置它们。问题在于,当 Hibernate 在进行映射时试图找到一个类时,它看起来像动态生成一个类的包名。使用一个插件,此方案有效,但跨多个插件时,它不起作用。看起来 Hibernate 在处理跨多个插件的 Hibernate 配置文件时会感到困惑。

这是因为每个插件都有自己的类加载器吗?继续使用现有插件和 Hibernate 进行这项工作的最佳方法是什么?

【问题讨论】:

    标签: java hibernate eclipse-plugin eclipse-rcp


    【解决方案1】:

    问题是,每个插件都有自己的类加载器,而 Hibernate 使用反射来找到正确的类。

    我家里有一篇关于这个问题的非常好的文章,但这篇文章是德文的。我会尽量解释你需要做什么。

    为了让多个插件共享数据结构,您必须将其放入插件中并启用名为 buddy-policy 的功能。 假设您有一个在启动时启动休眠的主应用程序插件,该插件需要“查看”数据结构插件中的类。为此主插件将其好友策略设置为“已注册”,而数据结构插件将自己注册为“好友”。不幸的是,您必须直接在清单文件中执行所有这些操作,至少在 3.3 中无法在编辑器中执行此操作。

    一旦这个伙伴策略生效,Hibernate 也会生效。

    我查看了我的旧应用程序,这就是我的做法。

    1. 主应用程序 (toolseye.rcp) 依赖于休眠插件 (de.eye4eye.hibernate) 和数据结构插件 (toolseye.datastructures)
    2. hibernate-plugin 将其伙伴策略指定为“已注册”
    3. datastructure-plugin 将自己注册到 hibernate-plugin

    以下是重要的几行:

    Hibernate-plugin de.eye4eye.hibernate

    Eclipse-BuddyPolicy: registered
    

    数据结构插件工具eye.datastructures

    Eclipse-RegisterBuddy: de.eye4eye.hibernate
    

    将这些行直接放在 MANIFEST.MF 中

    两个插件都需要重新导出它们的包,以便主应用程序或介于两者之间的任何层可以使用它们。 希望对您有所帮助。

    【讨论】:

    • 我添加了一个例子。如果有更好的架构方法,我也很感兴趣。但这应该描述伙伴机制的工作原理。
    【解决方案2】:

    只是为了完成这个。

    EclipseLink 可以在 Eclipse RCP 应用程序中用作 JPA 提供程序,而不是使用 Hibernate。 EclipseLink 是 Oracle 的前 TopLink,已被选为 JPA 2 的参考实现。

    RCP 的重点是,EclipseLink 可作为 OSGI-Bundles (org.eclipse.persistence.jpa) 使用,因此它可以从另一个插件加载类而无需额外的伙伴策略。

    目前我正在使用以下项目结构(模型-视图-演示者模式)。括号中的名称指定了依赖插件(并非全部,仅包括与该问题相关的那些)

    • rcp.mvp.view (rcp.mvp.presenter / rcp.mvp.model)
    • rcp.mvp.presenter (rcp.mvp.data - 数据重新导出模型,所以这是 这里不需要)*
    • rcp.mvp.data (rcp.mvp.data.mysql / rcp.mvp.model / javax.persistence / org.eclipse.persistence.jpa)
    • rcp.mvp.data.mysql - 仅提供 mysql-jdbc-驱动程序。必须 在类路径中
    • rcp.mvp.model

    在这种情况下,数据插件中的 JPA 提供程序能够在没有伙伴策略的情况下从模型插件加载类。

    *注意,presenter 不依赖于任何 JPA 包,因为它是由 DAO 封装的(仍然使用它们的主要原因)

    链接

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多