2017-02-03 4 views
1

아파치 예나 데이터베이스에 레코드를 삽입 나는 다음과 같은 코드가 (TBD)을 상상해Apache Jena에서 쓰기 오류를 처리하는 방법은 무엇입니까?

model.createResourceds.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() 
    } 
} 

답변

0

어떻게 가능한 우리는 에 올바른 답은 실패로 응용 프로그램이 무엇인지 알고 있었다?!

심각하게 : 귀하의 프로젝트, 신청서, 귀하의 요구 사항입니다. 어떤 종류의 그런 종류의 문제 의미 당신은 명확해야합니다.

그럼에도 불구하고 "일반"입니다 :

  1. 하는 시스템의 사용자에게 의견 보내기 - 단지 실패 분명히 매우 핵심 작업을. 이 작업을 계속할 수 없습니다. 롤백이 약간 필요할 수도 있습니다.
  2. 이러한 종류의 문제에 대한 지침을 제공하는 오류 상황 (예 : circuit breaker) 주위의 패턴이 있습니다. 즉, 데이터베이스가 데이터 쓰기를 거부하면 중요이 손상되었을 수 있습니다. 당신은 아마 그것을 처리해야합니다; 이 경우 실패한 하나의 작업 범위를 벗어납니다.
+0

질문은 ** 응용 프로그램과 관련이 없습니다. 오류 처리에 대한 일반적인 규칙이 있습니다. 파일을 읽거나 쓰는 경우 예외 (I/O, 파일을 찾을 수 없음)의 표준 집합을 catch하고 성공 및 실패 사례 모두에서 스트림을 닫아야합니다. JDBC를 사용하여 관계형 데이터베이스에 레코드를 삽입하는 경우, 실패한 경우 트랜잭션을 롤백하고 명령문을 닫아야합니다. 이러한 것들은 일반적인 것이며 응용 프로그램에 의존하지 않습니다. 나는 Apache Jena에 대한 최고의 모범 사례를 찾고있다. –

+1

'ds.abort()'를 호출하십시오. (사실,'ds.end()'는 이것을 할 것입니다 - 커밋되지 않은 트랜잭션을 중단합니다). 그래서 데이터베이스가 지워집니다. 데이터베이스 오류가 심각하여 (예 : 디스크 공간이 부족하고 JVM OOME) 조회해야하지만 데이터는 손상되지 않고 업데이트되지 않습니다. 나머지는 응용 프로그램 문제입니다. – AndyS

+0

@AndyS 내 코드가 지속성 관련 오류를 올바르게 처리한다는 것을 의미합니까? –