This is the integration of the A2A Java SDK for use in Jakarta servers. It is currently tested on WildFly, but it should be usable in other compliant Jakarta servers such as Tomcat, Jetty, and OpenLiberty. For Quarkus, use the reference implementation in the A2A Java SDK project.
For more information about the A2A protocol, see here.
To use the A2A Java SDK in your application, you will need to package it as a .war
file. This can be done with your standard build tool.
The key to enabling A2A in your Java application is to correctly package it. Here are the general steps you need to follow:
-
Create a standard
.war
archive: Your project should be configured to produce a.war
file. This is a standard format for web applications in Java and is supported by all major runtimes. -
Provide implementations for
AgentExecutor
andAgentCard
: The A2A SDK requires you to provide your own implementations of theAgentExecutor
andAgentCard
interfaces. These are the core components that define the behavior of your agent. You can find more information about them in the A2A Java SDK documentation. -
Manage Dependencies: Your
.war
file must contain all necessary libraries in the/WEB-INF/lib
directory. However, some libraries may already be provided by the application server itself.-
Bundling Dependencies: For libraries not provided by the server, you must bundle them inside your
.war
. -
Provided Dependencies: To avoid conflicts and reduce the size of your archive, you should exclude libraries that your target runtime already provides. For example, WildFly includes the Jackson libraries, so you do not need to package them in your application. Check the documentation for your specific runtime (Tomcat, Jetty, OpenLiberty, etc.) to see which dependencies are provided.
-
The tck/pom.xml is a good example of how to package an A2A application. In this case, the application is deployed in WildFly, so the dependencies included in the .war
are tailored to what WildFly provides.
In this case we have the following dependencies:
org.wildfly.extras.a2a:a2a-java-sdk-server-jakarta
- this is the main dependency which transitively pulls in all the dependencies from the A2A Java SDK project.- Since some of these dependencies are provided by WildFly already, we exclude those so they do not become part of the
.war
, in order to avoid inconsistencies.
- Since some of these dependencies are provided by WildFly already, we exclude those so they do not become part of the
jakarta.ws.rs:jakarta.ws.rs-api
- this is not part of the dependencies brought in viaorg.wildfly.extras.a2a:a2a-java-sdk-server-jakarta
but is needed to compile the TCK module. Since it is provided by WildFly, we make the scopeprovided
so it is not included in the.war
.io.github.a2asdk:a2a-tck-server
- this is the application, which contains theAgentExecutor
andAgentCard
implementations for the TCK. In your case, they will most likely be implemented in the project you use to create the.war
.- In this case we exclude all transitive dependencies, since we are doing the main dependency management via the
org.wildfly.extras.a2a:a2a-java-sdk-server-jakarta
dependency.
- In this case we exclude all transitive dependencies, since we are doing the main dependency management via the
The project includes a TCK (Technology Compatibility Kit) that you can use to test the integration with WildFly.
To run the TCK, build the full project
mvn clean install -DskipTests
You now have a server provisioned with the .war
deployed in the tck/target/wildfly
folder.
We can start the server using the following command:
./tck/target/wildfly/bin/standalone.sh
Once the server is up and running, run the TCK with the instructions in a2aproject/a2a-tck. Make sure you check out the correct tag of a2aproject/a2a-tck
for the protocol version we are targeting.