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

欢迎!请参阅关于页面获取有关如何操作的更多信息。

0
java.jmx
根据java.jmx文档


-------------------------
clojure.java.jmx/with-connection
([opts & body])
宏定义
  使用基于 opts 创建的 JMX 连接执行该语句。opts 可以包括 [default]

     :protocol    要使用的协议 [rmi:///jndi/rmi]
     :host        要连接的主机 [localhost]
     :port        要连接的端口 [3000]
     :jndi-path   要使用的 jndi-path [jmxuri]
     :url         要使用的完整 URL(作为字符串)而不是从上述选项生成 rmi URL [nil]
                     上面的选项 [nil]
     :environment 用于连接的环境表示的映射。
                 有关详情,请参阅 JMXConnectorFactory/connect [{}]


描述表明 :url 默认为 '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

我认为简单的“或”应该可行

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

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