繁体   English   中英

如何使Spring JPA,Hibernate和OSGi发挥出色?

[英]How to Get Spring JPA, Hibernate, and OSGi to Play Nice?

我正在尝试获取WAR文件以在Karaf OSGi容器中运行。 该应用程序可以在独立的Jetty 6.1.26中正常运行,但是当该应用程序在Karaf内部运行时,出现以下异常并且Karaf实例冻结:

WARN  org.hibernate.ejb.packaging.InputStreamZippedJarVisitor - Unable to find 
file (ignored): bundle://125.0:240/ java.lang.NullPointerException: in is null

注意,该应用程序不依赖于单独的OSGi捆绑包中的Hibernate; 它包括WEB-INF / lib中的休眠jar。

我已经检查了有关此帖子的信息: Equinox(OSGi)和JPA / Hibernate-Finding Entities 但是,该应用程序正在使用JPA,而不是直接使用Hibernate。 该应用程序的配置与本文中的第二个选项非常相似: 在persistence.xml和spring配置文件中配置数据源之间的区别 因此,我在Hibernate SessionFactory上没有可用于设置annotatedClasses属性的句柄。

关于如何克服异常的任何想法?

我与作者并行工作,以后将在这里向任何遇到此问题的人发布我们的解决方案。

抛出异常是因为Hibernate尝试将其jar解压缩以查找持久性类。 就像其他帖子提到的那样,OSGi不允许Hibernate充当类加载器,因此失败了。 解决方案是指定需要手动加载的所有类,然后告诉它不要尝试加载其他任何类。

我们使用了一个persistence.xml文件和一个orm.xml文件(我们使用了默认名称,因此我们不必在applicationContext.xml进行指定)。

我们的persistence.xml文件只是使用<mapping-file>标记指向orm.xml 它还包括<exclude-unlisted-classes/>标记,以防止休眠状态尝试加载其他类。

我们的orm.xml文件使用<entity class="path.to.my.class" metadata-complete="false"/>调出我们需要加载的每个实体类。 metadata-complete部分告诉hibernate使用在类中找到的注释来完成配置。

暂无
暂无

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

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