ytwang created CXF-9246:
---------------------------

             Summary: Race condition in threaded ConnectorServerFactory
                 Key: CXF-9246
                 URL: https://issues.apache.org/jira/browse/CXF-9246
             Project: CXF
          Issue Type: Bug
         Environment: JDK: openjdk 17.0.8
Karaf Version: 4.4.3
            Reporter: ytwang


Summary:
Race condition in threaded ConnectorServerFactory
 
Affects Version/s:
4.4.3/4.2.16
 
Component/s:
karaf
 
Environment:
JDK: openjdk 17.0.8
Karaf Version: 4.4.3
 
Description:
Although the issue KARAF-7453 has been addressed, a race condition still occurs 
during repeated Karaf restarts (approximately once in every 100 restarts).
Specifically, when the ConnectorServerFactory in the 
org.apache.karaf.management.server bundle indicates that the Init() method has 
completed, the JMX service is still in the process of starting up. 
Concurrently, the destroy operation has already begun execution.
 
Reproduction Steps:
Restart the Karaf service at five-minute intervals.
 
Normal Startup:
The destroy operation should only be initiated after the JMX service has fully 
completed its startup process.
To illustrate the sequence of execution, we have included log outputs in the 
attachment. A typical output is as follows:
------------------------------------------------------------------------------------
Normal Log:
2026-08-01 00:05:52.137+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java start() Start.,
2026-08-01 00:05:52.142+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java doOpen() Start.,
2026-08-01 00:05:52.144+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-01 00:05:52.144+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-01 00:05:52.144+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-01 00:05:52.144+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java doOpen() End.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java start() scheduled.set(false).,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure-submit Start.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure-submit End.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-01 00:05:52.145+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java start() End.,
2026-08-01 00:05:52.146+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java updated() Start.,
2026-08-01 00:05:52.146+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-01 00:05:52.146+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-01 00:05:52.146+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java updated() End.,
2026-08-01 00:05:52.146+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java run() Start.,
2026-08-01 00:05:52.146+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,Activator.java doStop() Start.,
2026-08-01 00:05:52.146+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java doStop() Start.,
2026-08-01 00:05:52.147+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java doStop() End.,
2026-08-01 00:05:52.147+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,Activator.java doStop() End.,
2026-08-01 00:05:52.147+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,Activator.java doStart() Start.,
2026-08-01 00:05:52.149+0900,INFO,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,Setting java.rmi.server.hostname system property 
to 127.0.0.1,
2026-08-01 00:05:52.167+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,ConnectorServerFactory.java Init() Start.,
2026-08-01 00:05:52.199+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,ConnectorServerFactory.java Init() End.,
2026-08-01 00:05:52.199+0900,DEBUG,JMX Connector Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root] | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,ConnectorServerFactory.java Init-connectorServer 
Start.,
2026-08-01 00:05:52.286+0900,DEBUG,JMX Connector Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root] | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,ConnectorServerFactory.java Init-connectorServer 
End.,
2026-08-01 00:05:52.332+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,Activator.java doStart() End.,
2026-08-01 00:05:52.333+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.242.191>>>,,,,,,,,BaseActivator.java run() End.,
------------------------------------------------------------------------------------
 
 
Abnormal Startup:
The destroy operation is triggered prematurely, before the JMX service has 
fully completed its startup process.
To illustrate the sequence of execution, we have included log outputs in the 
attachment. A typical output is as follows:
------------------------------------------------------------------------------------
Abnormal Log:
2026-08-03 09:02:05.496+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java start() Start.,
2026-08-03 09:02:05.501+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doOpen() Start.,
2026-08-03 09:02:05.502+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-03 09:02:05.502+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doOpen() End.,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java start() scheduled.set(false).,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-03 09:02:05.503+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure-submit Start.,
2026-08-03 09:02:05.504+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure-submit End.,
2026-08-03 09:02:05.504+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-03 09:02:05.504+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java run() Start.,
2026-08-03 09:02:05.504+0900,DEBUG,features-3-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java start() End.,
2026-08-03 09:02:05.504+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStop() Start.,
2026-08-03 09:02:05.506+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doStop() Start.,
2026-08-03 09:02:05.506+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doStop() End.,
2026-08-03 09:02:05.506+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStop() End.,
2026-08-03 09:02:05.506+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStart() Start.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java updated() Start.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() Start.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure-submit Start.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure-submit End.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java reconfigure() End.,
2026-08-03 09:02:05.507+0900,DEBUG,CM Configuration Updater (ManagedService 
Update: pid=[org.apache.karaf.management]) | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java updated() End.,
2026-08-03 09:02:05.507+0900,INFO,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Setting java.rmi.server.hostname system property 
to 127.0.0.1,
2026-08-03 09:02:05.515+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init() Start.,
2026-08-03 09:02:05.533+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init() End.,
2026-08-03 09:02:05.535+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStart() End.,
2026-08-03 09:02:05.535+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java run() End.,
2026-08-03 09:02:05.535+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java run() Start.,
2026-08-03 09:02:05.535+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStop() Start.,
2026-08-03 09:02:05.535+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doStop() Start.,
2026-08-03 09:02:05.536+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java doStop() End.,
2026-08-03 09:02:05.537+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java destroy() Start.,
2026-08-03 09:02:05.541+0900,DEBUG,JMX Connector Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root] | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init-connectorServer 
Start.,
2026-08-03 09:02:05.537+0900,WARN,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | ,<<<192.168.211.15>>>,,,,,,,,Error 
destroying ConnectorServerFactory,object not exported
java.rmi.NoSuchObjectException: object not exported
at sun.rmi.transport.ObjectTable.unexportObject(Unknown Source) ~[?:?]
at java.rmi.server.UnicastRemoteObject.unexportObject(Unknown Source) ~[?:?]
at javax.management.remote.rmi.RMIJRMPServerImpl.unexport(Unknown Source) ~[?:?]
at javax.management.remote.rmi.RMIJRMPServerImpl.closeServer(Unknown Source) 
~[?:?]
at javax.management.remote.rmi.RMIServerImpl.close(Unknown Source) ~[?:?]
at javax.management.remote.rmi.RMIConnectorServer.stop(Unknown Source) ~[?:?]
at 
org.apache.karaf.management.ConnectorServerFactory.destroy(ConnectorServerFactory.java:488)
 ~[?:?]
