У меня есть веб-приложение, которое развернуто в среде с балансировкой нагрузки на нескольких физических экземплярах. Все экземпляры общаются с одной и той же базой данных.
У меня есть транзакция, которая может быть запущена из графического интерфейса. Я хочу убедиться, что если эта операция запрашивается одновременно, либо через виртуальные машины, либо на одной и той же виртуальной машине. Успешна только одна транзакция или сериализуются транзакции.
Я использую Hibernate 3.6, Spring 3.1 и JPA2 (баночка вкл. С Hibernate).
@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 в средах с балансировкой нагрузки? Я уверен, что люди должны были решить эту проблему раньше, поэтому любые идеи будут полезны.
EDIT
Это обеспечивает изоляцию на одной JVM / AS. Я использую JBoss AS 4.3.2 (да, я знаю его старый).