【问题标题】:Database Locking JPA2 Hibernate Spring accross mutiple VMs跨多个 VM 的数据库锁定 JPA2 Hibernate Spring
【发布时间】:2012-03-19 03:40:43
【问题描述】:

我有一个 Web 应用程序部署在多个物理实例上的负载平衡环境中。所有实例都与同一个数据库通信。

我有一个可以从 gui 触发的事务,我想确保是否同时请求此操作,无论是跨 VM 还是在同一 VM 上。只有一个事务成功或事务被序列化。

我正在使用 Hibernate 3.6、Spring 3.1 和 JPA2(包含 Hibernate 的 jar)。

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = LockTimeoutException.class)
public boolean MY_OP(Boolean Flag) throws RuntimeException

我正在尝试使用herehere 描述的解决方案。

这里列出了我的配置:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="DB_UNIT_NAME" />
    <property name="dataSource" ref="dataSource" />
  <property name="jpaDialect">
     <bean class="com.server.persistence.HibernateExtendedJpaDialect"/>
  </property>
  <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
        <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="${dbConfig.dialect}" />
        </bean>
    </property>
</bean>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

这会在负载平衡环境中实现跨多个 JVM 的隔离吗?我相信人们以前一定已经解决过这个问题,所以任何想法都会有所帮助。

编辑

这在单个 JVM/AS 上实现了隔离。我正在使用 JBoss AS 4.3.2(是的,我知道它很旧)。

【问题讨论】:

    标签: spring hibernate jpa jvm distributed


    【解决方案1】:

    您的问题到底是什么?你有死锁吗?堆栈?

    因为你选择的隔离级别和一些并发遇到这样的麻烦是一种“正常”。

    你真的需要那种隔离级别吗?

    您是否在进行批量更新?

    【讨论】:

    • 我想确保没有两个 MY-TRANSACTION 实例,无论它们是在同一个 JVM/AS 上启动还是同时在多个实例上启动,只有一个应该运行,其他应该失败。我对使用隔离级别还很陌生,所以不确定这是否是正确的级别。但我认为发布的问题中的解决方案似乎可以实现这一点,我想知道这是解决这个问题的正确方法。
    • 是的,应该,但请记住,在处理并发时您可能会遇到许多事务异常。使用该隔离级别进行负载测试并检查一切正常
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2012-01-31
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2010-12-26
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多