Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,4 @@ nbproject/
# Private Claude config
.claude/
.serena/
claudedocs
3 changes: 2 additions & 1 deletion extras/queue-manager-replicated/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
<modules>
<module>core</module>
<module>replication-mp-reactive</module>
<module>tests</module>
<module>tests-single-instance</module>
<module>tests-multi-instance</module>
</modules>

</project>
25 changes: 25 additions & 0 deletions extras/queue-manager-replicated/tests-multi-instance/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-parent</artifactId>
<version>0.3.0.Beta3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-parent</artifactId>
<packaging>pom</packaging>
<name>Java A2A Extras: Replicated Queue Manager Tests - Multi Instance Parent</name>

<modules>
<module>quarkus-common</module>
<module>quarkus-app-1</module>
<module>quarkus-app-2</module>
<module>tests</module>
</modules>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM openjdk:17-slim

WORKDIR /app

# Copy the built Quarkus application
COPY target/quarkus-app/lib/ /app/lib/
COPY target/quarkus-app/*.jar /app/
COPY target/quarkus-app/app/ /app/app/
COPY target/quarkus-app/quarkus/ /app/quarkus/

EXPOSE 8081

CMD ["java", "-jar", "/app/quarkus-run.jar"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-parent</artifactId>
<version>0.3.0.Beta3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-app-1</artifactId>
<name>Java A2A Extras: Replicated Queue Manager Tests - Multi Instance App 1</name>

<dependencies>
<!-- Common test code -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-common</artifactId>
<version>${project.version}</version>
</dependency>

<!-- Replicated Queue Manager -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replication-mp-reactive</artifactId>
<version>${project.version}</version>
</dependency>

<!-- A2A Reference Implementation -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-sdk-reference-jsonrpc</artifactId>
</dependency>

<!-- JPA TaskStore for shared database -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-extras-task-store-database-jpa</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>

<!-- Kafka Messaging -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-kafka</artifactId>
</dependency>

<!-- Health Check -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>

<!-- CDI -->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.a2a.extras.queuemanager.replicated.tests.multiinstance.app1;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

import io.a2a.extras.queuemanager.replicated.tests.multiinstance.common.MultiInstanceReplicationAgentCards;
import io.a2a.server.PublicAgentCard;
import io.a2a.spec.AgentCard;

@ApplicationScoped
public class MultiInstanceReplicationApp1AgentCardProducer {

@Produces
@PublicAgentCard
public AgentCard agentCard() {
return MultiInstanceReplicationAgentCards.createAgentCard(1, 8081);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.a2a.extras.queuemanager.replicated.tests.multiinstance.app1;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

import io.a2a.extras.queuemanager.replicated.tests.multiinstance.common.MultiInstanceReplicationAgentExecutor;
import io.a2a.server.agentexecution.AgentExecutor;

@ApplicationScoped
public class MultiInstanceReplicationApp1AgentExecutorProducer {

@Produces
public AgentExecutor agentExecutor() {
return new MultiInstanceReplicationAgentExecutor();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Application HTTP Port
quarkus.http.port=8081

# Select our ReplicatedQueueManager and JpaDatabaseTaskStore as the active implementations
quarkus.arc.selected-alternatives=io.a2a.extras.queuemanager.replicated.core.ReplicatedQueueManager,io.a2a.extras.taskstore.database.jpa.JpaDatabaseTaskStore

# Configure PostgreSQL database (connection details will be provided by Testcontainers)
quarkus.datasource."a2a-java".db-kind=postgresql
quarkus.datasource."a2a-java".jdbc.url=${DATABASE_URL:jdbc:postgresql://localhost:5432/a2adb}
quarkus.datasource."a2a-java".username=${DATABASE_USER:a2auser}
quarkus.datasource."a2a-java".password=${DATABASE_PASSWORD:a2apass}
quarkus.hibernate-orm."a2a-java".datasource=a2a-java
quarkus.hibernate-orm."a2a-java".database.generation=drop-and-create
quarkus.hibernate-orm."a2a-java".packages=io.a2a.extras.taskstore.database.jpa

# Configure the outgoing channel (QueueManager -> Kafka)
mp.messaging.outgoing.replicated-events-out.connector=smallrye-kafka
mp.messaging.outgoing.replicated-events-out.topic=replicated-events
mp.messaging.outgoing.replicated-events-out.value.serializer=org.apache.kafka.common.serialization.StringSerializer
mp.messaging.outgoing.replicated-events-out.bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}

# Configure the incoming channel (Kafka -> QueueManager)
mp.messaging.incoming.replicated-events-in.connector=smallrye-kafka
mp.messaging.incoming.replicated-events-in.topic=replicated-events
mp.messaging.incoming.replicated-events-in.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer
mp.messaging.incoming.replicated-events-in.bootstrap.servers=${KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
mp.messaging.incoming.replicated-events-in.group.id=app-1-consumer-group
mp.messaging.incoming.replicated-events-in.auto.offset.reset=earliest

# Disable DevServices - Testcontainers will manage infrastructure
quarkus.devservices.enabled=false
quarkus.kafka.devservices.enabled=false

# Reduce timeouts for faster tests
quarkus.messaging.kafka.health.timeout=5s

# Enable debug logging
quarkus.log.category."io.a2a.server.events".level=DEBUG
quarkus.log.category."io.a2a.server.requesthandlers".level=DEBUG
quarkus.log.category."io.a2a.extras.queuemanager.replicated".level=DEBUG
quarkus.log.category."io.a2a.client".level=DEBUG
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM openjdk:17-slim

WORKDIR /app

# Copy the built Quarkus application
COPY target/quarkus-app/lib/ /app/lib/
COPY target/quarkus-app/*.jar /app/
COPY target/quarkus-app/app/ /app/app/
COPY target/quarkus-app/quarkus/ /app/quarkus/

EXPOSE 8082

CMD ["java", "-jar", "/app/quarkus-run.jar"]
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-parent</artifactId>
<version>0.3.0.Beta3-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-app-2</artifactId>
<name>Java A2A Extras: Replicated Queue Manager Tests - Multi Instance App 2</name>

<dependencies>
<!-- Common test code -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-tests-multi-instance-common</artifactId>
<version>${project.version}</version>
</dependency>

<!-- Replicated Queue Manager -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replicated-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-queue-manager-replication-mp-reactive</artifactId>
<version>${project.version}</version>
</dependency>

<!-- A2A Reference Implementation -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-sdk-reference-jsonrpc</artifactId>
</dependency>

<!-- JPA TaskStore for shared database -->
<dependency>
<groupId>io.github.a2asdk</groupId>
<artifactId>a2a-java-extras-task-store-database-jpa</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-orm</artifactId>
</dependency>

<!-- Kafka Messaging -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-kafka</artifactId>
</dependency>

<!-- Health Check -->
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>

<!-- CDI -->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.a2a.extras.queuemanager.replicated.tests.multiinstance.app2;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

import io.a2a.extras.queuemanager.replicated.tests.multiinstance.common.MultiInstanceReplicationAgentCards;
import io.a2a.server.PublicAgentCard;
import io.a2a.spec.AgentCard;

@ApplicationScoped
public class MultiInstanceReplicationApp2AgentCardProducer {

@Produces
@PublicAgentCard
public AgentCard agentCard() {
return MultiInstanceReplicationAgentCards.createAgentCard(2, 8082);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.a2a.extras.queuemanager.replicated.tests.multiinstance.app2;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.inject.Produces;

import io.a2a.extras.queuemanager.replicated.tests.multiinstance.common.MultiInstanceReplicationAgentExecutor;
import io.a2a.server.agentexecution.AgentExecutor;

@ApplicationScoped
public class MultiInstanceReplicationApp2AgentExecutorProducer {

@Produces
public AgentExecutor agentExecutor() {
return new MultiInstanceReplicationAgentExecutor();
}
}
Loading