DatasetGraph.clear()上的Jena ConcurrentModificationException
我想我在上一个Jena(2.13)中发现了一个bug 如果我对包含多个图形元组的DatasetGraphFactory.createMem()实例化的DatasetGraph调用clear(),就会得到ConcurrentModificationException 您可以使用以下代码再现错误:DatasetGraph.clear()上的Jena ConcurrentModificationException,exception,jena,concurrentmodification,Exception,Jena,Concurrentmodification,我想我在上一个Jena(2.13)中发现了一个bug 如果我对包含多个图形元组的DatasetGraphFactory.createMem()实例化的DatasetGraph调用clear(),就会得到ConcurrentModificationException 您可以使用以下代码再现错误: public static void main(String[] args) { DatasetGraph dsg = DatasetGraphFactory.createMem();
public static void main(String[] args) {
DatasetGraph dsg = DatasetGraphFactory.createMem();
dsg.add(
new Quad(NodeFactory.createURI("http://graph1"),
NodeFactory.createURI("http://subj"),
RDF.type.asNode(),
NodeFactory.createURI("http://someType")));
dsg.add(
new Quad(NodeFactory.createURI("http://graph2"),
NodeFactory.createURI("http://subj"),
RDF.type.asNode(),
NodeFactory.createURI("http://someType")));
dsg.clear();
}
有没有办法避免这种情况
最好的,
Flavio最简单的修复方法是替换dsg。清除
dsg = DatasetGraphFactory.createMem() ;
让垃圾收集器来处理它。或者这个:
dsg.getDefaultGraph().clear() ;
List<Node> graphNames = Iter.toList(dsg.listGraphNodes()) ;
for ( Node gn : graphNames ) {
dsg.removeGraph(gn);
}
dsg.getDefaultGraph().clear();
List graphNames=Iter.toList(dsg.listGraphNodes());
用于(节点gn:图形名称){
dsg.removeGraph(gn);
}
使用这个最小、完整的示例,在Apache JENA tracker上记录为JENA-982,并应用了一个修复程序。感谢您的支持!乐于助人;)