【问题标题】:Pelops - Catch Connection Error?Pelops - 捕获连接错误?
【发布时间】:2011-09-14 07:28:51
【问题描述】:

在 Java 中使用 pelops 时有没有办法捕获连接错误?我有以下代码,但由于某种原因,我没有进入我的 catch 块。

public static Boolean testDBConnection() throws PelopsException {
    try{
        Cluster cluster = new Cluster("127.0.0.1", 9160);

        Pelops.addPool(pool, cluster, keyspace);

        Pelops.shutdown();

        return true;
    }
    catch(PelopsException e)
    {
        System.out.println("SOMETHING WENT WRONG!");
        System.out.println(e.getMessage());
        return false;
    }
}

这可能真的很容易,但我似乎无法让它工作。我看到了异常,但是我无法捕捉到这个?有人可以引导我朝着正确的方向前进吗?

谢谢!

编辑 - 在 Eclipse 控制台中返回异常...

15:47:33.545 [main] DEBUG o.s.c.pelops.pool.CommonsBackedPool - Made new connection 'Connection[Testing][127.0.0.1:9160][724408050]'
15:47:34.545 [main] ERROR o.scale7.cassandra.pelops.Connection - Failed to open transport.  See cause for details...
org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused: connect
    at org.apache.thrift.transport.TSocket.open(TSocket.java:185) ~[libthrift-0.5.0.jar:na]
    at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81) ~[libthrift-0.5.0.jar:na]
    at org.scale7.cassandra.pelops.Connection.open(Connection.java:70) ~[scale7-pelops-0.913.jar:na]
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool$ConnectionFactory.makeObject(CommonsBackedPool.java:785) [scale7-pelops-0.913.jar:na]
    at org.apache.commons.pool.impl.GenericKeyedObjectPool.addObject(GenericKeyedObjectPool.java:1685) [commons-pool-1.5.5.jar:1.5.5]
    at org.apache.commons.pool.impl.GenericKeyedObjectPool.ensureMinIdle(GenericKeyedObjectPool.java:2058) [commons-pool-1.5.5.jar:1.5.5]
    at org.apache.commons.pool.impl.GenericKeyedObjectPool.preparePool(GenericKeyedObjectPool.java:1722) [commons-pool-1.5.5.jar:1.5.5]
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool.addNode(CommonsBackedPool.java:373) [scale7-pelops-0.913.jar:na]
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool.<init>(CommonsBackedPool.java:104) [scale7-pelops-0.913.jar:na]
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool.<init>(CommonsBackedPool.java:64) [scale7-pelops-0.913.jar:na]
    at org.scale7.cassandra.pelops.pool.CommonsBackedPool.<init>(CommonsBackedPool.java:52) [scale7-pelops-0.913.jar:na]
    at org.scale7.cassandra.pelops.Pelops.addPool(Pelops.java:25) [scale7-pelops-0.913.jar:na]
    at libraries.cassandra.testDBConnection(cassandra.java:192) [classes/:na]
    at libraries.cassandra.main(cassandra.java:38) [classes/:na]
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.6.0_25]
    at java.net.PlainSocketImpl.doConnect(Unknown Source) ~[na:1.6.0_25]
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) ~[na:1.6.0_25]
    at java.net.PlainSocketImpl.connect(Unknown Source) ~[na:1.6.0_25]
    at java.net.SocksSocketImpl.connect(Unknown Source) ~[na:1.6.0_25]
    at java.net.Socket.connect(Unknown Source) ~[na:1.6.0_25]
    at org.apache.thrift.transport.TSocket.open(TSocket.java:180) ~[libthrift-0.5.0.jar:na]
    ... 13 common frames omitted

【问题讨论】:

  • 当您说异常正在发生时,它们是从哪里发生的?
  • 在我的控制台上,在 Eclipse 中,我可以看到连接异常通过,但我无法捕捉到它...编辑了上面的示例,以便您可以看到异常。

标签: java database cassandra pelops


【解决方案1】:

抛出的异常 org.apache.thrift.TTransportException 是一个检查的异常,它没有被扩展 RuntimeException 的 PelopsException 捕获和包装。

如果您希望您的方法始终返回 PelopsException,您必须 catch(Exception e) 然后在您的 catch 块中抛出 new PelopsException(e.getMessage())。

   catch(Exception e)
{
    System.out.println("SOMETHING WENT WRONG!");
    System.out.println(e.getMessage());
    throw new PelopsException(e.getMessage());
}

【讨论】:

  • 那也没用。它实际上不会抛出 PelopsException,因为我从未将它放入 catch 块中?
  • 哦等等..函数返回一个真值?
  • 是的,它将返回真实值,但我无法捕捉到它在 Eclipse 控制台中打印的错误。这就像它打印出来,但继续尝试。然后运行关机并返回true。
  • 好的。看起来他没有从该方法中抛出任何异常,而您所看到的只是日志记录。
  • 感谢您的帮助。我会联系运行该项目的小组。
【解决方案2】:

它可能会抛出unchecked exception 或错误(不是异常)。

尝试将您的代码更改为catch (Throwable e),看看会得到什么。

【讨论】:

  • 是的,试过了,没有发生。我什至试图捕捉 java.net.ConnectException 和 org.apache.thrift.transport.TTransportException,没有骰子。 :P
  • @kevin - 我编辑了答案以包含错误 - 尝试 catch Throwable
  • 试了掷骰子,还是没有骰子。就像函数正在运行,它试图建立一个连接,然后实际的关闭过程正在发生,函数返回 true。记录器正在报告错误,但它仍然完成了尝试代码块?
猜你喜欢
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
相关资源
最近更新 更多