意外的 NotInTransactionException 异常

Unexpected NotInTransactionException exception

我正在尝试开发一个使用 Neo4J 2.2.1 embedded 的 J2EE 应用程序(在 WildFly 8.2 中)。 由于我是从 Neo4J 1.9 迁移它,该应用程序使用索引遗留系统。

我在某些不应 returns 与事务相关的异常的操作中遇到问题。

例如:

for ( Iterator iterator = node.getPropertyKeys().iterator(); iterator.hasNext(); ) {
            key = (String)(iterator.next());
            ....
}

堆栈跟踪:

File (71):ThreadToStatementContextBridge.java -    org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.assertInUnterminatedTransaction
File (104):ThreadToStatementContextBridge.java - org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.getTopLevelTransactionBoundToThisThread
File (111):ThreadToStatementContextBridge.java - org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.getKernelTransactionBoundToThisThread
File (64):ThreadToStatementContextBridge.java - org.neo4j.kernel.impl.core.ThreadToStatementContextBridge.instance
File (785):InternalAbstractGraphDatabase.java - org.neo4j.kernel.InternalAbstractGraphDatabase.statement
File (358):NodeProxy.java - org.neo4j.kernel.impl.core.NodeProxy.getPropertyKeys

请注意,如果我调用以下命令,我会遇到同样的错误:

Index<Node> indexNode = ...
...
indexNode.get("users", "test@test.com").getSingle()

其中 indexNode 是先前在事务中创建的索引。

有什么想法吗?

谢谢

Neo4j 1.9 -> 2.0 中最具影响力的突破性变化是强制读取事务。每当您进行读取操作时,您都需要围绕它进行交易。

try (Transaction tx=graphDatabaseService.beginTx()) {
   // read stuff - either graph or index operations
   ...

   tx.success(); // make sure to have this, otherwise trouble might happen in case of nested transactions
}