Tables not recognised on Axon startup

Hey everyone,

I had to implement a custom Spring Boot application that implements multiple datasources.
This prevents me from using the Axon auto configuration for Spring Boot, meaning I have to provide Axon with all the required beans, starting from a standard DataSource which I want axon to use.

@Autowired
    public void configure(
            EventProcessingConfigurer config, AxonPropagatingErrorHandler errorHandler) {
        config.registerDefaultListenerInvocationErrorHandler(conf -> errorHandler);
    }

    @Bean
    public IdentifierFactory getIdentifierFactory() {
        return IdentifierFactory.getInstance();
    }

    @Bean
    @ConfigurationProperties(prefix = "custom.datasource")
    DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    /************************************************************************
     * Configuring JPA
     ************************************************************************/

    public JpaProperties customJpaProperties() {
        final JpaProperties properties = new JpaProperties();
        properties.setProperties(jpaProperties());
        return properties;
    }

    @Bean
    public EntityManagerFactoryBuilder entityManagerFactoryBuilder() {
        return new EntityManagerFactoryBuilder(
                new HibernateJpaVendorAdapter(), jpaProperties(), null);
    }

    @Bean
    LocalContainerEntityManagerFactoryBean entityManagerFactory(
            EntityManagerFactoryBuilder builder, DataSource dataSource) {
        return builder.dataSource(dataSource)
                .properties(jpaProperties())
                .packages(
                        "org.axonframework.eventhandling.tokenstore",
                        "org.axonframework.eventsourcing.eventstore.jpa",
                        "org.axonframework.modelling.saga.repository.jpa")
                .persistenceUnit("punit")
                .build();
    }

    @Bean
    PlatformTransactionManager platformTransactionManager(
            EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

    @Bean
    EntityManager sharedEntityManager(
            EntityManagerFactory entityManagerFactory) {
        return SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory);
    }

    /************************************************************************
     * Axon Framework specific things
     ************************************************************************/

    @Bean
    EntityManagerProvider entityManagerProvider(
            EntityManager entityManager) {
        return new SimpleEntityManagerProvider(entityManager);
    }

    @Bean
    TransactionManager transactionManager(
            PlatformTransactionManager transactionManager) {
        return new SpringTransactionManager(transactionManager);
    }

    @Bean
    PersistenceExceptionResolver dataSourcePER(DataSource dataSource)
            throws SQLException {
        return new SQLErrorCodesResolver(dataSource);
    }

    @Bean
    @Primary
    EventStorageEngine storageEngine(
            Serializer eventSerializer,
            Serializer snapshotSerializer,
            DataSource dataSource,
            EntityManagerProvider entityManagerProvider,
            PersistenceExceptionResolver persistenceExceptionResolver,
            TransactionManager transactionManager)
            throws SQLException {
        return JpaEventStorageEngine.builder()
                .eventSerializer(eventSerializer)
                .snapshotSerializer(snapshotSerializer)
                .dataSource(dataSource)
                .entityManagerProvider(entityManagerProvider)
                .persistenceExceptionResolver(persistenceExceptionResolver)
                .transactionManager(transactionManager)
                .build();
    }

    @Bean
    public PersistenceExceptionResolver dataSourcePersistenceExceptionResolver(
            DataSource dataSource) throws SQLException {
        return new SQLErrorCodesResolver(dataSource);
    }

    @ConditionalOnMissingBean({
            DataSource.class,
            PersistenceExceptionResolver.class,
            EventStore.class
    })
    @Bean
    public PersistenceExceptionResolver jdbcSQLErrorCodesResolver() {
        return new JdbcSQLErrorCodesResolver();
    }

    @Bean
    public ConnectionProvider connectionProvider(DataSource dataSource) {
        return new UnitOfWorkAwareConnectionProviderWrapper(
                new SpringDataSourceConnectionProvider(dataSource));
    }

    @Bean
    public TokenStore tokenStore(ConnectionProvider connectionProvider, Serializer serializer) {
        return JdbcTokenStore.builder()
                .connectionProvider(connectionProvider)
                .serializer(serializer)
                .build();
    }

    @Bean
    public JdbcSagaStore sagaStore(
            ConnectionProvider connectionProvider, Serializer serializer) {
        return JdbcSagaStore.builder()
                .connectionProvider(connectionProvider)
                .sqlSchema(new GenericSagaSqlSchema())
                .serializer(serializer)
                .build();
    }

    @Bean
    @Primary
    JpaSagaStore sagaStore(
            Serializer serializer, EntityManagerProvider entityManagerProvider) {
        return JpaSagaStore.builder()
                .entityManagerProvider(entityManagerProvider)
                .serializer(serializer)
                .build();
    }

    @Bean
    @Primary
    SimpleCommandBus commandBus(
            AxonConfiguration axonConfiguration,
            DuplicateCommandHandlerResolver duplicateCommandHandlerResolver,
            TransactionManager txManager) {
        SimpleCommandBus commandBus =
                SimpleCommandBus.builder()
                        .transactionManager(txManager)
                        .duplicateCommandHandlerResolver(duplicateCommandHandlerResolver)
                        .messageMonitor(
                                axonConfiguration.messageMonitor(CommandBus.class, "commandBus"))
                        .build();
        commandBus.registerHandlerInterceptor(
                new CorrelationDataInterceptor(axonConfiguration.correlationDataProviders()));
        return commandBus;
    }

    private Map<String, String> jpaProperties() {
        Map<String, String> props = new HashMap<>();
        props.put("hibernate.hbm2ddl.auto", "none");
        props.put("hibernate.show_sql", "true");
        props.put("hibernate.format_sql", "true");
        props.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
        props.put("hibernate.database_platform", "org.hibernate.dialect.PostgreSQL9Dialect");

        return props;
    }

