1
私は、Apacheイエナデータベース(TBD)にレコードを挿入するための次のコードを持っている想像:Apache Jenaで書込みエラーを処理する方法は?
private fun createPersonLogic(ds: Dataset, email: String, nick: String) {
ds.begin(ReadWrite.WRITE)
val model = ds.defaultModel
val uuid = UUID.randomUUID()
val uri = "http://mycompany.com/data/p-${uuid}"
val person = model.createResource(uri)
person.addProperty(VCARD.EMAIL, email)
person.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.NICKNAME, nick))
ds.commit()
ds.end()
}
model.createResource
とds.commit
の実行中にエラーを処理するための正しい方法は何ですか - 以下のコードの断片のようにか違う?
private fun createPersonLogic(ds: Dataset, email: String, nick: String) {
try {
ds.begin(ReadWrite.WRITE)
val model = ds.defaultModel
val uuid = UUID.randomUUID()
val uri = "http://mycompany.com/data/p-${uuid}"
val person = model.createResource(uri)
person.addProperty(VCARD.EMAIL, email)
person.addProperty(VCARD.N,
model.createResource()
.addProperty(VCARD.NICKNAME, nick))
ds.commit()
}
catch (throwable:Throwable) {
// react to the error
}
finally {
ds.end()
}
}
質問は**アプリケーション固有ではありません。エラー処理の一般的な規則があります。ファイルを読み書きする場合、例外の標準セット(I/O、ファイルが見つかりません)をキャッチし、成功と失敗の両方の場合にストリームを閉じる必要があります。 JDBCを使用してリレーショナルデータベースにレコードを挿入する場合は、障害が発生した場合にトランザクションをロールバックし、ステートメントを閉じる必要があります。これらは一般的なものであり、アプリケーションに依存しません。 Apache Jenaの確立されたベストプラクティスを探しています。 –
'ds.abort()'を呼び出します(実際には、 'ds.end()'がこれを行います。コミットされていないトランザクションは中止されます)。データベースがクリアされます。データベースのエラーが深刻で(ディスク領域が不足している、JVM OOMEなど)、見る必要がありますが、データはそのままで更新されません。残りはアプリケーションの問題です。 – AndyS
@AndyS私のコードが永続性関連のエラーを正しく処理していますか? –