2012-04-15 6 views
4

Я хотел бы переписать свой текущий код для использования транзакций. Однако, согласно документации Jena (http://incubator.apache.org/jena/documentation/tdb/tdb_transactions.html) вложенные транзакции не поддерживаются.Jena TDB: Вложенные транзакции

Предположим, что я хотел бы запросить некоторые данные из базы данных и добавить метку rdfs: каждый найденный ресурс. Должен ли я строго соблюдать код чтения и записи, как в следующем коде, или есть более эффективный способ реализации этого примера?

Dataset dataset = ...; 
dataset.begin(ReadWrite.READ); 

ArrayList<Resource> res = new ArrayList<Resource>(); 

try{ 
    QueryExecution qe = QueryExecutionFactory.create("SELECT ?x WHERE { ?x a <Whatever> . }", dataset); 
    ResultSet rs = qe.execSelect(); 

    try 
    { 
     while(rs.hasNext()) 
     { 
      QuerySolution s = rs.nextSolution(); 
      RDFNode node = s.get("x"); 
      if(node.isResource) res.add(node.asResource()); 
     } 

    }finally{ qe.close(); } 

}finally{ dataset.end(); } 

dataset.begin(ReadWrite.WRITE); 
try{ 
    Property label = model.getProperty("http://www.w3.org/2000/01/rdf-schema#label"); 
    for(Resource r : res) 
    { 
     r.addProperty(label, "text"); 
    } 
    dataset.commit(); 

}finally{ dataset.end(); } 

Я отправил этот вопрос на semanticweb.com, но не получили никаких ответов, так что я надеюсь, что кто-то здесь может помочь мне.

ответ

1

Верно, что вложенные транзакции не поддерживаются в TDB, однако вы можете делать столько чтений, сколько хотите в транзакции WRITE. Итак, запустите транзакцию ReadWrite.WRITE и сделайте все, что вы там обрабатываете. Нет необходимости вложенных транзакций за то, что вы хотите сделать.

Более подробную информацию о поддержке сделки СТР, пожалуйста, смотрите на официальной документации здесь:

Смежные вопросы