(On version 4.2.1 of axon, with spring boot 2.5.7 this works fine: token_entry is the physical table name, and Axon is able to resolve it and move forward.) – Update: does not work fine, just does not stop the application from starting.
Upgrading Axon to 4.5.7 and Spring Boot to 2.6.2 results in getting the error that the table “tokenentry” is not found.

(Was there a significant change done to Axon? Or is Spring Boot to blame?) ----
Update: while the error is different, on the old versions I have a similar problem:

2022-02-08 20:05:37,573 - WARN - [EventProcessor[com.example.test]-0] - [TrackingEventProcessor.java:1208] - [::] - Fetch Segments for Processor 'com.example.test.projection' failed: Could not load segments for processor [com.example.test.projection]. Preparing for retry in 60s

While debugging, I get the same error in fetchSegments#JdbcTokenStore.java - the tokenentry table does not exist.

How can I force axon to use a different physical naming strategy?

Thanks

So, I was missing the JpaTokenStore bean.
Now I get:

2022-02-08 22:06:29,612 - WARN - [EventProcessor[com.syncier.marketplace.servicemanagement.projection]-0] - [TrackingEventProcessor.java:1208] - [::] - Fetch Segments for Processor 'com.xxx' failed: no transaction is in progress. Preparing for retry in 60s

I guess my TransactionManager beans are not correctly configured? Any hints here?

@rcoo what exactly are you trying to achieve here? Do you want to use different data sources for saga, token store and projections, or do you want to implement some kind of multi-tenancy (data source per tenant)?

Hey! I am trying to achieve a multi-tenancy - data source per tenant. However, for this use case, axon is not multi-tenancy aware; meaning: I want axon to use a specific datasource, but not necessarily switch between datasources on runtime.
I had to override Spring Boot’s default DataSource which now supports datasource routing via a lookup key. But I want Axon completely isolated from this logic and using a fixed, individual, datasource.

I have streamlined by Axon custom configuration and made it more simple and aligned with other forum posts I saw:

@Configuration
@Slf4j
public class AxonConfig {

    @Autowired
    public void configure(
            EventProcessingConfigurer config, AxonPropagatingErrorHandler errorHandler) {
        config.registerDefaultListenerInvocationErrorHandler(conf -> errorHandler);
    }

    @Bean
    public IdentifierFactory getIdentifierFactory() {
        return IdentifierFactory.getInstance();
    }

    @Bean
    @Qualifier("tst")
    DataSource tstDataSource(final TenantsConfiguration tenantsConfiguration) {

        final DatabaseConfiguration tstDbConfig = tenantsConfiguration.getDatasources().get("tst");
        final DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName(tstDbConfig.getDriverClassName());
        dataSourceBuilder.url(tstDbConfig.getUrl());
        dataSourceBuilder.username(tstDbConfig.getUsername());
        dataSourceBuilder.password(tstDbConfig.getPassword());
        return dataSourceBuilder.build();
    }

    @Bean
    @Qualifier("tst")
    public LocalContainerEntityManagerFactoryBean tstEntityManagerFactory(
            EntityManagerFactoryBuilder builder, @Qualifier("tst") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages(
                        "org.axonframework.eventsourcing.eventstore.jpa",
                        "org.axonframework.eventhandling.tokenstore.jpa",
                        "org.axonframework.modelling.saga.repository.jpa"
                )
                .properties(jpaProperties())
                .build();
    }

