2012-03-07 48 views
3

我正在开发使用了利用由Hibernate支持春天的数据JPA实现数据访问层一个RCP应用基础。注释的域类在一个jar/bundle中,Spring存储库和spring配置实例化数据源,实体管理器和事务管理器在另一个bundle中。这些jar被其他非RCP应用程序在整个项目中使用。的hibernate 3.6.8 jar包和依赖包可以通过我自己的插件或OSGI包(jta,antlr,commons集合等)在目标平台中打包和公开。我使用Eclipse Gemini Blueprint来管理RCP应用程序中的bundle spring上下文。Eclipse RCP的,spring,hibernate的类加载问题

当DAL bundle spring上下文被gemini扩展器初始化时,我得到了Hibernate相关的ClassDefNotFound异常,通常在org.hibernate.ejb.HibernatePersistence或javax.persistence.spi.Persistenceprovider上。我试过把所有的hibernate jar和依赖关系放在一个导出javax和hibernate包的插件中。我已经尝试在我已经控制的插件的清单中设置Eclipse Buddy策略等。

我一直没有找到任何解决方案,以加载弹簧和Hibernate之间的Eclipse RCP下使用双子座。我已经完成了在RCP中通过hibernate DAO项目,将所有hibernate jar放在与我的域和DAO类相同的插件中,因此只有我的类被导出。

在这一点上,我不认为移动到一个更友好的OSGI JPA提供商如OpenJPA或EclipseLink的是一个选项。

我找到了一个稍微相关的问题的答案,建议将所有的弹簧罐和依赖关系放入一个插件中,将hibernate罐和依赖关系放在另一个插件中,并设置好友策略。当涉及的大多数瓶子都是OSGi包时,这似乎很脏。

我想我可以创建包含DAL罐子,罐子冬眠和春季ORM罐子一个插件,所以它们都可以看到对方。

有没有一种干净的方式来得到它的工作?

回答

0

,如果你拥有它的核心软件包,添加所有的怀疑束为注册好友,并确保您有定义的包或束reuired否则有时哥们类加载行不通的。如果加载是从你发起的,捆绑eclipse好友策略应该级联。其他选项则是修改导致问题的目标包中的manfiest文件。

+0

谢谢邓肯。我采用了类似的方法来描述获得JPA DAO解决方案与Hibernate一起工作的方法,但没有Spring Data JPA,它将Hibernate jar和依赖项捆绑在一个插件中,并使用我的域模型插件和DAO插件进行好友加载。我不想修改任何第三方清单,因为这不是一个好的维护选项。因此,由于类加载器问题,我在Eclipse RCP环境中使用Spring Data JPA放弃了底线。 – KWilson 2012-04-06 13:56:47