当前位置: 首页 > 知识库问答 >
问题:

Hibernate和OSGi集成,无法加载Hibernate配置文件

皮煜
2023-03-14

我正在创建OSGi动态包,它应该与数据库通信,我使用Hibernate,就像我在非OSGI应用程序中使用它一样。我将原始的hibernate jar放在OSGi项目的lib目录中,并确保这些jar位于项目的构建路径和运行时类路径上,我复制了OSGi捆绑jar根目录中的所有配置文件(即hibernate-cfg.xml)。当我在OSGi容器中执行我的捆绑包(JAR)时,它会因找不到hibernate-cfg.xml文件而抛出错误。

也许有人知道如何做到这一点?

此刻我正跟随错误

2013-10-14 14:56:10错误HibernateUtil:41-SessionFactory创建失败:org。冬眠Hibernate异常:/hibernate。cfg。未找到xml

提前谢谢你

共有1个答案

仉伟兆
2023-03-14

请遵循步骤:

>

  • 在hibernate.org下载Hibernate zip文件(现在是Hibernate4.3.0Final),但我用Hibernate 4.2.8Final测试Ok

    将项目A创建为osgi项目:(项目A将包含Hibernate osgi加载器和hibernate库,没有您的实体类,也没有hibernate.cfg.xml)提取hibernate-presase-4.2.8。Final.zip到目录,复制\hibernate-presase-4.2.8中的包源(org...)。Final\project\hibernate-osgi\src\main\java到项目A的src中。

     Setup Activator class:  (MANIFEST.MF)
      Bundle-Activator: org.hibernate.osgi.HibernateBundleActivator
    
     Create directory 'libs/hiber-4.2.8' in project A:
     Copy All <DIR>\hibernate-release-4.2.8.Final\lib to your 'libs/hiber-4.2.8',
    

    设置包类路径:(MANIFEST.MF)

        Bundle-ClassPath: .,
         libs/hiber-4.2.8/jpa/hibernate-entitymanager-4.2.8.Final.jar,
         libs/hiber-4.2.8/optional/ehcache/ehcache-core-2.4.3.jar,
         libs/hiber-4.2.8/optional/ehcache/slf4j-api-1.6.1.jar,
         libs/hiber-4.2.8/required/antlr-2.7.7.jar,
         libs/hiber-4.2.8/required/dom4j-1.6.1.jar,
         libs/hiber-4.2.8/required/hibernate-commons-annotations-4.0.2.Final.jar,
         libs/hiber-4.2.8/required/hibernate-core-4.2.8.Final.jar,
         libs/hiber-4.2.8/required/hibernate-jpa-2.0-api-1.0.1.Final.jar,
         libs/hiber-4.2.8/required/javassist-3.18.1-GA.jar,
         libs/hiber-4.2.8/required/jboss-logging-3.1.0.GA.jar,
         libs/hiber-4.2.8/required/jboss-transaction-api_1.1_spec-1.0.1.Final.jar
    

    设置导出包:

    Export-Package: javax.persistence,
    org.hibernate,
    org.hibernate.annotations,
    org.hibernate.cfg,
    org.hibernate.criterion,
    org.hibernate.dialect,
    org.hibernate.dialect.function,
    org.hibernate.exception,
    org.hibernate.internal.util,
    org.hibernate.jdbc,
    org.hibernate.mapping,
    org.hibernate.osgi,
    org.hibernate.property,
    org.hibernate.service,
    org.hibernate.tool.hbm2ddl,
    org.hibernate.type     
    

    ==

    创建Osgi项目B,在项目B中使用实体类file hibernate。cfg。xml,Jdbc驱动程序库,您可以在B osgi中声明。

    在B激活剂中:

    public void start(BundleContext bundleContext) throws Exception {
        Activator.context = bundleContext;
        this.loadOsgiHibernateService(bundleContext);
    }
    
    private void loadOsgiHibernateService(BundleContext bundleContext) {
    
        ServiceReference<?> ref = context
                .getServiceReference(SessionFactory.class.getName());
        if (ref != null) {
            SessionFactory factory = (SessionFactory) context.getService(ref);
                    // Ready session factory. 
                    Session session= factory.getCurrentSession();
                }
    } 
    

  •  类似资料:
    • 问题内容: 我在Hibernate中是一个全新的人,并得到了这样的堆栈跟踪: 我的hibernate.cfg.xml和TracksEntity.java是由Intellij Idea自动生成的: TracksEntity.java:包模型; hibernate.cfg.xml: 到底是什么问题?我发现找不到它,但是为什么呢? 问题答案: 听起来很傻,但是我将实体类放在与映射中不同的包中。并且hib

    • 主要内容:数据库设置:,Hibernate的配置:,环境设置:,Hibernate 类:,动作类:,创建视图文件:,Struts 配置:Hibernate是一个高性能的对象/关系持久性和查询服务许可下的开源GNU通用公共许可证(LGPL),并免费下载。在这一章中,我们要学习如何实现Struts2与Hibernate集成。如果你不熟悉与Hibernate,那么可以查看我们的Hibernate教程。 数据库设置: 在本教程中,我会使用“struts2_tutorial”MySQL数据库。我连接到我的

    • 问题内容: 而不是将数据库操作分散在四个(osgi)包中,所有操作都在这里稍有不同。我想创建一个负责所有持久性问题的(简单)OSGi捆绑包。我觉得这并不像听起来那么简单,因为“每捆都有唯一的类加载器”。因此,如果有人知道这种问题的解决方案,我将非常感激。 问题答案: (如果您正在使用hibernate注释) 在通知Hibernate捆绑包有关注释类的信息后,保存所有Entities类加载器。 然后

    • 问题内容: 大家好,我是hibernate的初学者,我知道这里有很多类似的问题。我试图从他们那里解决,但我做不到。我还试图在dtd中将SYSTEM从PUBLIC更改为,但是它不起作用。我用谷歌搜索它,但是到处都显示dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我正在使用hibernate版本4.3.6,但仍无法正常工作。请帮帮我。 这是我的userDetails类。 软

    • 嘿,伙计们,我是冬眠的初学者,我知道这里有很多类似的问题。我试图从他们那里解决问题,但我做不到。我还试图在dtd中更改公共系统,但它不起作用。我在google上搜索了它,但它显示的每个地方都有dtd语句错误。 这是我的配置文件。 我尝试将版本3.0更改为4.0,因为我使用的是hibernate版本4.3.6,但它仍然不起作用。请帮帮我。 这是我的用户详细信息类... 包装组织。冬眠src; 我已将