Could not locate Bitronix TransactionManager
Description
Activity
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..
Marko Bekhta August 14, 2024 at 7:57 AM
Glad you’ve figured it out!
Closing the ticket.
Olivier August 14, 2024 at 7:45 AM
i can’t close the ticket
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.
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 )
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();