323.11.6. optimistic locking
Camel 2.12 에서 여러 Camel 애플리케이션이 집계 리포지토리에 대해 동일한 데이터베이스를 공유 하는
클러스터 환경에서 이 JDBC 기반 집계 리포지토리를 켜고 이 JDBC 기반 집계 리포지토리를 사용할 수 있습니다. JDBC 드라이버가 경쟁 조건이 있는 경우 JDBC 드라이버가 JdbcAggregationRepository
에서 응답할 수 있는 공급업체 특정 예외를 throw합니다. JDBC 드라이버의 예외가 발생한 것을 알기 위해서는 이를 위해서는 mapper가 필요한 경우, JDBC 드라이버의 예외를 optimistick locking 오류로 간주해야 합니다. 따라서 org.apache.camel.processor.aggregate.jdbc.JdbcOptimisticLockingExceptionMapper
가 있으면 필요에 따라 사용자 정의 논리를 구현할 수 있습니다. 다음과 같이 작동하는 기본 구현 org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper
가 있습니다.
다음 검사가 수행됩니다.
-
원인된 예외가
SQLException
으로 인해 23으로 시작되는 경우 SQLState가 확인됩니다. -
원인된 예외가
DataIntegrityViolationException
일 경우 - 발생한 예외 클래스 이름의 이름에 "ConstraintViolation"이 있는 경우.
- 클래스 이름이 구성된 경우 FQN 클래스 이름에 대한 선택적 검사와 일치합니다.
또한 FQN 클래스 이름을 추가할 수 있으며 원인이 발생한 예외 (또는 중첩된 예외) 중 하나가 FQN 클래스 이름 중 하나와 같은 경우 최적화 오류입니다.
다음은 JDBC 공급업체에서 2개의 추가 FQN 클래스 이름을 정의하는 예입니다.
<bean id="repo" class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository"> <property name="transactionManager" ref="transactionManager"/> <property name="repositoryName" value="aggregation"/> <property name="dataSource" ref="dataSource"/> <property name"jdbcOptimisticLockingExceptionMapper" ref="myExceptionMapper"/> </bean> <!-- use the default mapper with extra FQN class names from our JDBC driver --> <bean id="myExceptionMapper" class="org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper"> <property name="classNames"> <util:set> <value>com.foo.sql.MyViolationExceptoion</value> <value>com.foo.sql.MyOtherViolationExceptoion</value> </util:set> </property> </bean>