Error on aggregate [sdfds]. Cannot reuse aggregate identifier [sdfds] to create aggregate [GiftCard] since identifiers need to be unique

Hi,
I have the task to create an Axon Application as a proof of concept.
The application should be with spring boot, axon framework, postgresql.
I took the example application for the site and tried to change it to a connect directly to the Postgres and not to the axon server.

So far it worked, but I can not create a new Aggregate I get the error: Error on aggregate [sdfds]. Cannot reuse aggregate identifier [sdfds] to create aggregate [GiftCard] since identifiers need to be unique.

But the database is empty so it can not be that there are duplicates.
Please help.
I usually work with hibernate and relational databases, and have no experience with CQRS, and no one in the project has, we should have someone who has knowledge with Axon on the team, but we have no one, and I already worked 50hours to figure it out, but it does not work at all.

Thanks

This is the Aggregate:

@Aggregate
public class GiftCard {

@AggregateIdentifier
private String id;
private int remainingValue;

// Tag this handler to use it as code sample in the documentation
// tag::IssueCardCommandHandler[]
@CommandHandler
public GiftCard(IssueCardCommand command) {
    if (command.amount() <= 0) {
        throw new IllegalArgumentException("amount <= 0");
    }
    apply(new CardIssuedEvent(command.id(), command.amount()));
}

This is the message in the terminal:
2024-04-30T21:58:54.638+03:00 WARN 7187 — [nio-8080-exec-3] o.a.c.gateway.DefaultCommandGateway : Command ‘io.axoniq.demo.giftcard.api.IssueCardCommand’ resulted in org.axonframework.eventsourcing.eventstore.EventStoreException(Cannot reuse aggregate identifier [sdfdsf] to create aggregate [GiftCard] since identifiers need to be unique.)
2024-04-30T21:59:00.989+03:00 WARN 7187 — [nio-8080-exec-9] o.a.c.gateway.DefaultCommandGateway : Command ‘io.axoniq.demo.giftcard.api.IssueCardCommand’ resulted in org.axonframework.eventsourcing.eventstore.EventStoreException(Cannot reuse aggregate identifier [sdfds] to create aggregate [GiftCard] since identifiers need to be unique.)

Why are you sure the database is empty?

Thank you for the answer Gerard,
I am sure the database is empty because the tables where generated by hibernate and I did selects on all the new axon tables (assosiatoinvalueentry, domainevententry, sagentry, snapshotand all of them are empty.

What did you change to the project? Setting the axon.axonserver.enabled=false property should make sure most of the alternatives for axon server are auto configured correctly. Can you tell a bit more about the poc, what do you want to prove?

Hallo Gerad,

thank you for the help, I did a lot of changes to the project because when I did the change you proposed I directly got the error: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘giftCardRepository’: Failed to instantiate [org.axonframework.modelling.command.Repository]: Factory method ‘repository’ threw exception with message: Default configuration requires the use of event sourcing. Either configure an Event Store to use, or configure a specific repository implementation for class io.axoniq.demo.giftcard.command.GiftCard

I saw a post on your webside now which explains the error: Axon 4.5.16, Spring Boot 3.2.2 and Java 21, the application does not start
But there was no solution for this problem posted there. I tried higher axon versions until axon 4.9.4 but still got the error with the “repository”

Then I looked up some other axon projects which are working with a database and in all there was a configuration class which configured the database, a transaction manager, jpa Properties, entityManagerFactory like I know from other projects, so I tried this, but does not work. I get the connection with the database but when I try to save the error with the allready used identifier comes up.

I appreciate your help. I have no experience with the CQRS and the Axon and it seems an interesting technology and I want to use it and see what are the benefits compared to the normal relational databases and I have to use it in this new project and I am at a loss. :frowning:

With the poc I want to prove that we can use Axon with Spring and Mysql for our now starting project.
I want to build a simple application with aggregates, events, commands, and selects using axon and spring/spring boot.

Can you please share the stacktrace? With the property, a dependency on pring-boot-starter-data-jpa and a db configured, it should pick that up, and create an event store using the db.

Maybe you could also just use Axon Server for now, and decide later if you can use Axon Server, or need to move to something else?

Hallo Gerard,

here I send the stacktrace, the last error is the relevant one. Axon created some tables in Postgres (we need Postgres not mysql), but I have the feeling that the connection is lost after this. Also no transaction exists, which can be because of no connection.

Axon Config:
package io.axoniq.demo.giftcard;

import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.axonframework.common.caching.Cache;
import org.axonframework.common.caching.WeakReferenceCache;
import org.axonframework.common.jpa.EntityManagerProvider;
import org.axonframework.config.Configurer;
import org.axonframework.config.ConfigurerModule;
import org.axonframework.lifecycle.Phase;
import org.axonframework.messaging.Message;
import org.axonframework.messaging.interceptors.LoggingInterceptor;
import org.axonframework.serialization.xml.XStreamSerializer;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Profile;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.security.NoTypePermission;
import com.zaxxer.hikari.HikariDataSource;

import jakarta.persistence.EntityManagerFactory;
import jakarta.validation.constraints.NotNull;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = { “io.axoniq.demo.*” })
public class AxonConfig {

@Bean("axonMaster")
@ConfigurationProperties("spring.datasource.hikari.axon-master")
public DataSource axon() {
	return DataSourceBuilder.create().type(HikariDataSource.class).build();
}

@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
		@Qualifier("axonMaster") DataSource axonMaster) {
	return builder.dataSource(axonMaster).persistenceUnit("axonMaster").properties(jpaProperties())
			.packages("org.axonframework.eventhandling.tokenstore",
					"org.axonframework.modelling.saga.repository.jpa",
					"org.axonframework.eventsourcing.eventstore.jpa", "io.axoniq.demo.repository",
					"io.axoniq.demo.giftcard.query", "io.axoniq.demo.giftcard.command")
			.build();
}

/*
 * @Bean("txManager") public JpaTransactionManager
 * histTransactionManager(@Qualifier("entityManagerFactory")
 * EntityManagerFactory histEntityManager) { return new
 * JpaTransactionManager(histEntityManager); }
 */

@Bean("txManager")
public PlatformTransactionManager transactionManager(
		@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
	JpaTransactionManager transactionManager = new JpaTransactionManager();
	transactionManager.setEntityManagerFactory(entityManagerFactory);
	return transactionManager;
}

/**
 * For axon framework
 * 
 * @param entityManagerFactory
 * @return
 */
@Bean
public EntityManagerProvider entityManagerProvider(
		@Qualifier("entityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) {
	return () -> entityManagerFactory.getObject().createEntityManager();
}

private Map<String, Object> jpaProperties() {
	Map<String, Object> props = new HashMap<>();
	// props.put("hibernate.physical_naming_strategy",
	// SpringPhysicalNamingStrategy.class.getName());
	// props.put("hibernate.implicit_naming_strategy",
	// SpringImplicitNamingStrategy.class.getName());
	props.put("hibernate.hbm2ddl.auto", "update");
	props.put("hibernate.show_sql", "true");
	return props;
}

@Bean
XStream xstream() {
	XStream xstream = new XStream();
	xstream.addPermission(NoTypePermission.NONE);
	xstream.allowTypesByWildcard(
			new String[] { "io.axoniq.demo.**", "org.axonframework.**", "java.**", "com.thoughtworks.xstream.**" });
	return xstream;
}

@Bean
@Primary
public XStreamSerializer serializer(XStream xStream) {
	return XStreamSerializer.builder().xStream(xStream).build();
}

@Bean
public LoggingInterceptor<Message<?>> loggingInterceptor() {
	return new LoggingInterceptor<>();
}

@Bean
public ConfigurerModule loggingInterceptorConfigurerModule(LoggingInterceptor<Message<?>> loggingInterceptor) {
	return new LoggingInterceptorConfigurerModule(loggingInterceptor);
}

@Bean
@Profile("command")
public Cache giftCardCache() {
	return new WeakReferenceCache();
}

/**
 * An example {@link ConfigurerModule} implementation to attach configuration to
 * Axon's configuration life cycle.
 */
private static class LoggingInterceptorConfigurerModule implements ConfigurerModule {

	private final LoggingInterceptor<Message<?>> loggingInterceptor;

	private LoggingInterceptorConfigurerModule(LoggingInterceptor<Message<?>> loggingInterceptor) {
		this.loggingInterceptor = loggingInterceptor;
	}

	@Override
	public void configureModule(@NotNull Configurer configurer) {
		configurer
				.eventProcessing(processingConfigurer -> processingConfigurer
						.registerDefaultHandlerInterceptor((config, processorName) -> loggingInterceptor))
				.onInitialize(this::registerInterceptorForBusses);
	}

	/**
	 * Registers the {@link LoggingInterceptor} on the
	 * {@link org.axonframework.commandhandling.CommandBus},
	 * {@link com.google.common.eventbus.EventBus},
	 * {@link org.axonframework.queryhandling.QueryBus}, and
	 * {@link org.axonframework.queryhandling.QueryUpdateEmitter}.
	 * <p>
	 * It does so right after the {@link Phase#INSTRUCTION_COMPONENTS}, to ensure
	 * all these infrastructure components are constructed.
	 *
	 * @param config The {@link org.axonframework.config.Configuration} to retrieve
	 *               the infrastructure components from.
	 */
	@SuppressWarnings("resource") // We do not require to handle the returned Registration object.
	private void registerInterceptorForBusses(org.axonframework.config.Configuration config) {
		config.onStart(Phase.INSTRUCTION_COMPONENTS + 1, () -> {
			config.commandBus().registerHandlerInterceptor(loggingInterceptor);
			config.commandBus().registerDispatchInterceptor(loggingInterceptor);
			config.eventBus().registerDispatchInterceptor(loggingInterceptor);
			config.queryBus().registerHandlerInterceptor(loggingInterceptor);
			config.queryBus().registerDispatchInterceptor(loggingInterceptor);
			config.queryUpdateEmitter().registerDispatchInterceptor(loggingInterceptor);
		});
	}
}

}
Spring Config:
package io.axoniq.demo.giftcard;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = “io.axoniq.demo.*”)
public class GiftCardApp {

public static void main(String[] args) {
    SpringApplication.run(GiftCardApp.class, args);
}

}
application.yml:
server:
port: 10141

logging:
level:
com.zaxxer.hikari.pool.*: debug
#org.springframework.web: debug

spring:
application:
name: Order Management Service
main:
banner-mode: “off”
datasource:
hikari:
dataSourceProperties:
fastConnectionFailoverEnabled: false
leak-detection-threshold: 5000
axon-master:
jdbcUrl: jdbc:postgresql://localhost:5455/events-postgres?zeroDateTimeBehavior=convertToNull&tcpKeepAlive=true
username: events-postgres
password: events-postgres
driverClassName: org.postgresql.Driver
connectionTestQuery: SELECT 1
connectionTimeout: 10000
maximumPoolSize: 15
jpa:
database: postgresql
hibernate:
ddl-auto: update
use-new-id-generator-mappings: true
show_sql: false
current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext
properties:
hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect
#hibernate.transaction.factory_class: org.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.coordinator_class: jta
axon:
serializer:
events: jackson

I can not decide to use the server, I have to tell the manager and I do not think he is open for this. Also I can not see any tables in the server, is this feature (see table) free or do you have to pay for it?

Sorry, but I am not in charge, I only try to do what its required of me.
And I have to try get this gooing with spring/spring boot, and axon and postgres.
Maybee the older Axon versions where more compartible with Spring (Boot)?

Thank you for your help.

Kind Regards
Madalina
: HHH000204: Processing PersistenceUnitInfo [name: axonMaster]
2024-05-02T15:57:35.010+03:00 INFO 94856 — [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.1.7.Final
2024-05-02T15:57:35.210+03:00 INFO 94856 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting…
2024-05-02T15:57:35.299+03:00 INFO 94856 — [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@2ef812b
2024-05-02T15:57:35.300+03:00 INFO 94856 — [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2024-05-02T15:57:35.317+03:00 INFO 94856 — [ main] SQL dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2024-05-02T15:57:35.405+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=1, active=0, idle=1, waiting=0)
2024-05-02T15:57:35.424+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7554059c
2024-05-02T15:57:35.429+03:00 INFO 94856 — [ main] o.h.c.beanvalidation.TypeSafeActivator : Error calling jakarta.validation.Validation#buildDefaultValidatorFactory

jakarta.validation.ValidationException: HV000183: Unable to initialize ‘jakarta.el.ExpressionFactory’. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:211) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.(ResourceBundleMessageInterpolator.java:97) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getDefaultMessageInterpolator(AbstractConfigurationImpl.java:574) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getDefaultMessageInterpolatorConfiguredWithClassLoader(AbstractConfigurationImpl.java:823) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.getMessageInterpolator(AbstractConfigurationImpl.java:484) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.(ValidatorFactoryImpl.java:154) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:38) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.buildValidatorFactory(AbstractConfigurationImpl.java:452) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
at jakarta.validation.Validation.buildDefaultValidatorFactory(Validation.java:103) ~[jakarta.validation-api-3.0.2.jar:na]
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:479) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.activate(TypeSafeActivator.java:82) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:137) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:287) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:415) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1423) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) ~[spring-orm-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1132) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:907) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.6.jar:6.0.6]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[spring-boot-3.0.4.jar:3.0.4]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[spring-boot-3.0.4.jar:3.0.4]
at io.axoniq.demo.giftcard.GiftCardApp.main(GiftCardApp.java:10) ~[classes/:na]
Caused by: java.lang.NoClassDefFoundError: jakarta/el/ELManager
at org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator.buildExpressionFactory(ResourceBundleMessageInterpolator.java:194) ~[hibernate-validator-7.0.5.Final.jar:7.0.5.Final]
… 39 common frames omitted
Caused by: java.lang.ClassNotFoundException: jakarta.el.ELManager
… 40 common frames omitted

2024-05-02T15:57:35.456+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@7fac6eec
2024-05-02T15:57:35.488+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@3aaeef7d
2024-05-02T15:57:35.521+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@6f837551
2024-05-02T15:57:35.555+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@bde1432
2024-05-02T15:57:35.590+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@1719d0ab
2024-05-02T15:57:35.621+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@5a811032
2024-05-02T15:57:35.654+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@2edcdfce
2024-05-02T15:57:35.668+03:00 INFO 94856 — [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2024-05-02T15:57:35.671+03:00 INFO 94856 — [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit ‘axonMaster’
2024-05-02T15:57:35.685+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@55d831a3
2024-05-02T15:57:35.718+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@c1d3f3b
2024-05-02T15:57:35.745+03:00 INFO 94856 — [ main] o.a.serialization.ChainingConverter : ContentTypeConverter of type [class org.axonframework.serialization.xml.Dom4JToByteArrayConverter] is ignored. It seems to rely on a class that is not available in the class loader: org/dom4j/Document
2024-05-02T15:57:35.746+03:00 INFO 94856 — [ main] o.a.serialization.ChainingConverter : ContentTypeConverter of type [class org.axonframework.serialization.xml.InputStreamToDom4jConverter] is ignored. It seems to rely on a class that is not available in the class loader: org/dom4j/Document
2024-05-02T15:57:35.746+03:00 INFO 94856 — [ main] o.a.serialization.ChainingConverter : ContentTypeConverter of type [class org.axonframework.serialization.xml.XomToStringConverter] is ignored. It seems to rely on a class that is not available in the class loader: nu/xom/Document
2024-05-02T15:57:35.746+03:00 INFO 94856 — [ main] o.a.serialization.ChainingConverter : ContentTypeConverter of type [class org.axonframework.serialization.xml.InputStreamToXomConverter] is ignored. It seems to rely on a class that is not available in the class loader: nu/xom/ParsingException
2024-05-02T15:57:35.752+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@5ecfae0a
2024-05-02T15:57:35.774+03:00 INFO 94856 — [ main] o.a.config.AxonIQConsoleModule :
################################################################################################

You have not configured AxonIQ Console. AxonIQ Console provides out-of-the box monitoring

and management capabilities for your Axon Application, starting with it is free.

Visit https://console.axoniq.io for more information!

Suppress this message by setting system property disable-axoniq-console-message to true.

################################################################################################

2024-05-02T15:57:35.782+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@16a528b2
2024-05-02T15:57:35.812+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@2e456ec
2024-05-02T15:57:35.843+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@6765556c
2024-05-02T15:57:35.860+03:00 DEBUG 94856 — [onnection adder] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - After adding stats (total=15, active=0, idle=15, waiting=0)
2024-05-02T15:57:36.004+03:00 INFO 94856 — [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 13 endpoint(s) beneath base path ‘/actuator’
2024-05-02T15:57:36.377+03:00 INFO 94856 — [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 8080
2024-05-02T15:57:36.399+03:00 INFO 94856 — [ main] io.axoniq.demo.giftcard.GiftCardApp : Started GiftCardApp in 2.33 seconds (process running for 2.478)
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
Hibernate: select max(d1_0.globalIndex) from DomainEventEntry d1_0
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T15:57:36.564+03:00 WARN 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetch Segments for Processor ‘card-summary’ failed: no transaction is in progress. Preparing for retry in 1s

jakarta.persistence.TransactionRequiredException: no transaction is in progress
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:451) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:2426) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1416) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1411) ~[hibernate-core-6.1.7.Final.jar:6.1.7.Final]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:360) ~[spring-orm-6.0.6.jar:6.0.6]
at jdk.proxy2/jdk.proxy2.$Proxy157.flush(Unknown Source) ~[na:na]
at org.axonframework.eventhandling.tokenstore.jpa.JpaTokenStore.initializeTokenSegments(JpaTokenStore.java:127) ~[axon-messaging-4.9.3.jar:4.9.3]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.lambda$run$1(TrackingEventProcessor.java:1281) ~[axon-messaging-4.9.3.jar:4.9.3]
at org.axonframework.common.transaction.TransactionManager.executeInTransaction(TransactionManager.java:47) ~[axon-messaging-4.9.3.jar:4.9.3]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1278) ~[axon-messaging-4.9.3.jar:4.9.3]
at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
Hibernate: select max(d1_0.globalIndex) from DomainEventEntry d1_0
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T15:57:43.642+03:00 INFO 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetching Segments for Processor ‘card-summary’ still failing: no transaction is in progress. Preparing for retry in 8s
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
Hibernate: select max(d1_0.globalIndex) from DomainEventEntry d1_0
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T15:58:01.665+03:00 DEBUG 94856 — [card-summary]-0] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Timeout failure stats (total=15, active=15, idle=0, waiting=0)
2024-05-02T15:58:01.667+03:00 WARN 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2024-05-02T15:58:01.668+03:00 ERROR 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 10005ms.
2024-05-02T15:58:01.672+03:00 INFO 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetching Segments for Processor ‘card-summary’ still failing: Converting org.hibernate.exception.JDBCConnectionException to JPA PersistenceException : Unable to acquire JDBC Connection. Preparing for retry in 16s
2024-05-02T15:58:05.408+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=14, idle=1, waiting=0)
2024-05-02T15:58:05.409+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T15:58:27.687+03:00 DEBUG 94856 — [card-summary]-0] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Timeout failure stats (total=15, active=15, idle=0, waiting=0)
2024-05-02T15:58:27.689+03:00 WARN 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2024-05-02T15:58:27.689+03:00 ERROR 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 10007ms.
2024-05-02T15:58:27.690+03:00 INFO 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetching Segments for Processor ‘card-summary’ still failing: Converting org.hibernate.exception.JDBCConnectionException to JPA PersistenceException : Unable to acquire JDBC Connection. Preparing for retry in 32s
2024-05-02T15:58:35.414+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=14, idle=1, waiting=0)
2024-05-02T15:58:35.415+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T15:59:05.418+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=15, idle=0, waiting=1)
2024-05-02T15:59:05.419+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
2024-05-02T15:59:09.715+03:00 DEBUG 94856 — [card-summary]-0] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Timeout failure stats (total=15, active=15, idle=0, waiting=0)
2024-05-02T15:59:09.716+03:00 WARN 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2024-05-02T15:59:09.716+03:00 ERROR 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 10006ms.
2024-05-02T15:59:09.717+03:00 INFO 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetching Segments for Processor ‘card-summary’ still failing: Converting org.hibernate.exception.JDBCConnectionException to JPA PersistenceException : Unable to acquire JDBC Connection. Preparing for retry in 60s
2024-05-02T15:59:35.426+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=14, idle=1, waiting=0)
2024-05-02T15:59:35.427+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
2024-05-02T16:00:05.448+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=14, idle=1, waiting=0)
2024-05-02T16:00:05.448+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
Hibernate: select t1_0.segment from TokenEntry t1_0 where t1_0.processorName=? order by t1_0.segment asc
2024-05-02T16:00:19.742+03:00 DEBUG 94856 — [card-summary]-0] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Timeout failure stats (total=15, active=15, idle=0, waiting=0)
2024-05-02T16:00:19.743+03:00 WARN 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2024-05-02T16:00:19.743+03:00 ERROR 94856 — [card-summary]-0] o.h.engine.jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 10012ms.
2024-05-02T16:00:19.744+03:00 INFO 94856 — [card-summary]-0] o.a.e.TrackingEventProcessor : Fetching Segments for Processor ‘card-summary’ still failing: Converting org.hibernate.exception.JDBCConnectionException to JPA PersistenceException : Unable to acquire JDBC Connection. Preparing for retry in 60s
2024-05-02T16:00:35.469+03:00 DEBUG 94856 — [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=15, active=14, idle=1, waiting=0)
2024-05-02T16:01:57.023+03:00 DEBUG 94856 — [ctor-http-nio-4] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Timeout failure stats (total=15, active=15, idle=0, waiting=0)
2024-05-02T16:01:57.023+03:00 WARN 94856 — [ctor-http-nio-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: null
2024-05-02T16:01:57.024+03:00 ERROR 94856 — [ctor-http-nio-4] o.h.engine.jdbc.spi.SqlExceptionHelper : HikariPool-1 - Connection is not available, request timed out after 10004ms.
2024-05-02T16:01:57.032+03:00 WARN 94856 — [ctor-http-nio-4] o.a.c.gateway.DefaultCommandGateway : Command ‘io.axoniq.demo.giftcard.api.IssueCardCommand’ resulted in org.axonframework.eventsourcing.eventstore.EventStoreException(Cannot reuse aggregate identifier [test] to create aggregate [GiftCard] since identifiers need to be unique.)

Also the pom.xml:

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>io.axoniq.demo</groupId>
<artifactId>giftcard-demo</artifactId>
<version>4.8</version>
<packaging>jar</packaging>

<name>giftcard-demo</name>
<description>Axon Framework demo project</description>

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>3.0.4</version> <!--2.7.18-->
	<relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

	<java.version>17</java.version>

	<axon.version>4.9.4</axon.version>

	<dataprotection-config-api.version>1.0</dataprotection-config-api.version>
	<dataprotection-maven-plugin.version>1.0</dataprotection-maven-plugin.version>

	<springdoc-openapi-starter.version>2.2.0</springdoc-openapi-starter.version>

	<versions-maven-plugin.version>2.16.0</versions-maven-plugin.version>
	<maven.compiler.plugin.version>3.11.0</maven.compiler.plugin.version>

	<junit.jupiter.version>5.10.0</junit.jupiter.version>
</properties>

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.axonframework</groupId>
			<artifactId>axon-bom</artifactId>
			<version>${axon.version}</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
	</dependencies>
</dependencyManagement>

<dependencies>
	
	<!--<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-web</artifactId>
		<version>4.1.6.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-webflux</artifactId>
		<version>4.1.6.RELEASE</version>
	</dependency>-->
	<!-- https://mvnrepository.com/artifact/jakarta.el/jakarta.el-api -->
	<dependency>
		<groupId>javax.el</groupId>
		<artifactId>javax.el-api</artifactId>
		<version>2.2.4</version>
	</dependency>
	<dependency>
		<groupId>org.glassfish.web</groupId>
		<artifactId>javax.el</artifactId>
		<version>2.2.4</version>
	</dependency>


	<dependency>
		<groupId>org.postgresql</groupId>
		<artifactId>postgresql</artifactId>
		<version>42.6.1</version>
	</dependency>
	<!--
	https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
	<dependency>
		<groupId>org.hibernate.validator</groupId>
		<artifactId>hibernate-validator</artifactId>
		<version>7.0.5.Final</version>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
	<!-- Axon -->
	<dependency>
		<groupId>org.axonframework</groupId>
		<artifactId>axon-spring-boot-starter</artifactId>
	</dependency>

	<!-- Vanilla Spring Boot to start with -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter</artifactId>
	</dependency>

	<!-- Web dependencies -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-webflux</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springdoc</groupId>
		<artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
		<version>${springdoc-openapi-starter.version}</version>
	</dependency>

	<!-- Messaging dependencies -->
	<dependency>
		<!-- The version is provided by the Axon bom. It's needed for
		subscription queries-->
		<groupId>io.projectreactor</groupId>
		<artifactId>reactor-core</artifactId>
	</dependency>

	<!-- Monitoring and Logging -->
	<dependency>
		<groupId>org.slf4j</groupId>
		<artifactId>slf4j-ext</artifactId>
	</dependency>

	<dependency>
		<groupId>org.axonframework</groupId>
		<artifactId>axon-micrometer</artifactId>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

	<!-- Testing -->
	<dependency>
		<groupId>org.axonframework</groupId>
		<artifactId>axon-test</artifactId>
	</dependency>

	<dependency>
		<groupId>org.junit.jupiter</groupId>
		<artifactId>junit-jupiter</artifactId>
		<version>${junit.jupiter.version}</version>
	</dependency>

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
		<exclusions>
			<exclusion>
				<groupId>org.junit.vintage</groupId>
				<artifactId>junit-vintage-engine</artifactId>
			</exclusion>
		</exclusions>
	</dependency>
	<dependency>
		<groupId>io.axoniq</groupId>
		<artifactId>axon-dataprotection-config-api</artifactId>
		<version>${dataprotection-config-api.version}</version>
		<scope>compile</scope>
	</dependency>
</dependencies>

<build>
	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>versions-maven-plugin</artifactId>
			<version>${versions-maven-plugin.version}</version>
			<configuration>
				<generateBackupPoms>false</generateBackupPoms>
			</configuration>
		</plugin>

		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>${maven.compiler.plugin.version}</version>
			<configuration>
				<source>${java.version}</source>
				<target>${java.version}</target>
			</configuration>
			<executions>
				<!-- Replacing default-compile as it is treated specially by
				maven -->
				<execution>
					<id>default-compile</id>
					<phase>none</phase>
				</execution>
				<!-- Replacing default-testCompile as it is treated
				specially by maven -->
				<execution>
					<id>default-testCompile</id>
					<phase>none</phase>
				</execution>
				<execution>
					<id>java-compile</id>
					<phase>compile</phase>
					<goals>
						<goal>compile</goal>
					</goals>
				</execution>
				<execution>
					<id>java-test-compile</id>
					<phase>test-compile</phase>
					<goals>
						<goal>testCompile</goal>
					</goals>
				</execution>
			</executions>
		</plugin>

		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>

		<plugin>
			<groupId>io.axoniq</groupId>
			<artifactId>axon-dataprotection-maven-plugin</artifactId>
			<version>${dataprotection-maven-plugin.version}</version>
			<configuration>
				<!-- required -->
				<packages>
					<package>io.axoniq.demo.giftcard.api</package>
				</packages>
				<!-- optional -->
				<outputConfig>axon-data-protection-config.json</outputConfig>
			</configuration>
			<executions>
				<execution>
					<goals>
						<goal>generate</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

Could you remove the @EnableTransactionManagement annotation? I also think a lot if the beans can be omitted for the autowired ones.

The main problem seems a dependency problem. As you use spring boot 3.0.4 there should not be any javax dependencies, but you have two. Removing those might be enough to get the correct missing Jakarta ones on the classpath.

Hi Gerard,

thank you for the answer. With this information I managed to get the application startet using a Postgresql Database.
I inserted some Cards, and I am not trying to select them back for the client, which right not does not work, but I will try. As I said I have no experience at all with Axon and Events and now I do not see what goes wrong because there is no exception but the results (the card which I see now in the Database) are not shown in the browser.

I hat some days off, as in some countries in Europe easter was celebrated.

Tomorrow I will present the results to the team and the project manager.
The technology is very interesting, its sad that we do not have someone with experience in the team.

Thank you a lot for the help.

Hallo Gerard,
maybe you can give me one more hint.
When I insert a new gift card in the database an error is thrown:
com.thoughtworks.xstream.converters.ConversionException:
---- Debugging information ----
cause-exception : java.lang.UnsupportedOperationException
cause-message : can’t get field offset on a record class: private final java.lang.String io.axoniq.demo.giftcard.api.CardIssuedEvent.id
class : io.axoniq.demo.giftcard.api.CardIssuedEvent
required-type : io.axoniq.demo.giftcard.api.CardIssuedEvent
converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path : /io.axoniq.demo.giftcard.api.CardIssuedEvent/id
line number : 2
version : 1.4.20

at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:81) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:68) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:52) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:136) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1464) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1441) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1321) ~[xstream-1.4.20.jar:1.4.20]
at org.axonframework.serialization.xml.XStreamSerializer.doDeserialize(XStreamSerializer.java:147) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.serialization.AbstractXStreamSerializer.deserialize(AbstractXStreamSerializer.java:162) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.serialization.LazyDeserializingObject.getObject(LazyDeserializingObject.java:102) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.serialization.SerializedMessage.getPayload(SerializedMessage.java:79) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.MessageDecorator.getPayload(MessageDecorator.java:56) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.annotation.PayloadParameterResolver.resolveParameterValue(PayloadParameterResolver.java:41) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.annotation.AnnotatedMessageHandlingMember.resolveParameterValues(AnnotatedMessageHandlingMember.java:177) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.annotation.AnnotatedMessageHandlingMember.handle(AnnotatedMessageHandlingMember.java:153) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.annotation.WrappedMessageHandlingMember.handle(WrappedMessageHandlingMember.java:64) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.tracing.TracingHandlerEnhancerDefinition$1.lambda$handle$1(TracingHandlerEnhancerDefinition.java:84) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.tracing.Span.runCallable(Span.java:132) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.tracing.TracingHandlerEnhancerDefinition$1.handle(TracingHandlerEnhancerDefinition.java:84) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.annotation.NoMoreInterceptors.handle(NoMoreInterceptors.java:46) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AnnotationEventHandlerAdapter.handle(AnnotationEventHandlerAdapter.java:100) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.SimpleEventHandlerInvoker.invokeHandlers(SimpleEventHandlerInvoker.java:128) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.SimpleEventHandlerInvoker.handle(SimpleEventHandlerInvoker.java:114) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.MultiEventHandlerInvoker.handle(MultiEventHandlerInvoker.java:91) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.processMessageInUnitOfWork(AbstractEventProcessor.java:195) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$null$1(AbstractEventProcessor.java:173) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:57) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.interceptors.CorrelationDataInterceptor.handle(CorrelationDataInterceptor.java:67) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:55) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor.lambda$new$1(TrackingEventProcessor.java:181) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.DefaultInterceptorChain.proceed(DefaultInterceptorChain.java:55) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$null$2(AbstractEventProcessor.java:174) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.tracing.Span.runCallable(Span.java:132) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$null$3(AbstractEventProcessor.java:170) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.messaging.unitofwork.BatchingUnitOfWork.executeWithResult(BatchingUnitOfWork.java:92) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.lambda$processInUnitOfWork$4(AbstractEventProcessor.java:166) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.tracing.Span.runCallable(Span.java:132) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.AbstractEventProcessor.processInUnitOfWork(AbstractEventProcessor.java:165) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor.processBatch(TrackingEventProcessor.java:491) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor.processingLoop(TrackingEventProcessor.java:316) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor$TrackingSegmentWorker.run(TrackingEventProcessor.java:1200) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.cleanUp(TrackingEventProcessor.java:1402) ~[axon-messaging-4.9.1.jar:4.9.1]
at org.axonframework.eventhandling.TrackingEventProcessor$WorkerLauncher.run(TrackingEventProcessor.java:1379) ~[axon-messaging-4.9.1.jar:4.9.1]
at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]

Caused by: java.lang.UnsupportedOperationException: can’t get field offset on a record class: private final java.lang.String io.axoniq.demo.giftcard.api.CardIssuedEvent.id
at jdk.unsupported/sun.misc.Unsafe.objectFieldOffset(Unsafe.java:648) ~[na:na]
at com.thoughtworks.xstream.converters.reflection.SunUnsafeReflectionProvider.getFieldOffset(SunUnsafeReflectionProvider.java:105) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.converters.reflection.SunUnsafeReflectionProvider.write(SunUnsafeReflectionProvider.java:66) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.converters.reflection.SunUnsafeReflectionProvider.writeField(SunUnsafeReflectionProvider.java:56) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:456) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277) ~[xstream-1.4.20.jar:1.4.20]
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:74) ~[xstream-1.4.20.jar:1.4.20]
… 45 common frames omitted

In the Gui it says sucess, but I think this error is the reason why later the card is not shown in the gui and the search result is empty.

Thank you.

I got it myself. The XStream could not cope with the fact that CardIssuedEvent was a record and I made a class out of it and now the error is gone and the new GiftCard is shown in the gui.
So now the poc is complete, thank you for the help. It is very much appreciated.
I will read your documentation to get to know the framework.
It is a very interesting conzept. I dont know if we will use it in our project, the project manager wants to use it, but there a other factors and stakeholders and maybe we will not use it, but I will continue to educate myself because I personaly find this concept very interesting.

Thanks.

1 Like