HSEARCH700119:检索Jandex索引异常问题求助
问题:Jakarta EE 10 搭配 Hibernate Search 6.2.2 启动失败
尝试将Hibernate Search 6.2.2与Jakarta EE 10集成时启动失败,此前Jakarta EE 8 + Hibernate 5 + Payara 5 + Hibernate Search 6.1.8的组合运行正常。
当前环境
- Payara社区服务器 - 6.2023.9
- Hibernate ORM 6.3.1
- Hibernate Search 6.2.2
- MariaDB 10+
- Jakarta EE 10
- OpenJDK 17
persistence.xml
<?xml version="1.0" encoding="UTF-8"?> <persistence version="3.0" xmlns="https://jakarta.ee/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"> <persistence-unit name="myPOS1PU" transaction-type="JTA"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <jta-data-source>java:app/jdbc/myPOSDS</jta-data-source> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/> <property name="hibernate.cache.region.factory_class" value="jcache"/> <property name="hibernate.javax.cache.provider" value="org.ehcache.jsr107.EhcacheCachingProvider"/> <property name="hibernate.javax.cache.missing_cache_strategy" value="create"/> <property name="hibernate.archive.autodetection" value="class, hbm, jar"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MariaDB106Dialect"/> <property name="hibernate.dialect.storage_engine" value="innodb"/> <property name="hibernate.id.new_generator_mappings" value="false"/> <property name="hibernate.cache.use_query_cache" value="true"/> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.search.backend.directory.root" value="/Users/peter/hbrpos/"/> <property name="hibernate.search.backend.io.commit_interval"value= "500"/> <property name="hibernate.search.backend.directory.type" value= "local-filesystem"/> <property name="jakarta.persistence.schema-generation.database.action" value="none"/> <property name="hibernate.enhancer.enableDirtyTracking" value="false"/> <property name="hibernate.enhancer.enableLazyInitialization" value="false"/> </properties> </persistence-unit> </persistence>
pom.xml
<properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jakartaee>10.0.0</jakartaee> </properties> <dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>${jakartaee}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-jcache</artifactId> <version>6.3.1.Final</version> </dependency> <dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-core</artifactId> <version>6.3.1.Final</version> </dependency> <dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-mapper-orm-orm6</artifactId> <version>6.2.2.Final</version> </dependency> <dependency> <groupId>org.hibernate.search</groupId> <artifactId>hibernate-search-backend-lucene</artifactId> <version>6.2.2.Final</version> </dependency> </dependencies>
错误信息
jakarta.persistence.PersistenceException: [PersistenceUnit: myPOS1PU] Unable to build Hibernate SessionFactory at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1591) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1512) at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:142) at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:207) at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:114) at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:267) at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:571) at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:286) at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:183) at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:1255) .. Caused by: org.hibernate.search.util.common.SearchException: HSEARCH700119: Exception while retrieving the Jandex index for code source location 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': HSEARCH900013: Exception while accessing Jandex index for 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': HSEARCH900014: Exception while building Jandex index for 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': HSEARCH900016: Cannot open filesystem for code source at 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': Provider "jar" not found at org.hibernate.search.mapper.pojo.mapping.definition.annotation.impl.AnnotationMappingConfigurationContextImpl.jandexIndexForCodeSourceLocation(AnnotationMappingConfigurationContextImpl.java:234) at org.hibernate.search.mapper.pojo.mapping.definition.annotation.impl.AnnotationMappingConfigurationContextImpl.buildJandexIndex(AnnotationMappingConfigurationContextImpl.java:201) at org.hibernate.search.mapper.pojo.mapping.definition.annotation.impl.AnnotationMappingConfigurationContextImpl.lambda$configure$0(AnnotationMappingConfigurationContextImpl.java:127) at org.hibernate.search.util.common.jar.spi.JandexBehavior.doWithJandex(JandexBehavior.java:17) at org.hibernate.search.mapper.pojo.mapping.definition.annotation.impl.AnnotationMappingConfigurationContextImpl.configure(AnnotationMappingConfigurationContextImpl.java:126) at org.hibernate.search.mapper.pojo.mapping.spi.AbstractPojoMappingInitiator.configure(AbstractPojoMappingInitiator.java:134) at org.hibernate.search.mapper.orm.mapping.impl.HibernateOrmMappingInitiator.configure(HibernateOrmMappingInitiator.java:163) at org.hibernate.search.engine.common.impl.SearchIntegrationBuilder$MappingBuildingState.collect(SearchIntegrationBuilder.java:270) at org.hibernate.search.engine.common.impl.SearchIntegrationBuilder.prepareBuild(SearchIntegrationBuilder.java:148) at org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchPreIntegrationService$NotBooted.doBootFirstPhase(HibernateSearchPreIntegrationService.java:279) at org.hibernate.search.mapper.orm.bootstrap.impl.HibernateOrmIntegrationBooterImpl.bootNow(HibernateOrmIntegrationBooterImpl.java:179) at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147) at org.hibernate.search.mapper.orm.bootstrap.impl.HibernateSearchSessionFactoryObserver.sessionFactoryCreated(HibernateSearchSessionFactoryObserver.java:41) at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:295) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:450) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1507) .. 44 more Caused by: org.hibernate.search.util.common.SearchException: HSEARCH900013: Exception while accessing Jandex index for 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': HSEARCH900014: Exception while building Jandex index for 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': HSEARCH900016: Cannot open filesystem for code source at 'file:/Users/peter/Netbeans/Apps/myPOSNEW/target/myPOSNEW-1.7.1/WEB-INF/classes/com/mypos/authen/admin/entity/Permissions.class': Provider "jar" not found at org.hibernate.search.util.common.jar.impl.JandexUtils.readOrBuildIndex(JandexUtils.java:113) at org.hibernate.search.mapper.pojo.mapping.definition.annotation.impl.AnnotationMappingConfigurationContextImpl.jandexIndexForCodeSourceLocation(AnnotationMappingConfigurationContextImpl.java:227) .. 62 more
解决思路
禁用Jandex索引扫描:在
persistence.xml的<properties>中添加以下配置,让Hibernate Search使用反射替代Jandex索引处理实体映射,绕过文件系统访问问题:<property name="hibernate.search.mapping.jandex.enabled" value="false"/>调整Payara类加载策略:确认Payara 6允许应用访问JDK的
jdk.zipfs模块(jar文件系统提供者),可在Payara域配置中添加模块依赖,或将应用类加载策略设置为delegate first。显式添加Jandex依赖:在
pom.xml中加入Jandex依赖,确保类加载器能正确获取相关类:<dependency> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> <version>2.4.2.Final</version> <scope>provided</scope> </dependency>验证版本兼容性:尝试将Hibernate ORM降级到6.2.x版本(如6.2.13.Final),确认是否因版本兼容问题导致异常。
检查部署结构:确认Payara部署应用时正确解压WAR包,WEB-INF/classes为正常目录结构,而非被打包成JAR文件。
内容的提问来源于stack exchange,提问作者PeterL355
相关产品推荐
相关产品推荐