    @Bean
    @Qualifier("tst")
    public PlatformTransactionManager platformTransactionManager(@Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory) {
        return new JpaTransactionManager(tstEntityManagerFactory.getObject());
    }

    @Bean
    @Qualifier("tst")
    public TransactionManager springTransactionManager(@Qualifier("tst") PlatformTransactionManager platformTransactionManager) {
        return new SpringTransactionManager(platformTransactionManager);
    }

    @Bean
    public EventStorageEngine storageEngine(Serializer defaultSerializer,
                                            PersistenceExceptionResolver persistenceExceptionResolver,
                                            @Qualifier("eventSerializer") Serializer eventSerializer,
                                            AxonConfiguration configuration,
                                            @Qualifier("tst") LocalContainerEntityManagerFactoryBean eventsEntityManagerFactory,
                                            @Qualifier("tst") TransactionManager springTransactionManager) {
        ContainerManagedEntityManagerProvider containerManagedEntityManagerProvider =  new ContainerManagedEntityManagerProvider();
        containerManagedEntityManagerProvider.setEntityManager(eventsEntityManagerFactory.getObject().createEntityManager());
        return JpaEventStorageEngine.builder()
                .snapshotSerializer(defaultSerializer)
                .upcasterChain(configuration.upcasterChain())
                .persistenceExceptionResolver(persistenceExceptionResolver)
                .eventSerializer(eventSerializer)
                .entityManagerProvider(containerManagedEntityManagerProvider)
                .transactionManager(springTransactionManager)
                .build();
    }


    @Bean("tokenStore")
    public TokenStore jpaTokenStore(@Qualifier("eventSerializer") Serializer eventSerializer , @Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory)  {
        return JpaTokenStore.builder()
                .entityManagerProvider(new SimpleEntityManagerProvider(tstEntityManagerFactory.getObject().createEntityManager()))
                .serializer(eventSerializer)
                .build();
    }

    @Bean("sagaStore")
    public JpaSagaStore jpaSagaStore(@Qualifier("eventSerializer") Serializer eventSerializer, @Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory){
        return JpaSagaStore.builder()
                .entityManagerProvider(new SimpleEntityManagerProvider(
                        tstEntityManagerFactory.getObject().createEntityManager()))
                .serializer(eventSerializer)
                .build();
    }


    private Map<String, String> jpaProperties() {
        Map<String, String> props = new HashMap<>();
        props.put("hibernate.physical_naming_strategy",
                CamelCaseToUnderscoresNamingStrategy.class.getName());
        props.put("hibernate.implicit_naming_strategy",
                SpringImplicitNamingStrategy.class.getName());
        props.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
        props.put("hibernate.database_platform", "org.hibernate.dialect.PostgreSQL9Dialect");

        return props;
    }
}

However, when running, I get the following exception:

09 10:50:47,703 - INFO - [EventProcessor[com.tst.query]-0] - [TrackingEventProcessor.java:1138] - [::] - An error occurred while attempting to claim a token for segment: 0. Will retry later...

javax.persistence.TransactionRequiredException: no transaction is in progress

at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:445)

at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3478)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3385)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.loadToken(JpaTokenStore.java:246)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.fetchToken(JpaTokenStore.java:197)

at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.lambda$run$2(TrackingEventProcessor.java:1096)

at org.axonframework.common.transaction.TransactionManager.executeInTransaction(TransactionManager.java:47)

at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1095)

at java.base/java.lang.Thread.run(Thread.java:829)

2022-02-09 10:50:47,753 - INFO - [main] - [DefaultLoadEventListener.java:116] - [::] - HHH000327: Error performing load command

org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:123)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:26)

at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:48)

at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)

at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)

at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3214)

at org.hibernate.persister.entity.Loadable.hydrate(Loadable.java:94)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:342)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:269)

at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:80)

at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:288)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractRows(ResultSetProcessorImpl.java:157)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:94)

at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)

at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)

at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4521)

at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4511)

at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)

at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)

at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)

at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)

at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)

at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)

at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1226)

at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1215)

at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:201)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2819)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2763)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3395)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.getConfig(JpaTokenStore.java:272)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:263)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$calculateIdentifier$4(TrackingEventProcessor.java:245)

at org.axonframework.common.transaction.TransactionManager.fetchInTransaction(TransactionManager.java:70)

at org.axonframework.eventhandling.TrackingEventProcessor.calculateIdentifier(TrackingEventProcessor.java:244)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$getTokenStoreIdentifier$3(TrackingEventProcessor.java:240)

at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(AtomicReference.java:209)

at org.axonframework.eventhandling.TrackingEventProcessor.getTokenStoreIdentifier(TrackingEventProcessor.java:240)

