I've been using a QPID C++ client (AMQP) with WildFly 23.0.1 for a while and there is no issues with it. Now I want to use a newer version of WildFly (30+) and found a major problem: QPID client is not able to get or put message in queue with warnings in WildFly log:
standalone.sh[121985]: JAVA_OPTS already set in environment; overriding default settings with values: -Xmx8g
standalone.sh[121985]: =========================================================================
standalone.sh[121985]: JBoss Bootstrap Environment
standalone.sh[121985]: JBOSS_HOME: /opt/wildfly-31.0.0.Final
standalone.sh[121985]: JAVA: java
standalone.sh[121985]: JAVA_OPTS: -Djdk.serialFilter="maxbytes=10485760;maxdepth=128;maxarray=100000;maxrefs=300000" -Xmx8g --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.url.ldap=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.url.ldaps=ALL-UNNAMED --add-exports=jdk.naming.dns/com.sun.jndi.dns=ALL-UNNAMED --add-opens=java.base/com.sun.net.ssl.internal.ssl=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED
standalone.sh[121985]: =========================================================================
standalone.sh[122082]: WARN [org.jboss.as.txn] (ServerService Thread Pool -- 76) WFLYTX0013: The node-identifier attribute on the /subsystem=transactions is set to the default value. This is a danger for environments running multiple servers. Please make sure the attribute value is unique.
standalone.sh[122082]: WARN [org.wildfly.extension.elytron] (MSC service thread 1-6) WFLYELY00023: KeyStore file '/var/stmq/wildfly-31/configuration/application.keystore' does not exist. Used blank.
standalone.sh[122082]: WARN [org.wildfly.extension.elytron] (MSC service thread 1-6) WFLYELY01084: KeyStore /var/stmq/wildfly-31/configuration/application.keystore not found, it will be auto-generated on first use with a self-signed certificate for host localhost
standalone.sh[122082]: WARN [org.apache.activemq.artemis.core.client] (Thread-110) AMQ212037: Connection failure to /127.0.0.1:39496 has been detected: javax/management/openmbean/CompositeData [code=GENERIC_EXCEPTION]
standalone.sh[122082]: WARN [org.apache.activemq.artemis.core.server] (Thread-110) AMQ222061: Client connection failed, clearing up resources for session 16f2cfc6-da04-11ee-aae6-005056b82d10
standalone.sh[122082]: WARN [org.apache.activemq.artemis.core.server] (Thread-110) AMQ222107: Cleared up resources for session 16f2cfc6-da04-11ee-aae6-005056b82d10
It seems that org.apache.activemq.artemis.client and org.apache.activemq.artemis.protocol.amqp modules are missing javax.management.openmbean.CompositeData class dependency, but JAVA_OPTS
has --add-opens=java.management/javax.management=ALL-UNNAMED
clause when server is starting.
Messaging-subsystem is configured in simple - non-suspicious way:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:16.0">
<server name="amqserver">
<security elytron-domain="ApplicationDomain"/>
<management jmx-enabled="true"/>
<security-setting name="#">
<role name="amqapp" send="true" consume="true"/>
</security-setting>
<address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" auto-create-addresses="false"/>
<in-vm-connector name="in-vm" server-id="1"/>
<!--<remote-acceptor name="activemq" socket-binding="61616"/>-->
<in-vm-acceptor name="in-vm" server-id="1"/>
<acceptor name="amqp-acceptor" socket-binding="61616" factory-class="org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory">
<param name="protocols" value="AMQP,CORE"/>
<param name="connection-ttl" value="30000"/>
</acceptor>
<jms-queue name="ExpiryQueue" entries="java:/jms/queues/ExpiryQueue"/>
<jms-queue name="DLQ" entries="java:/jms/queues/DLQ"/>
<jms-queue name="AMQP.IN" entries="java:/jms/queues/AMQP.IN"/>
<jms-queue name="AMQP.OUT" entries="java:/jms/queues/AMQP.OUT"/>
<connection-factory name="in-vm" entries="java:/ConnectionFactory" connectors="in-vm"/>
</server>
</subsystem>
Editing any of modules.xml
inside $WILDFLY_HOME/modules/system/layers/base/org/apache/artemis/*
gives another boot-error:
AMQ224097: Failed to start server: java.lang.NoClassDefFoundError: javax/management/openmbean/CompositeData
How can I add module javax.management
to WildFly environment, and which version should I use?
PS: WildFly running via openjdk version "11.0.17" 2022-10-18 LTS.
Adding <module name="java.management"/>
to the dependencies of the module org.apache.activemq.artemis.protocol.amqp
fixes this.
I've created https://issues.redhat.com/browse/WFLY-19089 to track this