从Clojure捕获riak java客户端的特定异常
我使用下面的Clojure代码从中包装从Clojure捕获riak java客户端的特定异常,java,exception,clojure,riak,Java,Exception,Clojure,Riak,我使用下面的Clojure代码从中包装.ping。但我不喜欢这么直截了当地说: (ns myapp.riak (:import [com.basho.riak.client IRiakClient])) (set! *warn-on-reflection* true) (defn alive? "Is Riak client alive? Returns true or false, unlike `.ping`." [^IRiakClient client] (try
.ping
。但我不喜欢这么直截了当地说:
(ns myapp.riak
(:import [com.basho.riak.client IRiakClient]))
(set! *warn-on-reflection* true)
(defn alive?
"Is Riak client alive? Returns true or false, unlike `.ping`."
[^IRiakClient client]
(try
(.ping client) true
(catch Exception e false)))
我试着抓住这些:
com.basho.riak.client.RiakException
java.net.ConnectException
java.io.IOException
RiakFactory/httpClient
,以防万一
美国东部时间下午4:13更新:一个有趣的方面是调试过程。调试时,
ConnectException
显示在REPL中。但是RiakIORuntimeException
——以下解决方案的一部分——没有出现。我想知道为什么不。平抛出了一个例外-
下一个函数适合我。我没有安装riak,它返回false
(ns riak.core
(:import [com.basho.riak.client IRiakClient RiakFactory RiakException]
[com.basho.riak.client.http.response RiakIORuntimeException]))
(set! *warn-on-reflection* true)
;; (def client (RiakFactory/pbcClient))
(def client (RiakFactory/httpClient))
(defn alive?
"Is Riak client alive? Returns true or false, unlike `.ping`."
[^IRiakClient client]
(try
(.ping client)
true
(catch RiakException e false)
(catch RiakIORuntimeException e false)))
答复:
更新:为httpClient添加了RiakIORuntimeException案例
riak.core> (alive? client)
false