at org.axonframework.axonserver.connector.processor.StreamingEventProcessorInfoMessage.describe(StreamingEventProcessorInfoMessage.java:58)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$infoSupplier$1(EventProcessorControlService.java:115)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.lambda$sendScheduledProcessorInfo$3(ControlChannelImpl.java:245)

at java.base/java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4772)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.sendScheduledProcessorInfo(ControlChannelImpl.java:245)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.registerEventProcessor(ControlChannelImpl.java:226)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$start$0(EventProcessorControlService.java:105)

at java.base/java.util.HashMap.forEach(HashMap.java:1337)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.start(EventProcessorControlService.java:103)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:121)

at org.axonframework.config.LifecycleHandlerInspector.lambda$null$0(LifecycleHandlerInspector.java:91)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)

at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)

at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)

at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:558)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:740)

at org.axonframework.config.DefaultConfigurer.invokeStartHandlers(DefaultConfigurer.java:687)

at org.axonframework.config.DefaultConfigurer$ConfigurationImpl.start(DefaultConfigurer.java:811)

at org.axonframework.spring.config.AxonConfiguration.start(AxonConfiguration.java:199)

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)

at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)

at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)

at java.base/java.lang.Iterable.forEach(Iterable.java:75)

at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)

at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)

at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)

at com.tst.main(Main.java:19)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Caused by: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:243)

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:229)

at org.postgresql.jdbc.AbstractBlobClob.getLo(AbstractBlobClob.java:272)

at org.postgresql.jdbc.AbstractBlobClob.getBinaryStream(AbstractBlobClob.java:117)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:120)

... 98 common frames omitted

The application then shuts down and provides more logs:

org.springframework.context.ApplicationContextException: Failed to start bean 'org.axonframework.spring.config.AxonConfiguration'; nested exception is org.axonframework.lifecycle.LifecycleHandlerInvocationException: One of the start handlers in phase [null] failed with the following exception:

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181)

at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)

at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)

at java.base/java.lang.Iterable.forEach(Iterable.java:75)

at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)

at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)

at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)

at com.tst.main(Main.java:19)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Caused by: org.axonframework.lifecycle.LifecycleHandlerInvocationException: One of the start handlers in phase [null] failed with the following exception:

at org.axonframework.config.DefaultConfigurer.lambda$invokeStartHandlers$35(DefaultConfigurer.java:693)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:744)

at org.axonframework.config.DefaultConfigurer.invokeStartHandlers(DefaultConfigurer.java:687)

at org.axonframework.config.DefaultConfigurer$ConfigurationImpl.start(DefaultConfigurer.java:811)

at org.axonframework.spring.config.AxonConfiguration.start(AxonConfiguration.java:199)

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)

... 22 common frames omitted

Caused by: java.util.concurrent.ExecutionException: org.axonframework.lifecycle.LifecycleHandlerInvocationException: Failed during invocation of lifecycle handler [public void org.axonframework.axonserver.connector.processor.EventProcessorControlService.start()] on component [org.axonframework.axonserver.connector.processor.EventProcessorControlService@58a7a58d]

at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)

at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2022)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:742)

... 26 common frames omitted

Caused by: org.axonframework.lifecycle.LifecycleHandlerInvocationException: Failed during invocation of lifecycle handler [public void org.axonframework.axonserver.connector.processor.EventProcessorControlService.start()] on component [org.axonframework.axonserver.connector.processor.EventProcessorControlService@58a7a58d]

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:128)

at org.axonframework.config.LifecycleHandlerInspector.lambda$null$0(LifecycleHandlerInspector.java:91)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)

at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)

at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)

at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:558)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:740)

... 26 common frames omitted

Caused by: java.lang.reflect.InvocationTargetException: null

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:121)

... 35 common frames omitted

Caused by: org.axonframework.eventhandling.tokenstore.UnableToRetrieveIdentifierException: Exception occurred while trying to establish storage identifier

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:265)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$calculateIdentifier$4(TrackingEventProcessor.java:245)

at org.axonframework.common.transaction.TransactionManager.fetchInTransaction(TransactionManager.java:70)

at org.axonframework.eventhandling.TrackingEventProcessor.calculateIdentifier(TrackingEventProcessor.java:244)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$getTokenStoreIdentifier$3(TrackingEventProcessor.java:240)

at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(AtomicReference.java:209)

at org.axonframework.eventhandling.TrackingEventProcessor.getTokenStoreIdentifier(TrackingEventProcessor.java:240)

