2013-05-27 4 views
0

Я пытаюсь разобраться с транзакциями (я использую neo4j 1.8.2), но не могу понять, как обрабатывать ошибки.Обработка ошибок транзакций Neo4j

Например я создаю узел:

public Node createNode() { 
    Transaction tx = getGraphDb().beginTx(); 
    try { 
     Node node = graphDb.createNode(); 
     tx.success(); 
     return node; 
    } finally { 
     tx.finish(); 
    } 
} 

Что произойдет, если узел не будет создан, и как я его получить? Должен ли я проверить, является ли узел нулевым?

ответ

2

Вы можете использовать следующий фрагмент кода. Исключение в условии catch указывает вам, что пошло не так.

Transaction tx = graphDb.beginTx();  
Node n = null; 
try { 
    n = graphDb.createNode(); 
    tx.success(); 
} catch (Exception e) { 
    tx.failure(); 
} finally { 
    tx.finish(); 
} 

Сделка будет откат на tx.finish(), когда tx.failure() называется.

УВЕДОМЛЕНИЕ: org.neo4j.graphdb.Transaction.finish() является устаревшим в пользу примерочных с-ресурсом заявления см: http://javadox.com/org.neo4j/neo4j-kernel/2.0.3/deprecated-list.html.

Теперь правильный путь будет:

try (Transaction tx = graphDatabaseService.beginTx()) 
{ 
      //work here 
      tx.success(); 
} 
+0

По какой-то причине я думал, что ничего не поймает, потому что этот метод не вызывает никаких исключений, спасибо =) – MightySeal

1

tx.failure() на самом деле не нужно в этом случае. Отсутствие tx.success() также откатит транзакцию. Таким образом, вы можете сказать, что это управление транзакциями с исключительным контролем.

Смежные вопросы