#java #database #cassandra #pelops
#java #База данных #cassandra #pelops
Вопрос:
Есть ли способ перехватить ошибку подключения при использовании pelops в Java? У меня есть следующий код, но по какой-то причине я не добираюсь до своего блока 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
Комментарии:
1. когда вы говорите, что исключения проходят, где они проходят?
2. Ну, на моей консоли, в eclipse, я вижу, что происходит исключение подключения, но я не могу его перехватить … отредактировал приведенный выше пример, чтобы вы могли видеть исключение.
Ответ №1:
Генерируемое исключение org.apache.thrift.TTransportException — это проверяемое исключение, которое не перехвачено и не обернуто PelopsException, которое расширяет RuntimeException.
Если вы хотите, чтобы ваш метод всегда возвращал исключение PelopsException, вы должны catch(Exception e)
затем создать новое исключение PelopsException (например,GetMessage()) внутри вашего блока catch.
catch(Exception e)
{
System.out.println("SOMETHING WENT WRONG!");
System.out.println(e.getMessage());
throw new PelopsException(e.getMessage());
}
Комментарии:
1. это тоже не сработало. На самом деле это не вызовет исключение PelopsException, потому что я никогда не помещаю его в блок catch?
2. о, подождите .. функция возвращает значение true ?
3. да, он вернет истинное значение, но я не могу перехватить ошибку, которую он выводит в консоли eclipse. Это похоже на то, что он выводит это, но продолжает пытаться. затем выполняется завершение работы и возвращается true.
4. ОК. Похоже, что он не выдает никаких исключений из этого метода, и то, что вы видите, просто регистрируется.
5. спасибо за вашу помощь. Я свяжусь с группой, которая запускает проект.
Ответ №2:
Это может быть непроверенное исключение или ошибка (которая не является исключением).
Попробуйте изменить свой код на catch (Throwable e)
и посмотрите, что вы получите.
Комментарии:
1. Да, пробовал это, не происходит. Я даже пытался перехватить java.net.ConnectException и org.apache.thrift.transport. Исключение TTransportException, нет кости. 😛
2. @kevin — я отредактировал ответ, чтобы включить ошибки — попробуйте catch Throwable
3. попробовал throwable, и все еще никаких кубиков. Это похоже на то, что функции запущены, и они пытаются установить соединение, затем выполняется фактическая процедура завершения работы, и функция возвращает true . Регистратор сообщает об ошибке, но она по-прежнему завершает блок кода try?