at org.axonframework.axonserver.connector.processor.StreamingEventProcessorInfoMessage.describe(StreamingEventProcessorInfoMessage.java:58)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$infoSupplier$1(EventProcessorControlService.java:115)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.lambda$sendScheduledProcessorInfo$3(ControlChannelImpl.java:245)

at java.base/java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4772)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.sendScheduledProcessorInfo(ControlChannelImpl.java:245)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.registerEventProcessor(ControlChannelImpl.java:226)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$start$0(EventProcessorControlService.java:105)

at java.base/java.util.HashMap.forEach(HashMap.java:1337)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.start(EventProcessorControlService.java:103)

... 40 common frames omitted

Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:200)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3434)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.getConfig(JpaTokenStore.java:272)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:263)

... 55 common frames omitted

Caused by: org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:123)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:26)

at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:48)

at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)

at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)

at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3214)

at org.hibernate.persister.entity.Loadable.hydrate(Loadable.java:94)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:342)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:269)

at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:80)

at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:288)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractRows(ResultSetProcessorImpl.java:157)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:94)

at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)

at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)

at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4521)

at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4511)

at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)

at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)

at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)

at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)

at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)

at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)

at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1226)

at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1215)

at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:201)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2819)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2763)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3395)

... 64 common frames omitted

Caused by: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:243)

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:229)

at org.postgresql.jdbc.AbstractBlobClob.getLo(AbstractBlobClob.java:272)

at org.postgresql.jdbc.AbstractBlobClob.getBinaryStream(AbstractBlobClob.java:117)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:120)

... 98 common frames omitted

Using Spring Boot 2.6.2 and Axon 4.5.8

We are currently making such extensions, to support multitenancy, and multiple data sources are achieved in the same way: choosing data source routing via lookup.

