325.15.3. 집계기 구성

대상 환경에 따라 집계기에 일부 구성이 필요할 수 있습니다. 이미 알고 있듯이 각 집계기에 고유한 리포지토리(데이터베이스에서 생성된 테이블 쌍)와 데이터 소스가 있어야 합니다. 기본 lobHandler가 데이터베이스 시스템에 조정되지 않으면 lobHandler 속성을 사용하여 삽입할 수 있습니다.

Oracle에 대한 선언은 다음과 같습니다.

<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
  <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>
<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"/>
  <!-- Only with Oracle, else use default -->
  <property name="lobHandler" ref="lobHandler"/>
</bean>

  ==== 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 extraFQN 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>