- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只花了 10 分钟弄清楚为什么我针对测试数据库的单元测试需要大约 25 秒才能完成一个简单的查询。显然,原因是我忘记在 Transaction
中包装对 ExecutionEngine#execute(String)
的调用。我不知道那应该是可能的。嗯。
我的代码看起来像这样:
...
@Before
public void before() {
db = new TestGraphDatabaseFactory().newImpermanentDatabase();
/* create all the test nodes and rels */
}
@After
public void after() {
db.shutdown();
}
@Test
public void testAllTheThings() {
/* build the cypher query */
Iterable<Map<String, Object>> result = engine.execute(cypher);
/* assert all the things */
}
...
这里令人困惑的部分是 execute()
立即返回并执行以下语句。但是,测试在成功终止之前停顿了大约 25 秒。
将语句更改为以下内容按预期工作,没有任何滞后:
...
try (Transaction transaction = db.beginTx()) {
Iterable<Map<String, Object>> result = engine.execute(cypher);
}
...
这里到底发生了什么?为什么可以这样做?
最佳答案
我怀疑您没有用完 ExecutionEngine#execute()
返回的 ExecutionResult
中的 Iterator
。如果这样做,测试将快速完成,而无需将 execute()
包装在事务中。
这是我认为正在发生的事情,尽管我还没有在调试器中重现它。
ExecutionEngine#execute()
创建自己的事务,因此没有必要创建自己的事务。但是,所有交易都必须关闭。在这种情况下,事务状态由 ExecutionResult
处理,其方法如文档中所述 here .如果您部分使用结果 Iterator
,则事务将保持打开状态。
当您调用 GraphDatabaseService#shutdown()
时,它会尝试通过在强制关闭之前等待它们完成来容纳打开的事务。您在测试中看到的停顿可能是超时发生的原因。当然,在这种情况下,事务不可能在等待期间关闭,因为它由关闭数据库的同一个线程持有。
因为事务与线程相关联,原则上,GraphDatabaseService
可以检测到这种情况并在不等待的情况下关闭事务。然而,在生产代码中,同一个线程执行事务和控制数据库的情况可能很少见,因此额外的复杂性是不合理的。
处理此问题的最简单方法是始终确保用尽 ExecutionEngine
返回的结果迭代器。
关于java - 在事务之外使用 ExecutionEngine#execute(String)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23349546/
我正在使用 Neo4j 1.8.RC1,并尝试为图中的节点生成聚类系数。 我有以下代码,据我所知,它可以在 Linux 系统上运行,但不能在我的 Windows 计算机上运行: Map params
尝试使用找到的示例代码中的类似示例 here 我的示例函数是: void query() { String nodeResult = ""; String rows = "";
我只花了 10 分钟弄清楚为什么我针对测试数据库的单元测试需要大约 25 秒才能完成一个简单的查询。显然,原因是我忘记在 Transaction 中包装对 ExecutionEngine#execut
我在想ExecutionEngine在 java 中对 neo4j 数据库运行密码查询。 我想获取节点存在的所有关系。 我的原始密码是: MATCH (n:Phone{id:'you'}) MATCH
在 Neo4j 的 neo4j-2.2.0-M03 版本中,当我尝试导入时 import org.neo4j.cypher.javacompat.ExecutionEngine; 和 导入 org.n
我有一个使用 LLVM-C 的简单程序: #define __STDC_LIMIT_MACROS #define __STDC_CONSTANT_MACROS #include #include
我一直在研究 OCaml 的 LLVM Kaleidoscope 教程。在教程的第三部分,我已经导航到文件夹中的示例代码 OCaml-Kaleidoscope\Chapter4 编译时遇到问题 oca
我正在学习 llvm 并想对我的想法进行概念证明。 基本上,我想拆分我的编译器和我的运行时。编译器会给出一个 .bc,运行时会通过 ParseBitcodeFile 加载它并使用 ExecutionE
ExecutionEngine 实例的最佳实践是什么?我记得在 Neo4j 新闻组上看到一篇文章说应该在应用程序中共享一个实例,但我能找到的所有示例都表明并非如此。总体最佳实践是什么?这有关系吗? 最
我在运行单元测试时遇到错误。如果我调试单元测试 vstest.executionengine.x86.exe 运行,然后在测试通过时关闭。 如果我只是运行测试(即使测试就像创建一个新列表一样简单,没有
我们遇到的问题是我们的一个 C++ 单元测试导致异常 0xC0000005(来自 dmp 文件 -> 线程试图读取或写入它没有适当访问权限的虚拟地址)正在执行方法签名(甚至不执行方法的主体)。 这之后
添加运行多个 VS 版本的新单元测试后,我收到此错误: vstest.executionengine.x86.exe 已停止工作 在弹出窗口中。 最佳答案 我必须检查递归调用以解析(外键映射中的ToS
我在 OSX 上运行,使用 Clang 编译一些使用 OSX Cocoa 类的 Obj-C 代码,我试图用 LLVM JIT 编译器运行结果。我使用的是 LLVM/Clang 的最新前沿版本。 编译或
当我在 TFS 服务器上运行测试时,出现以下错误: The active Test Run was aborted because the execution process exited unexp
我正在开发 Windows 8.1 应用商店应用程序,并且我创建了单元测试。上周一切顺利,但几天后我无法构建我的单元测试项目。 每个单元测试项目都有以下两个错误: list 引用文件“vstest.e
我正在尝试加载一些数据,按特定字段过滤并将输出存储到 HDFS。我的代码如下所示: data = LOAD '$inputPath' using AvroStorage(); data = FILTE
我是一名优秀的程序员,十分优秀!