You can resolve data sources based on tenant in two ways:

  • based on the message, which you can get from CurrentUnitOfWork

  • some other way, like passing current tenant via thread-local in transaction manager. This is for example used when you don’t have an active unit of work, like during start-up, used for updating tokens and similar. This also needs the support of additional infrastructure which is complex so I won’t go into details.

    Actually you just need to register this bean for dynamic data source:

 @Primary
    @Bean
    public DataSource tenantDataSource() {
        multiTenantDataSource = new AbstractRoutingDataSource() {
            @Override
            protected Object determineCurrentLookupKey() {
                if (!CurrentUnitOfWork.isStarted()) {
                    return TenantWrappedTransactionManager.getCurrentTenant();
                }
                Message<?> message = CurrentUnitOfWork.get().getMessage();
                return tenantResolver.resolveTenant(message, tenantDataSources.keySet()).tenantId();
            }
        };
//just a demo
    @Bean
    public Function<TenantDescriptor, DataSourceProperties> tenantDataSourceResolver() {
        return tenant -> {
            DataSourceProperties properties = new DataSourceProperties();
            properties.setUrl("jdbc:postgresql://localhost:5432/"+tenant.tenantId());
            properties.setDriverClassName("org.postgresql.Driver");
            properties.setUsername("postgres");
            properties.setPassword("postgres");
            return properties;
        };
    }

And yes, you will get a table not found an error like you did, potentially more issues because flyway and JPA can’t auto-create tables when you are using dynamic data sources, you need to create everything manually in advance, this has nothing with Axon.

If you are not sure which tables you need, start the application without dynamic data sources, let JPA and flyway instantiate all tables (token, saga, your entities tables, etc…), then dump the SQL file of the whole DB that you will use to import in tenant data sources.

I appreciate the information; I will try to implement this logic. But how about what I posted? Isn’t it possible to keep axon completely abstracted from this multi tenancy logic and give it a single source of data?

I am already creating the tables that axon expects through Liquibase. As you can see now, the error is no longer that the table does not exist but that there is no transaction in progress.

Reposting in case you missed my last update:
I have streamlined by Axon custom configuration and made it more simple and aligned with other forum posts I saw:

@Configuration
@Slf4j
public class AxonConfig {

    @Autowired
    public void configure(
            EventProcessingConfigurer config, AxonPropagatingErrorHandler errorHandler) {
        config.registerDefaultListenerInvocationErrorHandler(conf -> errorHandler);
    }

    @Bean
    public IdentifierFactory getIdentifierFactory() {
        return IdentifierFactory.getInstance();
    }

    @Bean
    @Qualifier("tst")
    DataSource tstDataSource(final TenantsConfiguration tenantsConfiguration) {

        final DatabaseConfiguration tstDbConfig = tenantsConfiguration.getDatasources().get("tst");
        final DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
        dataSourceBuilder.driverClassName(tstDbConfig.getDriverClassName());
        dataSourceBuilder.url(tstDbConfig.getUrl());
        dataSourceBuilder.username(tstDbConfig.getUsername());
        dataSourceBuilder.password(tstDbConfig.getPassword());
        return dataSourceBuilder.build();
    }

    @Bean
    @Qualifier("tst")
    public LocalContainerEntityManagerFactoryBean tstEntityManagerFactory(
            EntityManagerFactoryBuilder builder, @Qualifier("tst") DataSource dataSource) {
        return builder
                .dataSource(dataSource)
                .packages(
                        "org.axonframework.eventsourcing.eventstore.jpa",
                        "org.axonframework.eventhandling.tokenstore.jpa",
                        "org.axonframework.modelling.saga.repository.jpa"
                )
                .properties(jpaProperties())
                .build();
    }

    @Bean
    @Qualifier("tst")
    public PlatformTransactionManager platformTransactionManager(@Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory) {
        return new JpaTransactionManager(tstEntityManagerFactory.getObject());
    }

    @Bean
    @Qualifier("tst")
    public TransactionManager springTransactionManager(@Qualifier("tst") PlatformTransactionManager platformTransactionManager) {
        return new SpringTransactionManager(platformTransactionManager);
    }

    @Bean
    public EventStorageEngine storageEngine(Serializer defaultSerializer,
                                            PersistenceExceptionResolver persistenceExceptionResolver,
                                            @Qualifier("eventSerializer") Serializer eventSerializer,
                                            AxonConfiguration configuration,
                                            @Qualifier("tst") LocalContainerEntityManagerFactoryBean eventsEntityManagerFactory,
                                            @Qualifier("tst") TransactionManager springTransactionManager) {
        ContainerManagedEntityManagerProvider containerManagedEntityManagerProvider =  new ContainerManagedEntityManagerProvider();
        containerManagedEntityManagerProvider.setEntityManager(eventsEntityManagerFactory.getObject().createEntityManager());
        return JpaEventStorageEngine.builder()
                .snapshotSerializer(defaultSerializer)
                .upcasterChain(configuration.upcasterChain())
                .persistenceExceptionResolver(persistenceExceptionResolver)
                .eventSerializer(eventSerializer)
                .entityManagerProvider(containerManagedEntityManagerProvider)
                .transactionManager(springTransactionManager)
                .build();
    }


    @Bean("tokenStore")
    public TokenStore jpaTokenStore(@Qualifier("eventSerializer") Serializer eventSerializer , @Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory)  {
        return JpaTokenStore.builder()
                .entityManagerProvider(new SimpleEntityManagerProvider(tstEntityManagerFactory.getObject().createEntityManager()))
                .serializer(eventSerializer)
                .build();
    }

    @Bean("sagaStore")
    public JpaSagaStore jpaSagaStore(@Qualifier("eventSerializer") Serializer eventSerializer, @Qualifier("tst") LocalContainerEntityManagerFactoryBean tstEntityManagerFactory){
        return JpaSagaStore.builder()
                .entityManagerProvider(new SimpleEntityManagerProvider(
                        tstEntityManagerFactory.getObject().createEntityManager()))
                .serializer(eventSerializer)
                .build();
    }


    private Map<String, String> jpaProperties() {
        Map<String, String> props = new HashMap<>();
        props.put("hibernate.physical_naming_strategy",
                CamelCaseToUnderscoresNamingStrategy.class.getName());
        props.put("hibernate.implicit_naming_strategy",
                SpringImplicitNamingStrategy.class.getName());
        props.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQL9Dialect");
        props.put("hibernate.database_platform", "org.hibernate.dialect.PostgreSQL9Dialect");

        return props;
    }
}

However, when running, I get the following exception:

09 10:50:47,703 - INFO - [EventProcessor[com.tst.query]-0] - [TrackingEventProcessor.java:1138] - [::] - An error occurred while attempting to claim a token for segment: 0. Will retry later...

javax.persistence.TransactionRequiredException: no transaction is in progress

at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:445)

at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3478)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3385)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.loadToken(JpaTokenStore.java:246)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.fetchToken(JpaTokenStore.java:197)

at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.lambda$run$2(TrackingEventProcessor.java:1096)

at org.axonframework.common.transaction.TransactionManager.executeInTransaction(TransactionManager.java:47)

at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1095)

at java.base/java.lang.Thread.run(Thread.java:829)

2022-02-09 10:50:47,753 - INFO - [main] - [DefaultLoadEventListener.java:116] - [::] - HHH000327: Error performing load command

org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:123)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:26)

at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:48)

at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)

at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)

at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3214)

at org.hibernate.persister.entity.Loadable.hydrate(Loadable.java:94)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:342)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:269)

