Stellen Sie sich vor mir den folgenden Code habe einen Datensatz in Apache Jena Datenbank (TBD) zum Einfügen:Wie werden Schreibfehler in Apache Jena behandelt?
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()
}
Was ist der richtige Weg, um Fehler bei der Ausführung von model.createResource
und ds.commit
zu handhaben - unten wie im Codefragment oder anders?
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()
}
}
Die Frage ist ** nicht ** anwendungsspezifisch. Es gibt allgemeine Regeln für die Fehlerbehandlung. Wenn Sie eine Datei lesen oder in eine Datei schreiben, müssen Sie einen Standardsatz von Ausnahmen (E/A, Datei nicht gefunden) abfangen und die Streams sowohl in Erfolgs- als auch in Fehlerfällen schließen. Wenn Sie einen Datensatz mit JDBC in eine relationale Datenbank einfügen, müssen Sie die Transaktion im Falle eines Fehlers zurücksetzen und die Anweisung schließen. Diese Dinge sind generisch und hängen nicht von der Anwendung ab. Ich suche eine etablierte Best Practice für Apache Jena. –
Rufen Sie 'ds.abort()' auf (das 'ds.end()' erledigt das für Sie - es bricht jede nicht übergebene Transaktion ab). Die Datenbank klärt auf. Ein Datenbankfehler ist schwerwiegend (z. B. nicht genügend Festplattenspeicher, JVM OOME) und muss betrachtet werden, aber die Daten sind intakt, nur nicht aktualisiert. Der Rest ist ein Anwendungsproblem. – AndyS
@AndyS Bedeutet dies, dass mein Code persistenzbezogene Fehler korrekt behandelt? –