2017-02-03 7 views
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.createResourceds.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() 
    } 
} 

答えて

0

どのように我々は可能な故障にアプリケーションで正しい答えが何であるかを知っている可能性が!

真剣に:それはあなたのプロジェクト、あなたのアプリケーション、あなたの要件です。あなたはそのような種類の問題の意味を明確にする必要があります。

それにもかかわらず、「一般的な」とは:

  1. は、システムのユーザにフィードバックを与える - 明らかにいくつかの非常にコアの動作だけでに失敗しました。この操作は続行できません。ロールバックが必要な場合もあります。
  2. この種の問題の指針となる障害状況(circuit breakerなど)のパターンがあります。つまり、データベースがデータの書き込みを拒否した場合、重要なが壊れている可能性があります。あなたはおそらくそれに対処しなければなりません。このケースでは失敗した1つの操作の範囲を超えています。
+0

質問は**アプリケーション固有ではありません。エラー処理の一般的な規則があります。ファイルを読み書きする場合、例外の標準セット(I/O、ファイルが見つかりません)をキャッチし、成功と失敗の両方の場合にストリームを閉じる必要があります。 JDBCを使用してリレーショナルデータベースにレコードを挿入する場合は、障害が発生した場合にトランザクションをロールバックし、ステートメントを閉じる必要があります。これらは一般的なものであり、アプリケーションに依存しません。 Apache Jenaの確立されたベストプラクティスを探しています。 –

+1

'ds.abort()'を呼び出します(実際には、 'ds.end()'がこれを行います。コミットされていないトランザクションは中止されます)。データベースがクリアされます。データベースのエラーが深刻で(ディスク領域が不足している、JVM OOMEなど)、見る必要がありますが、データはそのままで更新されません。残りはアプリケーションの問題です。 – AndyS

+0

@AndyS私のコードが永続性関連のエラーを正しく処理していますか? –

関連する問題