DatasetGraph.clear()上的Jena 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();

我想我在上一个Jena(2.13)中发现了一个bug

如果我对包含多个图形元组的DatasetGraphFactory.createMem()实例化的DatasetGraph调用clear(),就会得到ConcurrentModificationException

您可以使用以下代码再现错误:

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,并应用了一个修复程序。感谢您的支持!乐于助人;)