2012-04-15 13 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トランザクションを開始し、そこですべて処理します。あなたがしたいことのためのネストされたトランザクションの必要はありません。 TDBのトランザクション・サポートの詳細については

、ここでは公式ドキュメントをご覧ください。

関連する問題