at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:80)

at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:288)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractRows(ResultSetProcessorImpl.java:157)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:94)

at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)

at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)

at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4521)

at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4511)

at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)

at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)

at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)

at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)

at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)

at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)

at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1226)

at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1215)

at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:201)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2819)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2763)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3395)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.getConfig(JpaTokenStore.java:272)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:263)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$calculateIdentifier$4(TrackingEventProcessor.java:245)

at org.axonframework.common.transaction.TransactionManager.fetchInTransaction(TransactionManager.java:70)

at org.axonframework.eventhandling.TrackingEventProcessor.calculateIdentifier(TrackingEventProcessor.java:244)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$getTokenStoreIdentifier$3(TrackingEventProcessor.java:240)

at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(AtomicReference.java:209)

at org.axonframework.eventhandling.TrackingEventProcessor.getTokenStoreIdentifier(TrackingEventProcessor.java:240)

at org.axonframework.axonserver.connector.processor.StreamingEventProcessorInfoMessage.describe(StreamingEventProcessorInfoMessage.java:58)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$infoSupplier$1(EventProcessorControlService.java:115)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.lambda$sendScheduledProcessorInfo$3(ControlChannelImpl.java:245)

at java.base/java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4772)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.sendScheduledProcessorInfo(ControlChannelImpl.java:245)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.registerEventProcessor(ControlChannelImpl.java:226)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$start$0(EventProcessorControlService.java:105)

at java.base/java.util.HashMap.forEach(HashMap.java:1337)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.start(EventProcessorControlService.java:103)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:121)

at org.axonframework.config.LifecycleHandlerInspector.lambda$null$0(LifecycleHandlerInspector.java:91)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)

at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)

at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)

at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:558)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:740)

at org.axonframework.config.DefaultConfigurer.invokeStartHandlers(DefaultConfigurer.java:687)

at org.axonframework.config.DefaultConfigurer$ConfigurationImpl.start(DefaultConfigurer.java:811)

at org.axonframework.spring.config.AxonConfiguration.start(AxonConfiguration.java:199)

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)

at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)

at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)

at java.base/java.lang.Iterable.forEach(Iterable.java:75)

at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)

at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)

at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)

at com.tst.main(Main.java:19)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Caused by: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:243)

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:229)

at org.postgresql.jdbc.AbstractBlobClob.getLo(AbstractBlobClob.java:272)

at org.postgresql.jdbc.AbstractBlobClob.getBinaryStream(AbstractBlobClob.java:117)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:120)

... 98 common frames omitted

The application then shuts down and provides more logs:

org.springframework.context.ApplicationContextException: Failed to start bean 'org.axonframework.spring.config.AxonConfiguration'; nested exception is org.axonframework.lifecycle.LifecycleHandlerInvocationException: One of the start handlers in phase [null] failed with the following exception:

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181)

at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)

at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)

at java.base/java.lang.Iterable.forEach(Iterable.java:75)

at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)

at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)

at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)

at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290)

at com.tst.main(Main.java:19)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)

at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)

at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

Caused by: org.axonframework.lifecycle.LifecycleHandlerInvocationException: One of the start handlers in phase [null] failed with the following exception:

at org.axonframework.config.DefaultConfigurer.lambda$invokeStartHandlers$35(DefaultConfigurer.java:693)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:744)

at org.axonframework.config.DefaultConfigurer.invokeStartHandlers(DefaultConfigurer.java:687)

at org.axonframework.config.DefaultConfigurer$ConfigurationImpl.start(DefaultConfigurer.java:811)

at org.axonframework.spring.config.AxonConfiguration.start(AxonConfiguration.java:199)

at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)

... 22 common frames omitted

Caused by: java.util.concurrent.ExecutionException: org.axonframework.lifecycle.LifecycleHandlerInvocationException: Failed during invocation of lifecycle handler [public void org.axonframework.axonserver.connector.processor.EventProcessorControlService.start()] on component [org.axonframework.axonserver.connector.processor.EventProcessorControlService@58a7a58d]

at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)

at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2022)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:742)

... 26 common frames omitted

Caused by: org.axonframework.lifecycle.LifecycleHandlerInvocationException: Failed during invocation of lifecycle handler [public void org.axonframework.axonserver.connector.processor.EventProcessorControlService.start()] on component [org.axonframework.axonserver.connector.processor.EventProcessorControlService@58a7a58d]

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:128)

at org.axonframework.config.LifecycleHandlerInspector.lambda$null$0(LifecycleHandlerInspector.java:91)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)

at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)

at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)

at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

