Hello,
we implemented our own NettyAcceptorFactory and configured its usage in the standalone.xml as follows:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:17.0">
[...]
<server name="default">
[...]
<acceptor name="stomp-acceptor" factory-class="tld.redacted.activemq.netty.NettyAcceptorFactory">
[...]
The implementation is done in a custom module which is added like this:
<subsystem xmlns="urn:jboss:domain:ee:6.0">
<global-modules>
<module name="tld.redacted.activemq" slot="main" />
The module.xml looks like this:
<?xml version="1.0" encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.9" name="tld.redacted.activemq">
<resources>
<resource-root path="redacted-activemq.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.apache.activemq.artemis.client"/>
<module name="org.apache.activemq.artemis"/>
<module name="org.apache.commons.lang3"/>
<module name="org.bouncycastle.bcprov"/>
<module name="org.bouncycastle.bcpkix"/>
<module name="org.jboss.logging"/>
<module name="org.jboss.msc"/>
</dependencies>
</module>
During WildFly startup the following error occurs:
2026-03-17 09:58:25,430 WARN [org.apache.activemq.artemis.core.server] (ServerService Thread Pool -- 56) AMQ222080: Error creating acceptor: stomp-acceptor: java.lang.IllegalStateException: java.lang.ClassNotFoundException: tld.redacted.activemq.netty.NettyAcceptorFactory from [Module "org.wildfly.extension.messaging-activemq" from local module loader @7fc6de5b (finder: local module finder @21baa903 (roots: C:\redacted\server\modules,C:\redacted\server\modules\system\layers\base))]
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.ClassloadingUtil.newInstanceFromClassLoader(ClassloadingUtil.java:62)
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.ClassloadingUtil.newInstanceFromClassLoader(ClassloadingUtil.java:40)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ServiceRegistryImpl.lambda$loadClass$0(ServiceRegistryImpl.java:253)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.sm.SecurityManagerShim.doPrivileged(SecurityManagerShim.java:144)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ServiceRegistryImpl.loadClass(ServiceRegistryImpl.java:253)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ServiceRegistryImpl.getAcceptorFactory(ServiceRegistryImpl.java:239)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl.createAcceptor(RemotingServiceImpl.java:257)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.remoting.server.impl.RemotingServiceImpl.start(RemotingServiceImpl.java:229)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.initialisePart2(ActiveMQServerImpl.java:3540)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.PrimaryOnlyActivation.run(PrimaryOnlyActivation.java:78)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.internalStart(ActiveMQServerImpl.java:754)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl.start(ActiveMQServerImpl.java:644)
at org.apache.ac...@2.44.0//org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl.start(JMSServerManagerImpl.java:354)
at org.wildfly.extension.messaging-activemq//org.wildfly.extension.messaging.activemq.jms.JMSService.doStart(JMSService.java:194)
at org.wildfly.extension.messaging-activemq//org.wildfly.extension.messaging.activemq.jms.JMSService$1.run(JMSService.java:84)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jbos...@3.9.2//org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jbos...@3.9.2//org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
at org.jbos...@3.9.2//org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
at org.jbos...@3.9.2//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1586)
at java.base/java.lang.Thread.run(Thread.java:840)
at org.jbos...@3.9.2//org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.ClassNotFoundException: tld.redacted.activemq.netty.NettyAcceptorFactory from [Module "org.wildfly.extension.messaging-activemq" from local module loader @7fc6de5b (finder: local module finder @21baa903 (roots: C:\redacted\server\modules,C:\redacted\server\modules\system\layers\base))]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:201)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:408)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:396)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:115)
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.ClassloadingUtil.loadWithCheck(ClassloadingUtil.java:86)
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.ClassloadingUtil.getInstanceWithTypeCheck(ClassloadingUtil.java:72)
at org.apache.active...@2.44.0//org.apache.activemq.artemis.utils.ClassloadingUtil.newInstanceFromClassLoader(ClassloadingUtil.java:58)
... 23 more
It works if we add our module as a dependency to the messaging-activemq module. But we would like to avoid modifying a stock module if possible.
Is there another way? What would be the best or recommended way to make it work?
Thank you very much in advance!
Greetings
Manuel K