at org.apache.karaf.management.internal.Activator.doStop(Activator.java:244) 
~[?:?]
at org.apache.karaf.util.tracker.BaseActivator.run(BaseActivator.java:324) 
~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:?]
at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
at java.lang.Thread.run(Unknown Source) ~[?:?]
2026-08-03 09:02:05.544+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStop() End.,
2026-08-03 09:02:05.544+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStart() Start.,
2026-08-03 09:02:05.544+0900,WARN,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,java.rmi.server.hostname system property is 
already set to 127.0.0.1. Apache Karaf doesn't override it,
2026-08-03 09:02:05.544+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init() Start.,
2026-08-03 09:02:05.565+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init() End.,
2026-08-03 09:02:05.567+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,Activator.java doStart() End.,
2026-08-03 09:02:05.567+0900,DEBUG,activator-1-thread-1 | 
org.apache.karaf.management.internal.Activator | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,BaseActivator.java run() End.,
2026-08-03 09:02:05.581+0900,DEBUG,JMX Connector Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root] | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init-connectorServer 
Start.,
2026-08-03 09:02:05.621+0900,DEBUG,JMX Connector Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root] | 
org.apache.karaf.management.ConnectorServerFactory | 212 - 
org.apache.karaf.management.server - 4.4.3 | 
,<<<192.168.211.15>>>,,,,,,,,ConnectorServerFactory.java Init-connectorServer 
End.,
------------------------------------------------------------------------------------
 
