2024年 Clojure 状态调查!中分享您的想法。

欢迎!请查看关于页面以了解更多关于本网站的工作信息。

0
java.jmx
根据 java.jmx 文档


-------------------------
clojure.java.jmx/with-connection
([opts & body])

  使用基于 opts 构建的 JMX 连接执行 body。opts 可以包括 [默认]

     :protocol     要使用的协议 [rmi:///jndi/rmi]
     :host        连接到的主机 [localhost]
     :port        连接到的端口 [3000]
     :jndi-path   要使用的 jndi-path [jmxuri]
     :url         要使用的完整 URL(作为字符串)
                  而不是从上述选项生成 rmi URL [nil]
     :environment A map representing the environment used for the connection.
                  See JMXConnectorFactory/connect for details [{}]


描述表明 :url 默认为 'nil',如果不为 nil,则将使用上述选项。

然而,如果我叫用函数时 :url 为 nil 和其他选项,它仍然会使用 nil URL,并忽略其他选项。


=> (jmx/with-connection {:url nil :host "localhost"} (jmx/mbean-names "*:*"))

NullPointerException   javax.management.remote.JMXServiceURL.<init> (JMXServiceURL.java:142)
=> (jmx/with-connection {:host "localhost"} (jmx/mbean-names "*:*"))

ConnectException 连接被拒绝 (连接被拒绝)  java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:-2)


我检查了代码


...
(JMXServiceURL. (:url opts# (jmx-url opts#)))
...


我相信这里的意图是在没有 :url 键或 :url 为 nil 时回退到 (jmx-url opts#)(如文档所述)

但实际行为并没有回退,如果 opts# 包含 :url => nil。


=> (:url {:url nil :foo "bar"} "fallback")
nil
=> (:url {:foo "bar"} "fallback")
"fallback"

2 答案

0

评论由:weichu 提供

我想一个简单的 "or" 应该可以工作

-(JMXServiceURL. (:url opts# (jmx-url opts#))) + (JMXServiceURL. (或 (:url opts#) (jmx-url opts#)))

0
参考: https://clojure.atlassian.net/browse/JMX-20 (由 alex+import 报告)
...