我有一个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
我的配置列于此处:
<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(是的,我知道它的旧版本。)
答案 0 :(得分:0)
究竟是什么问题?你有死锁吗?堆栈?
因为你选择的隔离级别和一些并发性有这样的麻烦是“正常的”。
你真的需要那种隔离级别吗?
您是否正在进行批量更新?