51.16.4. optimistic locking


您可以在集群环境中打开 光纤,并使用基于此 JDBC 的聚合存储库,其中多个 Camel 应用程序为聚合存储库共享同一数据库。如果存在一个竞争条件,则 JDBC 驱动程序将抛出一个特定于供应商的异常,则 JdbcAggregationRepository 可以响应。要知道从 JDBC 驱动程序造成异常,作为光明锁定错误,我们需要一个映射程序来执行此操作。因此,有一个 org.apache.camel.processor.aggregate.jdbc.JdbcOptimisticLockingExceptionMapper (如果需要),您可以实施自定义逻辑。有一个默认的实现 org.apache.camel.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>
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.