Could not locate Bitronix TransactionManager

Description

Bonjour,

i try to migrate to spring boot 3 and i got this error when i try massindexer :
2024-08-13 17:21:30.451 [Hibernate Search - Mass indexing - BonusIndividual - Entity loading - 1] ERROR o.h.s.e.r.i.LogFailureHandler - HSEARCH000058: Exception occurred org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException: Could not locate Bitronix TransactionManager
Failing operation:
Loading and extracting entity data for entity 'BonusIndividual' during mass indexing

org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException: Could not locate Bitronix TransactionManager
at org.hibernate.engine.transaction.jta.platform.internal.BitronixJtaPlatform.locateTransactionManager(BitronixJtaPlatform.java:30) ~[hibernate-core-6.2.30.Final.jar:6.2.30.Final]
at org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform.retrieveTransactionManager(AbstractJtaPlatform.java:87) ~[hibernate-core-6.2.30.Final.jar:6.2.30.Final]
at org.hibernate.search.mapper.orm.common.spi.TransactionHelper.<init>(TransactionHelper.java:45) ~[hibernate-search-mapper-orm-orm6-6.2.4.Final.jar:6.2.4.Final]
at org.hibernate.search.mapper.orm.loading.impl.HibernateOrmMassEntityLoader.<init>(HibernateOrmMassEntityLoader.java:36) ~[hibernate-search-mapper-orm-orm6-6.2.4.Final.jar:6.2.4.Final]
at org.hibernate.search.mapper.orm.massindexing.impl.HibernateOrmMassIndexingContext$HibernateOrmMassIndexingLoadingStrategy.createEntityLoader(HibernateOrmMassIndexingContext.java:210) ~[hibernate-search-mapper-orm-orm6-6.2.4.Final.jar:6.2.4.Final]
at org.hibernate.search.mapper.pojo.massindexing.impl.PojoMassIndexingEntityLoadingRunnable.runWithFailureHandler(PojoMassIndexingEntityLoadingRunnable.java:61) ~[hibernate-search-mapper-pojo-base-6.2.4.Final.jar:6.2.4.Final]
at org.hibernate.search.mapper.pojo.massindexing.impl.PojoMassIndexingFailureHandledRunnable.run(PojoMassIndexingFailureHandledRunnable.java:38) ~[hibernate-search-mapper-pojo-base-6.2.4.Final.jar:6.2.4.Final]
at org.hibernate.search.util.common.impl.CancellableExecutionCompletableFuture$CompletingRunnable.run(CancellableExecutionCompletableFuture.java:70) ~[hibernate-search-util-common-6.2.4.Final.jar:6.2.4.Final]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
at java.lang.Thread.run(Thread.java:833) ~[?:?]
Caused by: java.lang.ClassCastException: class bitronix.tm.BitronixTransactionManager cannot be cast to class jakarta.transaction.TransactionManager (bitronix.tm.BitronixTransactionManager and jakarta.transaction.TransactionManager are in unnamed module of loader 'app')
at org.hibernate.engine.transaction.jta.platform.internal.BitronixJtaPlatform.locateTransactionManager(BitronixJtaPlatform.java:27) ~[hibernate-core-6.2.30.Final.jar:6.2.30.Final]
... 12 more

I searched everywhere to find a way to prevent them from using JTA. (Unless it has become mandatory, but I haven't seen anything like that in the documentation.)

i don’t understand why it’s not working.

i use :
Spring boot 3.2.8
hibernate 6.2.30.Final
hibernateSearch 6.2.4.Final

(all i goot with 6.1.8.Final + hibernate 5.6.15 + spring boot 2.7.18)

 

config :

@Bean @DependsOnDatabaseInitialization LocalContainerEntityManagerFactoryBean octoplusDBEntityManagerFactory() throws IOException { log.debug("Définit octoplusDBEntityManagerFactory"); LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean(); factoryBean.setDataSource(octoplusDBDataSource()); factoryBean.setPackagesToScan("net.octoplus.db"); HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); factoryBean.setJpaVendorAdapter(vendorAdapter); factoryBean.setJpaProperties(hibernateProperties()); return factoryBean; }
*/ @Bean @DependsOnDatabaseInitialization @Autowired PlatformTransactionManager octoplusDBTxMgr(EntityManagerFactory entityManagerFactory) throws IOException { log.info("Définit Transaction Manager"); JpaTransactionManager transactionManager = new JpaTransactionManager(); transactionManager.setEntityManagerFactory(entityManagerFactory); transactionManager.setNestedTransactionAllowed(true); transactionManager.setValidateExistingTransaction(true); transactionManager.setTransactionSynchronization(AbstractPlatformTransactionManager.SYNCHRONIZATION_ALWAYS); transactionManager.afterPropertiesSet(); return transactionManager; }



