Add call-timeout attribute to the Artemis core bridge resource
Overview
The Artemis broker defines a call-timeout attribute on the core bridge, which sets a time out for blocking calls to the server. Unless modified, the call-timeout defaults to 30 seconds (this is the default value defined in Artemis). It is possible to programmatically modify this timeout by a lower level Artemis API, but it is not currently possible to modify with the high level API that Wildfly currently uses to create core bridges. It is currently not possible at all to modify this attribute by a Wildfly administrator.
It was requested to make this attribute configurable via the Wildfly management model.
Issue Metadata
Related Issues
Dev Contacts
QE Contacts
Testing By
[x] Engineering
[ ] QE
Affected Projects or Components
-
Wildfly
-
ActiveMQ Artemis
Other Interested Projects
Requirements
Hard Requirements
-
Make the
BridgeConfiguration#callTimeoutattribute configurable via the Wildfly management model.
Nice-to-Have Requirements
None.
Non-Requirements
None.
Implementation Plan
Relevant Entities
-
ActiveMQServerControlis a part of the high level Artemis API used to control the embedded Artemis broker. -
ActiveMQServeris part of a lower level Artemis API used to control the embedded Artemis broker. -
BridgeDefinitionis a Wildfly management model resource definition class describing the Artemis core bridge. -
BridgeAddis a Wildfly controller handler used to create the Artemis core bridges.
Code Changes
-
Add the
call-timeoutattribute to theBridgeDefinitionclass in the messaging-activemq subsystem. This also requires creating new schema version of the messaging management model (version 13).Attribute is of type long, unit is milliseconds, and its' default value is 30000 ms. The default value is defined in the Artemis code base (
this.callTimeout = 30000L;inBridgeDefinitionconstructor) as well as in the Wildfly management model definition of the attribute. -
Modify the
BridgeAddclass so that theBridgeDefinition#call-timeoutmanagement model value is propagated to the code responsible for creating the bridge. Currently, the attribute values are passed to theActiveMQServerControl#createBridge()method (part of Artemis API). There are several variants of this method, none of these however accepts thecall-timeoutattribute. Because of that, bridges needs to be created with a lower level API by callingActiveMQServer#deployBridge()(rather thanActiveMQServerControl#createBridge()).
Future Plans
New variant of the ActiveMQServerControl#createBridge() method is being prepared in Artemis 2.17, which would accept
a single String parameter, which would be a JSON string representation of a BridgeConfiguration instance.
This new method should become the preferred variant,
the other variants will be deprecated.
When Artemis 2.17 will be pulled into Wildfly, the BridgeAdd handler should be modified to use the new JSON string
method variant, which will simplify the code.
This change will be tracked by a separate RFE.
Test Plan
-
Verify changes in Wildfly management model:
-
verify that
call-timeoutvalue is read from XML configuration file, -
verify that the attribute is rejected when transforming to older schema version.
-
-
Verify that the
BridgeAddhandler propagates thecall-timeoutvalue to the Artemis API (ActiveMQServer.deployBridge()orActiveMQServerControl.deployBridge()) -
Provide an integration test which would create a bridge and verify the bridge is functional.
Community Documentation
-
Attribute description in the Wildfly management model: "A blocking call timeout for this bridge."
Otherwise no community documentation is needed.
Release Note Content
Added the call-timeout attribute on JMS core bridge. The attribute specifies time out on blocking calls performed by a core bridge.