1
아파치 예나 데이터베이스에 레코드를 삽입 나는 다음과 같은 코드가 (TBD)을 상상해Apache Jena에서 쓰기 오류를 처리하는 방법은 무엇입니까?
이model.createResource
및
ds.commit
의 실행 중에 오류를 처리 할 수있는 권리 방법은 무엇입니까
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()
}
- 아래의 코드처럼 또는 다르게?
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, 파일을 찾을 수 없음)의 표준 집합을 catch하고 성공 및 실패 사례 모두에서 스트림을 닫아야합니다. JDBC를 사용하여 관계형 데이터베이스에 레코드를 삽입하는 경우, 실패한 경우 트랜잭션을 롤백하고 명령문을 닫아야합니다. 이러한 것들은 일반적인 것이며 응용 프로그램에 의존하지 않습니다. 나는 Apache Jena에 대한 최고의 모범 사례를 찾고있다. –
'ds.abort()'를 호출하십시오. (사실,'ds.end()'는 이것을 할 것입니다 - 커밋되지 않은 트랜잭션을 중단합니다). 그래서 데이터베이스가 지워집니다. 데이터베이스 오류가 심각하여 (예 : 디스크 공간이 부족하고 JVM OOME) 조회해야하지만 데이터는 손상되지 않고 업데이트되지 않습니다. 나머지는 응용 프로그램 문제입니다. – AndyS
@AndyS 내 코드가 지속성 관련 오류를 올바르게 처리한다는 것을 의미합니까? –