Ada*_*dam 8 java spring osgi hibernate jpa
我试图获取一个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
Run Code Online (Sandbox Code Playgroud)
请注意,应用程序不依赖于单独的OSGi包中的Hibernate; 它包括WEB-INF/lib中的hibernate 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
文件只是指向orm.xml
使用<mapping-file>
标签。它还包含<exclude-unlisted-classes/>
防止 hibernate 尝试加载其他类的标记。
我们的orm.xml
文件用于<entity class="path.to.my.class" metadata-complete="false"/>
调出我们需要加载的每个实体类。该metadata-complete
部分告诉 hibernate 使用类中找到的注释来完成配置。
归档时间: |
|
查看次数: |
3512 次 |
最近记录: |