Properties hibernateProperties() { Properties p = new Properties(); p.setProperty("hibernate.dialect", env.getProperty("octoplusDB.dialect")); p.setProperty("hibernate.autoReconnect", env.getProperty("octoplusDB.autoReconnect")); p.setProperty("hibernate.hbm2ddl.auto", env.getProperty("octoplusDB.hbm2ddl.auto")); p.setProperty("hibernate.show_sql", env.getProperty("octoplusDB.show_sql")); p.setProperty("hibernate.format_sql", env.getProperty("octoplusDB.format_sql")); p.setProperty("hibernate.default_catalog", env.getProperty("octoplusDB.default_catalog")); p.setProperty("hibernate.default_schema", env.getProperty("octoplusDB.default_schema")); p.setProperty("hibernate.default_batch_fetch_size", env.getProperty("octoplusDB.batchsize")); p.setProperty("hibernate.jdbc.use_scrollable_resultsets", env.getProperty("octoplusDB.use_scrollable_resultsets")); p.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("octoplusDB.hibernate.cache.use_second_level_cache")); p.setProperty("hibernate.cache.use_query_cache", env.getProperty("octoplusDB.hibernate.cache.use_query_cache")); p.setProperty("hibernate.search.backend.directory.root",env.getProperty("octoplusDB.hibernate.search.default.indexBase")); p.setProperty("hibernate.search.backend.analysis.configurer", net.octoplus.server.config.RfAnalyzerConfigurer.class.getName()); // jcache + ehcache 3 p.setProperty("hibernate.cache.region.factory_class","org.hibernate.cache.jcache.JCacheRegionFactory"); p.setProperty("hibernate.javax.cache.provider","org.ehcache.jsr107.EhcacheCachingProvider"); p.setProperty("hibernate.javax.cache.missing_cache_strategy","create"); // pb avec cette lib p.setProperty( HibernateTypesContributor.ENABLE_TYPES_CONTRIBUTOR, Boolean.FALSE.toString() ); return p; }



@PersistenceContext protected EntityManager em;
SearchSession searchSession = Search.session(em); searchSession.massIndexer().startAndWait();



Activity

Show:

Olivier August 14, 2024 at 9:34 AM

i think i made a mistake .. i assign ticket to myselft when i try to close it … and now i appear in you planning.. slightly smiling face

Marko Bekhta August 14, 2024 at 7:57 AM

Glad you’ve figured it out! slightly smiling face

Closing the ticket.

Olivier August 14, 2024 at 7:45 AM

i can’t close the ticket slightly smiling face

Olivier August 14, 2024 at 7:44 AM

spring.jta.enabled= false does nothing.
there’s no dependencies which include bitronix.

org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformException: Could not locate Bitronix TransactionManager
at org.hibernate.engine.transaction.jta.platform.internal.BitronixJtaPlatform.locateTransactionManager => spring want it..

maybe because i got this lib :
+--- org.ehcache:ehcache-transactions -> 3.10.8
| +--- org.ehcache:ehcache:3.10.8 (*)
| \--- javax.transaction:jta:[1.1,2) -> 1.1

finally it’s working with this gradle config :

implementation "org.springframework:spring-orm" implementation "org.hibernate.orm:hibernate-core:${hibernateVersion}" annotationProcessor "org.hibernate.orm:hibernate-jpamodelgen:${hibernateVersion}"; implementation "org.hibernate.orm:hibernate-jcache" implementation "org.hibernate.orm:hibernate-ehcache:6.0.0.Alpha7" implementation "org.ehcache:ehcache::jakarta" implementation "com.sun.xml.bind:jaxb-core:2.3.0.1" implementation "javax.xml.bind:jaxb-api:2.3.1" implementation "com.sun.xml.bind:jaxb-impl:2.3.1" implementation "com.fasterxml.jackson.datatype:jackson-datatype-hibernate6:${jacksonVersion}" implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jacksonVersion}" implementation "org.hibernate.search:hibernate-search-mapper-orm-orm6:${hibernateSearch}" implementation "org.hibernate.search:hibernate-search-backend-lucene:${hibernateSearch}"

 

for information, the bad one :


implementation "org.springframework:spring-orm" implementation "org.hibernate.orm:hibernate-core:${hibernateVersion}" annotationProcessor "org.hibernate.orm:hibernate-jpamodelgen:${hibernateVersion}"; /// jcache + ehcache 3 implementation "org.hibernate.orm:hibernate-jcache" implementation "org.hibernate.orm:hibernate-ehcache:6.0.0.Alpha7" implementation "org.ehcache:ehcache::jakarta" implementation "org.ehcache:ehcache-transactions" implementation 'javax.cache:cache-api:1.1.1' implementation "org.glassfish.jaxb:jaxb-xjc:4.0.4" implementation "com.sun.xml.bind:jaxb-impl:4.0.4" implementation "org.glassfish.jaxb:jaxb-runtime:4.0.4" implementation 'org.glassfish.jaxb:jaxb-xjc:4.0.4' implementation 'org.glassfish.jaxb:jaxb-core:4.0.4' implementation "com.fasterxml.jackson.datatype:jackson-datatype-hibernate6:${jacksonVersion}" implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:${jacksonVersion}" implementation "org.hibernate.search:hibernate-search-mapper-orm-orm6:${hibernateSearch}" implementation "org.hibernate.search:hibernate-search-backend-lucene:${hibernateSearch}"

 

Thanks a lot for your help. slightly smiling face

Marko Bekhta August 13, 2024 at 4:57 PM

hmm ok, I see… well apparently BitronixTransactionManager comes from somewhere … you could try looking at the dependencies you have, e.g. with maven: mvn dependency:tree to see if any of your dependencies bring the BitronixTransactionManager and then eliminate it, or you could try disabling the JTA autoconfiguration in Spring (spring.jta.enabled=false https://docs.spring.io/spring-boot/reference/io/jta.html )

Done

Details

Assignee

Reporter

Labels

Components

Affects versions

Priority

Created August 13, 2024 at 4:18 PM
Updated August 14, 2024 at 9:34 AM
Resolved August 14, 2024 at 7:58 AM

Flag notifications