2012-02-29 6 views
2

複数の物理インスタンスに負荷分散された環境に配備されたWebアプリケーションがあります。すべてのインスタンスが同じデータベースに対話します。データベースロックJPA2 Hibernate複数VM間でのスプリング

私はguiからトリガーできるトランザクションがあります。この操作が同時に要求された場合は、VM全体または同じVM上で確実に実行されます。 1つのトランザクションだけが成功するか、トランザクションがシリアル化されること。

私は、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の間で分離を実現しませんか?私は人々が前にこの問題を解決していなければならないと確信しているので、どんなアイデアも役に立つでしょう。

EDIT

これは、単一のJVM/ASに分離を達成します。私はJBoss AS 4.3.2を使用しています(はい、私は古いことを知っています)。

答えて

0

あなたの問題は何ですか?デッドロックがありますか?スタック?

選択した分離レベルとある程度の並行性でこの種の問題が発生するのは「正常」なので、

本当に分離レベルが必要ですか?

一括更新していますか?

+0

MY-TRANSACTIONのインスタンスが同じJVM/ASで起動されているか、複数のインスタンスが同時に起動されているかを問わず、そのうちの1つだけを実行する必要があります。私は分離レベルで作業するのはかなり新しいので、これが正しいレベルかどうかは分かりません。しかし、私は掲示された質問の解決策は、私が言うことができるからこれを達成すると思われる、私はこれがこの問題にアプローチする正しい方法だったと思っていた。 –

+0

はい、そうすべきですが、並行性を扱うときにはおそらく多くのトランザクション例外が発生することに注意してください。その分離レベルで負荷テストを行い、すべてが正常であることを確認する –

関連する問題