繁体   English   中英

将Hibernate与动态Eclipse插件配合使用

[英]Using Hibernate with Dynamic Eclipse Plug-ins

我在我的应用程序使用的不同插件中的类名称完全相同,我希望能够使用Hibernate正确配置它们。 问题是看起来Hibernate在尝试查找类时会动态生成类的包名称。 有了一个插件,这个方案可行,但是在多个插件中,它无法正常工作。 看起来Hibernate在跨多个插件处理Hibernate配置文件时会感到困惑。

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

问题是,每个插件都有自己的Classloader,而Hibernate使用Reflection来找到合适的类。

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

为了使数据结构在多个插件上共享,您必须将其放入插件中并启用名为buddy-policy的功能。 假设你有一个main-application-plugin,它在启动时启动hibernate,这个插件需要从数据结构插件“看到”这些类。 为此,main-plugin将其Buddy-Policy设置为“registered”,datastructure-plugin将自己注册为“buddy” 不幸的是,您必须直接在清单文件中执行此操作,至少在3.3中无法在编辑器中执行此操作。

一旦这个伙伴政策有效,Hibernate也会。

我查看了我的旧应用程序,这就是我的工作方式。

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

以下是重要的内容:

Hibernate-plugin de.eye4eye.hibernate

Eclipse-BuddyPolicy: registered

Datastructure-plugin toolseye.datastructures

Eclipse-RegisterBuddy: de.eye4eye.hibernate

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

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

只是为了完成这一点。

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

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

目前我正在玩,使用以下项目结构(Model-View-Presenter Pattern)。 括号中的名称指定了依赖插件(并非所有插件都包含在内,只包含与此问题相关的插件)

  • rcp.mvp.view (rcp.mvp.presenter / rcp.mvp.model)
  • rcp.mvp.presenter (rcp.mvp.data - data reexports model,所以这里不需要)*
  • rcp.mvp.data (rcp.mvp.data.mysql / rcp.mvp.model / javax.persistence / org.eclipse.persistence.jpa)
  • rcp.mvp.data.mysql - 仅提供mysql-jdbc-driver。 必须在类路径内
  • rcp.mvp.model

在这种情况下,data-plugin中的JPA提供程序能够在没有buddy-policy的情况下从model-plugin加载类。

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

链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM