This module provides a JPA-based implementation of the TaskStore interface that persists tasks to a relational database instead of keeping them in memory.
The persistence is done with the Jakarta Persistence API, so this should be suitable for any JPA 3.0+ provider and Jakarta EE application server.
Add this module to your project's pom.xml:
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-extras-task-store-database-jpa</artifactId>
<version>${a2a.version}</version>
</dependency>The JpaDatabaseTaskStore is annotated in such a way that it should take precedence over the default InMemoryTaskStore. Hence, it is a drop-in replacement.
The following examples assume you are using PostgreSQL as your database. To use another database, adjust as needed for your environment.
Add to your application.properties:
# Database configuration
quarkus.datasource.db-kind=postgresql
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/a2a_db
quarkus.datasource.username=your_username
quarkus.datasource.password=your_password
# Hibernate configuration
quarkus.hibernate-orm.database.generation=updateCreate or update your persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence" version="3.0">
<persistence-unit name="a2a-java" transaction-type="JTA">
<jta-data-source>java:jboss/datasources/A2ADataSource</jta-data-source>
<class>io.a2a.extras.taskstore.database.jpa.JpaTask</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- Change as required for your environment -->
<property name="jakarta.persistence.schema-generation.database.action" value="create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
</properties>
</persistence-unit>
</persistence>The module will automatically create the required table:
CREATE TABLE a2a_tasks (
task_id VARCHAR(255) PRIMARY KEY,
task_data TEXT NOT NULL
);The module uses the persistence unit name "a2a-java". Ensure your persistence.xml defines a persistence unit with this name.