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

欢迎!请查看 关于页面 以获取更多关于如何使用本站的信息。

0
java.jmx
根据 java.jmx 文档


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

  使用基于 opts 创建的 JMX 连接执行 body。opts 可以包含 [default]

     :protocol    要使用的协议 [rmi:///jndi/rmi]
     :host        要连接到的主机 [localhost]
     :port        要连接到的端口号 [3000]
     :jndi-path   要使用的 jndi-path [jmxuri]
     :url         要使用的完整 URL(作为字符串),而不是使用上述选项生成 rmi URL [nil]
                              使用上述选项而不是生成 rmi URL [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 "*:*"))

连接异常 连接被拒绝 (连接被拒绝)  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 报告)
...