at java.base/java.util.stream.ReferencePipeline.reduce(ReferencePipeline.java:558)

at org.axonframework.config.DefaultConfigurer.invokeLifecycleHandlers(DefaultConfigurer.java:740)

... 26 common frames omitted

Caused by: java.lang.reflect.InvocationTargetException: null

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.axonframework.config.LifecycleHandlerInspector.invokeAndReturn(LifecycleHandlerInspector.java:121)

... 35 common frames omitted

Caused by: org.axonframework.eventhandling.tokenstore.UnableToRetrieveIdentifierException: Exception occurred while trying to establish storage identifier

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:265)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$calculateIdentifier$4(TrackingEventProcessor.java:245)

at org.axonframework.common.transaction.TransactionManager.fetchInTransaction(TransactionManager.java:70)

at org.axonframework.eventhandling.TrackingEventProcessor.calculateIdentifier(TrackingEventProcessor.java:244)

at org.axonframework.eventhandling.TrackingEventProcessor.lambda$getTokenStoreIdentifier$3(TrackingEventProcessor.java:240)

at java.base/java.util.concurrent.atomic.AtomicReference.updateAndGet(AtomicReference.java:209)

at org.axonframework.eventhandling.TrackingEventProcessor.getTokenStoreIdentifier(TrackingEventProcessor.java:240)

at org.axonframework.axonserver.connector.processor.StreamingEventProcessorInfoMessage.describe(StreamingEventProcessorInfoMessage.java:58)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$infoSupplier$1(EventProcessorControlService.java:115)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.lambda$sendScheduledProcessorInfo$3(ControlChannelImpl.java:245)

at java.base/java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4772)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.sendScheduledProcessorInfo(ControlChannelImpl.java:245)

at io.axoniq.axonserver.connector.impl.ControlChannelImpl.registerEventProcessor(ControlChannelImpl.java:226)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.lambda$start$0(EventProcessorControlService.java:105)

at java.base/java.util.HashMap.forEach(HashMap.java:1337)

at org.axonframework.axonserver.connector.processor.EventProcessorControlService.start(EventProcessorControlService.java:103)

... 40 common frames omitted

Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:200)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3434)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3367)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:362)

at com.sun.proxy.$Proxy185.find(Unknown Source)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.getConfig(JpaTokenStore.java:272)

at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.retrieveStorageIdentifier(JpaTokenStore.java:263)

... 55 common frames omitted

Caused by: org.hibernate.HibernateException: Unable to access lob stream

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:123)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:26)

at org.hibernate.type.descriptor.sql.BlobTypeDescriptor$1.doExtract(BlobTypeDescriptor.java:48)

at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)

at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:243)

at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:329)

at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3214)

at org.hibernate.persister.entity.Loadable.hydrate(Loadable.java:94)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.loadFromResultSet(EntityReferenceInitializerImpl.java:342)

at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:269)

at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:80)

at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails$EntityLoaderRowReader.readRow(EntityLoadQueryDetails.java:288)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractRows(ResultSetProcessorImpl.java:157)

at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:94)

at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:105)

at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:285)

at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:4521)

at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4511)

at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:571)

at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:539)

at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:208)

at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:327)

at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:108)

at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:74)

at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:118)

at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1226)

at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1215)

at org.hibernate.internal.SessionImpl.access$2100(SessionImpl.java:201)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2819)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.lambda$load$1(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.perform(SessionImpl.java:2763)

at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2807)

at org.hibernate.internal.SessionImpl.find(SessionImpl.java:3395)

... 64 common frames omitted

Caused by: org.postgresql.util.PSQLException: Large Objects may not be used in auto-commit mode.

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:243)

at org.postgresql.largeobject.LargeObjectManager.open(LargeObjectManager.java:229)

at org.postgresql.jdbc.AbstractBlobClob.getLo(AbstractBlobClob.java:272)

at org.postgresql.jdbc.AbstractBlobClob.getBinaryStream(AbstractBlobClob.java:117)

at org.hibernate.type.descriptor.java.PrimitiveByteArrayTypeDescriptor.wrap(PrimitiveByteArrayTypeDescriptor.java:120)

... 98 common frames omitted

Using Spring Boot 2.6.2 and Axon 4.5.8

So, basically I want to achieve this, not having Axon use multi datasource.

Did you also configure event processor beans to use other configurations that you have configured?

Nope, what beans are you referring to? I was looking at the Axon autoconfiguration and did see some, but not entirely sure which ones I need to provide an alternative to.

You can configure transaction manager using configurer:

@Bean
public ConfigurerModule configureProcessor() {
    return configurer -> configurer.eventProcessing().registerTransactionManager(...)
}