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

无法从web应用程序类路径加载Jadira Hibernate模块

邹缪文
2023-03-14

我的主SessionFactory对象由扩展org.springframework.orm.hibernate5.LocalSessionFactoryBean的工厂处理。

在LSFB的AfterPropertiesSet上,Hibernate扫描模块和服务。

当Jadira jar文件出现在web类路径中时,我当前得到以下错误

Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.jadira.usertype.dateandtime.joda.integrator.UserTypeJodaTimeHibernateIntegrator not found
    at java.util.ServiceLoader.fail(ServiceLoader.java:231)
    at java.util.ServiceLoader.access$300(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:365)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:340)
    at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:40)
    at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:213)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.getMetadataSources(LocalSessionFactoryBean.java:364)
    at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:399)
    at com.acme.AnnotationSessionFactoryBean.afterPropertiesSet(AnnotationSessionFactoryBean.java:203)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 35 more

>

  • LocalSessionFactoryBeanAfterPropertiesSet使用默认MetadataSources
  • 调用 LocalSessionFactoryBuilder的构造函数
  • GetMetadataSources首次调用时,使用来自ResourcePatternResolver的ClassLoader构建BootstrapServiceRegistryBuilder,它是WebAppClassloader(可以查看JAR)
  • 当代码深入到ServiceLoader类时,它会尝试使用ClassLoaderorg.jadira.usertype.dateandtime.joda.integrator.usertypeJodimeHibernateIntegrator实例化类org.hibernate.boot.registry.classloading.internal.classloaderServiceImpl$aggregatedClassloader@70d5297f
  • 代码中断到下面一行,尽管有Java源代码,但我无法对其进行调试

        try {
            c = Class.forName(cn, false, loader);
        } catch (ClassNotFoundException x) {
            [OP: exception is swallowed]
            fail(service,
                 "Provider " + cn + " not found");
        }
    

    我不明白为什么会这样。为了加载Hibernate服务,有什么特别的事情要做吗?如何处理这些ServiceConfigurationError

  • 共有1个答案

    华睿识
    2023-03-14

    问题仅仅是由于Java版本不匹配和ClassNotFoundException被ServiceRegistry吞噬。

    碰巧(我没有提到)Jadira6.x需要Java8/Hibernate5.2,但我使用的是Java7。

    CNFE的根本原因是UnsupportedClassVersionError,这可以通过运行一个简单的Main尝试实例化所需的服务类来获得。在Java8上运行应用程序有助于理解这一点(因为错误是API与HB 5.1不兼容),所以我不得不将Jadira降级到5.x

     类似资料:
    • 我需要将sqljdbc42.jar库添加到类路径中,以便连接到Azure SQL数据库。如何(如果可能的话)在Azure Web Service-Web App(Java with Tomcat server)中做到这一点。添加JDBC库还有其他方法吗? 连接字符串: 复制自门户:jdbc:sqlserver://testnabaza.database.windows.net:1433;datab

    • 无法加载web应用程序,控制台显示以下内容 InstallationHandlers。isRegistered()失败,原因:sun.security.validator。ValidatorException:PKIX路径生成失败:sun.security.provider.certpath。SunCertPathBuilderException:无法找到请求目标的有效证书路径 这意味着什么?知道

    • My仅包含一个对SLF4J的引用: 我检查了那个URL,它确实提供了一个解决方案:“在类路径上放置一个(而且只有一个)slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar或logback-classic.jar应该可以解决问题。” 我的问题是:哪个类路径? 系统的%classpath%?(我没有!我需要专门为此创建它) E

    • 大家好!我刚刚发现我的codename one应用程序在模拟器和android上崩溃,甚至没有加载第一页。以下是我收到的错误:java.lang.NoClassDefFoundError:javabc/SecureRandom at com.cloudinary.cloudnary.(cloudinaray.java:113)

    • 我正在用RubyonRails编写这个应用程序,我将应用程序设置为从特定路径提供GeoJson。我想让Mapbox从指定路径获取GeoJson,并将其添加到地图中。下面是我创建地图的javascript代码 当我导航到时,我得到以下响应。 地图加载得很好,但没有形状。令人沮丧的是,浏览器中没有错误,GeoJson在GeoJson.io上签出。 我做错了什么?

    • 问题内容: 我有一个遵循标准目录布局的项目设置(虽然未使用Maven): 本机DLL位于资源文件夹中,而源位于Java文件夹中。resources文件夹是Java类路径的成员。 我现在想加载DLL,而不必设置JRE 选项或设置变量,以便可以通过简单的双击来启动生成的jar文件。 运行jar文件时是否可以将资源文件夹添加到库搜索路径而无需进行其他配置?例如,设置与清单中的相似? 问题答案: 直到今天