Блокировка базы данных JPA2 Hibernate Spring для нескольких виртуальных машин - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть веб-приложение, которое развернуто в среде с балансировкой нагрузки на нескольких физических экземплярах. Все экземпляры общаются с одной и той же базой данных.

У меня есть транзакция, которая может быть запущена из графического интерфейса. Я хочу убедиться, что если эта операция запрашивается одновременно, либо через виртуальные машины, либо на одной и той же виртуальной машине. Успешна только одна транзакция или сериализуются транзакции.

Я использую 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 (да, я знаю его старый).

1 Ответ

0 голосов
/ 01 марта 2012

В чем конкретно ваша проблема?У вас тупики?Стеки?

Потому что это вроде "нормально" - иметь такие проблемы с выбранным уровнем изоляции и некоторым параллелизмом.

Вам действительно нужен этот уровень изоляции?

Вы делаетемассовые обновления?

...