Skip to content

Commit a6cbb0a

Browse files
authored
docs: Adding the release note for 1.4.0.Final (#1195)
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
1 parent ad9571c commit a6cbb0a

2 files changed

Lines changed: 140 additions & 0 deletions

File tree

2.15 MB
Loading
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
layout: post
3+
title: 'A2A Java SDK 1.4.0.Final Released'
4+
date: 2026-09-28
5+
tags: ai a2a
6+
synopsis: 'A2A Java SDK 1.4.0.Final is now available -- with SSE configuration improvements, a breaking change in the multi-tenancy @Tenant qualifier, ITK enhancements, and a comprehensive wave of bug fixes.'
7+
author: ehsavoie
8+
image: announce.png
9+
---
10+
11+
image::announce.png[A2A Java SDK 1.4.0.Final announcement]
12+
13+
I am happy to announce the release of link:https://github.com/a2aproject/a2a-java/releases/tag/v1.4.0.Final[A2A Java SDK 1.4.0.Final]. This release consolidates the multi-tenancy API with an important breaking change, brings SSE configuration improvements, strengthens interoperability testing, and delivers a large set of bug fixes across all transports.
14+
15+
NOTE: This release contains a **breaking change** affecting the `@Tenant` qualifier. See the <<migration>> section for details.
16+
17+
== What's New
18+
19+
=== Multi-Tenancy: `@Tenant` Qualifier Consolidation
20+
21+
The `@Tenant` qualifier annotation has been moved **from** `a2a-java-extras-multitenancy` **into** `server-common` (link:https://github.com/a2aproject/a2a-java/pull/1176[\#1176]). This is a **breaking change** -- see <<migration>> below.
22+
23+
Moving the qualifier into `server-common` means the CDI runtime can now correctly filter out tenant-qualified beans at all `@PublicAgentCard` and `@ExtendedAgentCard` injection points. Previously, annotating a tenant card with both `@Tenant("x")` and `@PublicAgentCard` would cause CDI ambiguity and result in 404 errors on the default route.
24+
25+
Additional improvements in this area:
26+
27+
* Tenant cards annotated with both `@Tenant("x")` and `@PublicAgentCard` now take precedence over bare `@Tenant` cards at the public card endpoint.
28+
* Duplicate `@ExtendedAgentCard` registrations for the same tenant are now rejected at startup instead of silently winning arbitrarily.
29+
* Missing default `AgentExecutor` beans now throw an explicit exception at startup rather than causing silent runtime failures.
30+
* Agent card resolution now correctly falls back to the router even when no default bean is present (link:https://github.com/a2aproject/a2a-java/pull/1184[\#1184]).
31+
32+
=== SSE Configuration
33+
34+
A new `SSEParserConfig` class (link:https://github.com/a2aproject/a2a-java/pull/1149[\#1149]) makes Server-Sent Events parsing configurable per client. The default per-line size limit has been raised to 1 MB, resolving issues where large message payloads were rejected by the SSE parser.
35+
36+
=== `application/a2a+json` Content-Type Support
37+
38+
The server transports now recognize `application/a2a+json` as a valid content type alongside `application/json` (link:https://github.com/a2aproject/a2a-java/pull/1181[\#1181]), improving out-of-the-box interoperability with clients that send this media type.
39+
40+
=== ITK Enhancements
41+
42+
The ITK test agent gains ACTS SUT behavior support via YAML configuration (link:https://github.com/a2aproject/a2a-java/pull/1150[\#1150]), along with CI workflow integration and an auth precondition implementation (link:https://github.com/a2aproject/a2a-java/pull/1157[\#1157]). These additions make it easier to configure and run interoperability tests against the upstream ACTS test harness.
43+
44+
=== Documentation Improvements
45+
46+
* A complete `TaskAuthorizationProvider` implementation example has been added to the documentation (link:https://github.com/a2aproject/a2a-java/pull/1146[\#1146]).
47+
* Security advisory link:https://github.com/a2aproject/a2a-java/security/advisories/GHSA-4fpj-g9jf-9rgg[GHSA-4fpj-g9jf-9rgg] has been incorporated into the threat model (link:https://github.com/a2aproject/a2a-java/pull/1148[\#1148]).
48+
* JDK HttpClient's restricted `Host` header behavior and the Vert.x HTTP client as an alternative are now documented (link:https://github.com/a2aproject/a2a-java/pull/1180[\#1180]).
49+
50+
== Bug Fixes
51+
52+
* **Task history** -- current status messages are no longer incorrectly included in task history (link:https://github.com/a2aproject/a2a-java/pull/1122[\#1122])
53+
* **Push notification config** -- omitted push config IDs are now accepted in both HTTP (link:https://github.com/a2aproject/a2a-java/pull/1092[\#1092]) and gRPC (link:https://github.com/a2aproject/a2a-java/pull/1163[\#1163]) transports
54+
* **Push notification ordering** -- delivery order of push notifications per task is now preserved (link:https://github.com/a2aproject/a2a-java/pull/1156[\#1156])
55+
* **gRPC `Part.metadata`** -- the `metadata` field is now correctly mapped in 0.3 gRPC classes (link:https://github.com/a2aproject/a2a-java/pull/1169[\#1169])
56+
* **Blank task/context IDs** -- blank `taskId` and `contextId` values in `messages/send` are treated as absent (link:https://github.com/a2aproject/a2a-java/pull/1172[\#1172])
57+
* **JSON null preservation** -- explicit JSON nulls in value mappings are now preserved correctly (link:https://github.com/a2aproject/a2a-java/pull/1174[\#1174])
58+
* **Relative redirects** -- relative `Location` header values in HTTP redirects are now resolved against the request URI (link:https://github.com/a2aproject/a2a-java/pull/1162[\#1162])
59+
* **SSE terminal callback** -- exactly one terminal SSE callback is now guaranteed (link:https://github.com/a2aproject/a2a-java/pull/1173[\#1173])
60+
* **`A2ACardResolver` fallback URL** -- a fallback URL is now always provided (link:https://github.com/a2aproject/a2a-java/pull/1179[\#1179])
61+
* **Event bus processor** -- the event bus processor now starts correctly when using manual (non-CDI) wiring (link:https://github.com/a2aproject/a2a-java/pull/997[\#997])
62+
* **Terminal enqueue recovery** -- failed terminal enqueue operations are now recovered (link:https://github.com/a2aproject/a2a-java/pull/1185[\#1185])
63+
64+
[[migration]]
65+
== Migration from 1.3.x
66+
67+
Update your BOM version:
68+
69+
[source,xml]
70+
----
71+
<dependencyManagement>
72+
<dependencies>
73+
<dependency>
74+
<groupId>org.a2aproject.sdk</groupId>
75+
<artifactId>a2a-java-sdk-bom</artifactId>
76+
<version>1.4.0.Final</version>
77+
<type>pom</type>
78+
<scope>import</scope>
79+
</dependency>
80+
</dependencies>
81+
</dependencyManagement>
82+
----
83+
84+
[[tenant-migration]]
85+
=== `@Tenant` Import Change (Breaking)
86+
87+
The `@Tenant` qualifier has moved from the `a2a-java-extras-multitenancy` module into `server-common`, and its package has changed accordingly. Any class that imports `@Tenant` must be updated:
88+
89+
[source,java]
90+
----
91+
// Before (1.3.x) -- from the extras module
92+
import org.a2aproject.sdk.extras.multitenancy.Tenant;
93+
94+
// After (1.4.0) -- from server-common
95+
import org.a2aproject.sdk.server.multitenancy.Tenant;
96+
----
97+
98+
The annotation's semantics are unchanged. No other code modifications are required.
99+
100+
=== Missing Default `AgentExecutor` Now Throws
101+
102+
If a CDI-based multi-tenant deployment has no default `AgentExecutor` bean, the server will now throw an explicit exception at startup. Previously this would compile and deploy successfully but fail silently at runtime. Ensure a default `AgentExecutor` bean is always registered, or supply an `AgentExecutorRouter` programmatically via the builder:
103+
104+
[source,java]
105+
----
106+
AgentExecutorRouter router = tenant ->
107+
executors.getOrDefault(tenant, defaultExecutor);
108+
109+
DefaultRequestHandler handler = DefaultRequestHandler.builder()
110+
.agentExecutorRouter(router)
111+
.taskStore(taskStore)
112+
.queueManager(queueManager)
113+
// ...
114+
.build();
115+
----
116+
117+
== Contributors
118+
119+
A big thank you to all contributors of this release -- and a warm welcome to those joining for the first time!
120+
121+
link:https://github.com/ehsavoie[@ehsavoie], link:https://github.com/kabir[@kabir], link:https://github.com/JakubWorek[@JakubWorek], link:https://github.com/014-code[@014-code], link:https://github.com/1fanwang[@1fanwang], link:https://github.com/hutiefang76[@hutiefang76], link:https://github.com/serhiy-bzhezytskyy[@serhiy-bzhezytskyy], link:https://github.com/56wj[@56wj], link:https://github.com/paulrutter[@paulrutter], link:https://github.com/girishkvs[@girishkvs], link:https://github.com/chopmob-cloud[@chopmob-cloud]
122+
123+
== Resources
124+
125+
* link:https://github.com/a2aproject/a2a-java/releases/tag/v1.4.0.Final[Release Notes on GitHub]
126+
* link:https://central.sonatype.com/artifact/org.a2aproject.sdk/a2a-java-sdk-parent/1.4.0.Final[Maven Central]
127+
* link:https://javadoc.io/doc/org.a2aproject.sdk/[JavaDoc]
128+
* link:https://a2a-protocol.org/v1.0.0/specification/[A2A Specification]
129+
* link:https://a2aproject.github.io/a2a-java/[Project Website]
130+
* link:https://github.com/a2aproject/a2a-java/tree/main/examples[Examples]
131+
132+
== Come Join Us
133+
134+
We value your feedback a lot so please report bugs, ask for improvements etc. Let's build something great together!
135+
136+
If you are an A2A Java SDK user or just curious, don't be shy and join our welcoming community:
137+
138+
* provide feedback on link:https://github.com/a2aproject/a2a-java/issues[GitHub];
139+
* craft some code and link:https://github.com/a2aproject/a2a-java/pulls[push a PR];
140+
* discuss with us in the `#a2a-java` channel on link:https://discord.gg/jTtSkJB74Q[Discord];

0 commit comments

Comments
 (0)