OSGi + Hibernate

8 persistence osgi hibernate

而不是将数据库操作分散在四个(osgi)包中,所有这些操作都略有不同.我想创建一个(简单的)OSGi包,负责所有持久性问题.我觉得这并不像听起来那么简单,因为"每捆独特的类加载器"的东西.所以我真的很感激,如果有人知道这种问题的解决方案.

Ste*_*idt 5

我可以通过两种方式来解决类加载问题.

  • 您是否与特定的OSGi框架绑定,或者您希望保持尽可能兼容?或者你可以使用equinox实现吗?在Equinox中,您有一种称为Buddy Classloading的机制.此添加允许您增加不同OSGi-Bundles之间某些类的可见性.如果您对此主题感兴趣,我想引导您阅读以下两篇文章:了解Eclipse插件如何与OSGi,Eclipse 一起工作- 一个包含两个VM(以及许多类加载器)的故事.
  • 如果您希望保持独立的OSGi实现,那么您可能会考虑将您希望保留的类提取到Hibernate-Bundle和其他bundle所依赖的单独的bundle中.这样,他们都可以访问持久化类的类定义.


Sch*_*jer 4

(如果您使用 Hibernate Annotations)

当 Hibernate 包获知某个带注释的类时,保存所有实体类加载器。

然后在构建 SessionFactory 之前执行类似的操作。

ClassLoad cl = Thread.currentThread().getContextClassLoader();
try {
 Thread.currentThread().setContextClassLoader(yourClassLoader);
 factory = cfg.buildSessionFactory(); 
}finally {
 Thread.currentThread().setContextClassLoader(cl);  // restore the original class loader
}
Run Code Online (Sandbox Code Playgroud)