You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "shashank (Jira)" <ji...@apache.org> on 2026/10/14 12:07:00 UTC
[jira] [Work started] (CAMEL-25658) camel-bonita - the startCase producer builds a new JAX-RS client for every exchange, and the login filter one more for every request, and none of them is closed
[ https://issues.apache.org/jira/browse/CAMEL-25658?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on CAMEL-25658 started by shashank.
----------------------------------------
> camel-bonita - the startCase producer builds a new JAX-RS client for every exchange, and the login filter one more for every request, and none of them is closed
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25658
> URL: https://issues.apache.org/jira/browse/CAMEL-25658
> Project: Camel
> Issue Type: Bug
> Reporter: shashank
> Assignee: shashank
> Priority: Minor
>
> Follow-up requested in the review of [#27802|https://github.com/apache/camel/pull/27802] (CAMEL-25615, merged): the reviewer found the follow-ups named in its description, "a client per exchange that is never closed, a login before every request", worth a separate JIRA. This ticket is about the clients only; the login before every request is not changed.
> Read on main 1de5ec5135f8:
> * {{BonitaStartProducer.process}} (line 44) calls {{BonitaAPIBuilder.build(bonitaAPIConfig)}} for every exchange, which builds a new JAX-RS {{Client}} (lines 37-39 of {{BonitaAPIBuilder}}). Nothing keeps or closes it.
> * {{BonitaAuthFilter.filter}} logs in before every request (the client keeps no cookies), each time with a new {{Client}} (lines 58-59) that is not closed either.
> So an exchange without a file input (process lookup and case creation, each after a login) leaves three clients that are never closed. What a CXF client holds until it is garbage collected was not measured.
> h3. Proposed fix
> * The producer creates one client when it starts, builds its {{BonitaAPI}} on it with a new {{BonitaAPIBuilder.build(BonitaAPIConfig, Client)}}, uses it for all its exchanges and closes it when it stops. {{BonitaAPIBuilder.build(BonitaAPIConfig)}} keeps its behaviour for other callers (a new client, not closed) and says so in its javadoc.
> * {{BonitaAuthFilter}} closes the client of a login once it has read the cookies of the answer.
> The endpoint options (hostname, port, username, password) are then read when the producer starts instead of for every exchange.
> #27802 is merged now. With both changes the file upload also goes through the client of the producer, so each endpoint still uploads to its own server.
> h3. Test
> New {{BonitaStartProducerClientTest}}: a route to a WireMock Bonita server, the clients seen through a static mock of {{ClientBuilder.newBuilder()}} that records what the real builder builds. Without the change both tests fail: {{clients still open after three exchanges, of 9 created ==> expected: <1> but was: <9>}} and {{clients still open after the route stopped, of 3 created ==> expected: <0> but was: <3>}}. With the change: one client open while the route runs, none after the route or the context stopped, one again after the route is started again. camel-bonita: 20 tests, 0 failures.
> The deprecated upload helper {{BonitaAPIUtil.getInstance}} is not used by Camel since #27802 and is not counted by the test.
> Affected: main, camel-4.23.x, camel-4.22.x and camel-4.18.x have the same lines ({{BonitaStartProducer}} 44, {{BonitaAuthFilter}} 59): read, not run.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)