2016-06-09 8 views
1

Neo4j 확장 프로그램을 만들었습니다. 내 자신의 TransactionEventHandler이 포함되어 있습니다. 경우에 따라 beforeCommit() 메서드를 실행하면 UniquePropertyConstraintViolationKernelException이됩니다. 괜찮아. 하지만 서버 쪽에서 나는 ResultProcessingException을받습니다. 이 예외는 너무 일반화 된 것처럼 보입니다. 제 생각에는 제약 조건 위반의 경우뿐만 아니라 많은 이유로 던져 질 수 있습니다. 그래서, 내 질문에 어떻게 서버 측 제약 조건 위반을 처리해야합니까? 나는 SDN4를 사용한다.SDN4에서 고유 제약 조건 위반을 올바르게 처리하는 방법은 무엇입니까?

편집 1 : 모든 neo4j - ogm- * 버전 2.0.3

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-core</artifactId> 
      <version>2.0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-http-driver</artifactId> 
      <version>2.0.3</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

enter image description here

답변

2

당신이 SDN 4.0 경우에 업데이트됩니다,이 알려진 문제가있는 것을 throw 된 예외가 너무 광범위합니다.

SDN 4.1.1에서는 CypherException이 발생하여 Neo4j 오류 코드를 래핑하고 Cypher 실행이 실패 할 경우 3 개의 드라이버에서 동일하게 발생합니다. SDN 4.1.1을 사용하고 있는데이 예외가 표시되지 않으면 코드의 일부 영역을 놓친 것일 수 있습니다. 즉,이를 재현하는 방법에 대한 세부 사항은 raise a github issue입니다.

업데이트 : SDN 4.1.1은 CypherException을 생성하지만 원인을 래핑하지 않는 OGM 2.0.1에 종속된다는 것을 깨달았습니다. neo4j-ogm-core 및 2.0.3 CypherException.getCode()의 모든 드라이버 버전을 Neo.ClientError.Schema.ConstraintViolation으로 변경해야합니다. 임베디드 드라이버를 사용하면 기본 예외가 래핑됩니다. 그러나 HTTP 드라이버를 통해이 정보는 수신되지 않으므로 CypherException에서만 다음을 수신하게됩니다.

code: Neo.ClientError.Schema.ConstraintViolation 
description: Node 7 already exists with label User and property "name"=[luanne] 
+0

네, 맞습니다. 4.1.1로 SDN을 업데이트 한 후 CypherException을 수신합니다. 설명에 "TransactionFailureException : Cypher Transaction.CouldNotCommit 실행 중 오류"와 같은 메시지가 있습니다. 하지만 문제의 유형을 어떻게 이해할 수 있는지는 여전히 불분명합니다. TransactionEventHandler.beforeCommit() 내부에서 명확한 설명과 함께 'ConstraintViolationException'을 수신합니다. 하지만 서버 쪽에서는 아무 것도 볼 수 없습니다. –

+0

편집 내 대답 – Luanne

+0

고마워! 그러나 그러한 구성은 다른 문제를 야기합니다. 당신이 말한 것처럼'neo4j-ogm-core'와'neo4j-ogm-http-driver'의 버전을 대체했습니다. 그리고'neo4jOperations.query ("CREATE CONSTRAINT ON (n : Event) ASSERT n.uniqueId가 유일한 것", Collections.emptyMap())을 호출하려고하면 다음과 같은 설명이있는'NoSuchMethodError'가 수신됩니다 : "HttpClientBuilder.setSSLContext (SSLContext) ". 전에 일하고 있었어. –