Detailed Thread Execution Flow:
The issue stems from a lack of synchronization between the 
ConnectorServerFactory initialization and the actual startup of the underlying 
JMX Connector. 
In the abnormal scenario, the init() method returns (marking the 
ConnectorServerFactory as initialized) before the background thread has fully 
started the JMX Connector. 
This allows the destroy() method to be invoked prematurely by another thread, 
interrupting the JMX startup process.
 
A.Actual Race Condition:
In the failing scenario, the init() method completes while the JMX Connector is 
still starting up in a background thread. 
This creates a window where the connectorServerFactory is "initialized" but the 
JMX service is not yet ready, allowing a concurrent destroy() call to interrupt 
the process.
1.Activator.java doStart() Start
2.ConnectorServerFactory.java Init() Start
3.ConnectorServerFactory.java Init() End ★★(ConnectorServerFactory is 
Initialized)
4.ConnectorServerFactory.java Init-connectorServer Start 
★★(ConnectorServerFactory is Initialized,but JMX Service Starting in Background)
5.Activator.java doStart() End  ★★(Main Thread Finished, but JMX Service Still 
Starting)
  [Note: At this stage, if a destroy() call is triggered by another thread, it 
interrupts the JMX startup, causing the failure.]
6.ConnectorServerFactory.java Init-connectorServer End ★★(JMX Service startup 
failure)
 
B.Expected Behavior:
In a stable scenario, the JMX Connector is fully started before the init() 
method completes, ensuring the service is ready before any potential destroy 
operations can occur.
1.Activator.java doStart() Start
2.ConnectorServerFactory.java Init() Start
3.ConnectorServerFactory.java Init-connectorServer Start
4.ConnectorServerFactory.java Init-connectorServer End ★★(JMX Service Fully 
Started)
5.ConnectorServerFactory.java Init() End ★★(ConnectorServerFactory is 
Initialized)
6.Activator.java doStart() End ★★(Main Thread Finished)
 
 
As seen from the above log, the issue occurs when the ConnectorServerFactory 
indicates initialization as complete, while the JMX service in the background 
thread has not yet finished starting up. 
At this point, the destroy process is initiated.
This conflict also outputs the following stack trace to the stdout/stderr:
 
------------------------------------------------------------------------------------
wrapper.Log:
INFO   | jvm 1    | 2026/08/03 09:02:05 | Exception in thread "JMX Connector 
Thread 
[service:jmx:rmi://127.0.0.1:44544/jndi/rmi://127.0.0.1:11199/karaf-root]" 
java.lang.RuntimeException: Could not start JMX connector server
INFO   | jvm 1    | 2026/08/03 09:02:05 | at 
org.apache.karaf.management.ConnectorServerFactory.lambda$init$0(ConnectorServerFactory.java:444)
INFO   | jvm 1    | 2026/08/03 09:02:05 | at 
java.base/java.lang.Thread.run(Unknown Source)
INFO   | jvm 1    | 2026/08/03 09:02:05 | Caused by: java.io.IOException: The 
server has been stopped.
INFO   | jvm 1    | 2026/08/03 09:02:05 | at 
java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(Unknown
 Source)
INFO   | jvm 1    | 2026/08/03 09:02:05 | at 
org.apache.karaf.management.ConnectorServerFactory.lambda$init$0(ConnectorServerFactory.java:426)
INFO   | jvm 1    | 2026/08/03 09:02:05 | ... 1 more
------------------------------------------------------------------------------------
 
This issue has already occurred twice in the field environment. Therefore, It 
is necessary to modify the Karaf-side code to address the thread race condition.
The proposed temporary workaround is as follows:
A workaround for the issue is to implement a synchronous wait for the JMX 
Connector to have fully started before marking the ConnectorServerFactory as 
initialized.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to