Details
Description
Generally environment variable usage as described here works, but it does not propagate back to the config admin system and therefore it seems that referencing the property in the same cfg file does not resolve to the overriden value:
Steps to reproduce:
- Using clean Karaf 4.3.3 on Linux openjdk 17
- export ORG_APACHE_KARAF_MANAGEMENT_RMIREGISTRYPORT=4242
- bin/karaf
results in:
Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yamlkaraf: Enabling Java debug options: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 Listening for transport dt_socket at address: 5005 Exception in thread "JMX Connector Thread [service:jmx:rmi://127.0.0.1:44444/jndi/rmi://127.0.0.1:1099/karaf-root]" java.lang.RuntimeException: Could not start JMX connector server at org.apache.karaf.management.ConnectorServerFactory.lambda$init$0(ConnectorServerFactory.java:438) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.io.IOException: Cannot bind to URL [rmi://127.0.0.1:1099/karaf-root]: javax.naming.CommunicationException [Root exception is java.rmi.NoSuchObjectException: no such object in table] at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:834) at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:481) at org.apache.karaf.management.ConnectorServerFactory.lambda$init$0(ConnectorServerFactory.java:421) ... 1 more Caused by: javax.naming.CommunicationException [Root exception is java.rmi.NoSuchObjectException: no such object in table] at jdk.naming.rmi/com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:163) at java.naming/com.sun.jndi.toolkit.url.GenericURLContext.bind(GenericURLContext.java:243) at java.naming/javax.naming.InitialContext.bind(InitialContext.java:417) at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.bind(RMIConnectorServer.java:693) at java.management.rmi/javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:476) ... 2 more Caused by: java.rmi.NoSuchObjectException: no such object in table at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:304) at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:280) at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:381) at java.rmi/sun.rmi.registry.RegistryImpl_Stub.bind(RegistryImpl_Stub.java:73) at jdk.naming.rmi/com.sun.jndi.rmi.registry.RegistryContext.bind(RegistryContext.java:157) ... 6 more
listing the config:
karaf@root()> cl org.apache.karaf.management ---------------------------------------------------------------- Pid: org.apache.karaf.management BundleLocation: ? Properties: daemon = true felix.fileinstall.filename = file:/home/af/Desktop/apache-karaf-4.4.3/etc/org.apache.karaf.management.cfg jmxRealm = karaf jmxmpEnabled = false jmxmpHost = 127.0.0.1 jmxmpObjectName = connector:name=jmxmp jmxmpPort = 9999 jmxmpServiceUrl = service:jmx:jmxmp://127.0.0.1:9999 objectName = connector:name=rmi rmiRegistryHost = 127.0.0.1 rmiRegistryPort = 4242 rmiServerHost = 127.0.0.1 rmiServerPort = 44444 service.pid = org.apache.karaf.management serviceUrl = service:jmx:rmi://127.0.0.1:44444/jndi/rmi://127.0.0.1:1099/karaf-root threaded = true
rmiRegistryPort = 4242 is properly set.
serviceUrl = service:jmx:rmi://${rmiServerHost}:${rmiServerPort}/jndi/rmi://${rmiRegistryHost}:${rmiRegistryPort}/karaf-${karaf.name}
referencing rmiRegistryPort is still on 1099.
assumably this should fail on other indirect variable usages as well.