从Clojure捕获riak java客户端的特定异常

从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

我使用下面的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 client) true
    (catch Exception e false)))
我试着抓住这些:

  • com.basho.riak.client.RiakException
  • java.net.ConnectException
  • java.io.IOException
但这些(单独或联合)都不起作用

我做错了什么

美国东部夏令时下午3:56更新:我正在使用
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