トランザクションを利用するために私の現在のコードを書き直したいと思います。しかし、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にこの質問を掲載しましたが、どんな答えを受け取っていないので、私はここで誰かが私を助けることができると思います。