数据库锁定JPA2 Hibernate Spring跨多个VM

时间:2012-02-29 16:19:11

标签: spring hibernate jpa jvm distributed

我有一个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(是的,我知道它的旧版本。)

1 个答案:

答案 0 :(得分:0)

究竟是什么问题?你有死锁吗?堆栈?

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

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

您是否正在进行批量更新?