gpt4 book ai didi

java - Jena TDB 在命名模型访问时挂起/卡住

转载 作者:行者123 更新时间:2023-11-30 11:37:32 24 4
gpt4 key购买 nike

我对 Apache Jena TDB 有疑问。基本上我创建了一个新的数据集,将数据从 RDF/XML 文件加载到名为“http://example.com/model/filename”的命名模型中,其中文件名是 XML/RDF 文件的名称。加载数据后,命名模型中的所有语句都被插入到默认模型中。出于备份原因,命名模型保留在数据集中。

当我现在尝试查询数据集中的命名模型时,TDB 卡住并且应用程序似乎在无限循环中运行,因此它没有终止也没有抛出异常。

是什么导致了卡住,我该如何预防?

示例代码:

Dataset ds = TDBFactory.createDataset("tdb");
Model mod = ds.getDefaultModel();

File f = new File("example.rdf");
FileInputStream fis = new FileInputStream(f);

ds.begin(ReadWrite.WRITE);

// Get a new named model to load the data into
Model nm = ds.getNamedModel("http://example.com/model/example.rdf");
nm.read(fis, null);

// Do some queries on the Model using the utility methods of Model, no SPARQL used

// Add all statements from the named model to the default model
mod.add(nm);

ds.commit();
ds.end();

// So far everything works as expected, but the following line causes the freeze
Iterator<String> it = ds.listNames();

任何访问现有命名模型的方法调用都会导致相同的卡住 react ,因此这对于 getNamedModel("http://example.com/model/example.rdf"); 是相同的例如。通过调用 getNamedModel("http://example.com/model/example123.rdf"); 添加新的命名模型工作正常,所以只有对现有模型的访问被破坏。

使用环境:Linux 64bit, Oracle Java 1.7.0_09, Jena 2.7.4 (incl. TDB 0.9.4)

在此先感谢您的帮助!

编辑:修复了代码片段中的错误

Edit2:解决方案(我对 AndyS 回答的最后评论)

好的,我完成了整个程序并添加了所有缺失的交易。不是它按预期工作。我怀疑 Jena 在我的程序关闭序列期间抛出异常,但该异常未正确报告,并且“卡住”是由其他线程未正确终止引起的。感谢您指出错误的交易使用。

最佳答案

你能把它变成一个测试用例并将它发送到 jena 用户邮件列表吗?

您应该在交易中获得默认模型 - 您在外部获得它。

此外,如果您以事务方式使用数据集,则不能像在 ds.listNames 中那样以非事务方式使用它。它不应该卡住 - 你应该得到某种警告。

关于java - Jena TDB 在命名模型访问时挂起/卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13991766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com