0

現在、Hibernateとtomcat(JBossなし)のみを使用しており、実際に使用しているトランザクションの安全性レベルが明確でないHibernateトランザクションがあります。特に、値を読み取って取得してから更新するトランザクションの場合はそうです)。したがって、私は汚れた読み取りを取得している可能性がありますか?

したがって、ダーティでない読み取りを必要とするトランザクションの調査を開始し、(1)Hibernateがそれらのトランザクションのトランザクションの安全性レベルを適切に制御し、(2)ダーティなトランザクションを引き続き保持できることを確認します。読み取りは問題ありません。

トランザクションの安全性レベルを制御するために、JBossとともにHibernateをインストールする必要がありますか?もしそうなら、私は現在基本的なHibernate APIを使用しているので、J2EEAPIを使用するようにアプリケーションを大幅に変更せずにこれを行う最も簡単な方法は何ですか。または、JBossを使用せずにHibernateでJTAコントロールを取得できますか?

アンディ

4

2 に答える 2

0

em.getTransaction()。begin()およびcommit()を使用してトランザクションを明示的にマークしていますか?その場合、Hibernateはトランザクション管理をJDBCドライバーに委任し、他のプロパティ(ドライバーレベルと分離レベルなどのHibernateレベルの両方)で構成できるようにします。

その後、アプリケーションサーバーを使用することにした場合は、プロパティhibernate.transaction.factory_classをorg.hibernate.transaction.JTATransactionFactoryに設定するだけで、Hibernateは指示に基づいてトランザクションに参加/作成します(em.getTransaction()。begin( ) / 専念())。

JTAは、全体的な結果に応じてイベントを調整し、コミット/ロールバックを注文するため、2つ以上の「トランザクション対応」コンポーネントがある場合に特に役立ちます。たとえば、データベースに何かを永続化して電子メールを送信するEJBトランザクションが1つある場合、両方のアクションをトランザクション内に含めることができ、いずれかが失敗した場合はロールバックできます。ただし、データベーストランザクションのみに関心がある場合は、JTAは実際には必要ありません。

最後の質問に答えるには、JTAは必要だが、EEアプリケーションサーバーを使用したくない場合は、JOTMなどのスタンドアロンのJTAプロバイダーを探すことができます。ただし、注意してください。さまざまなサービスに複数の「スタンドアロン」プロバイダーを追加すると、「自家製のEEサーバー」になってしまう可能性があります。これは良いことではありません;-)

于 2011-01-12T12:30:58.383 に答える
0

これはトランザクション分離レベルと呼ばれ、以下は休止状態でそれらを構成する方法です。

hibernate.connection.isolation-JDBCトランザクション分離レベルを設定します。java.sql.Connectionで意味のある値を確認してください。ただし、ほとんどのデータベースはすべての分離レベルをサポートしているわけではないことに注意してください。例えば。1、2、4、8

于 2011-01-12T04:38:36.160 に答える