2017-06-05 4 views
0

私のプロジェクトは、JBoss上の接続プールから接続を取得して、hibernateを使用してデータベースに接続します。私はいくつかの読み込み/書き込みをテーブルからパブリッシュ/キューからの消費に置き換えたいと思っています。 JMSとHibernateのセッション

AQjmsFactory.getQueueConnectionFactory

createQueueConnection続く、 が、私は createProducercreateConsumerを呼び出すことができた上で(JMS) QueueSessionを取得するために createQueueSessionを使用して:私は、しかし、私が使用してDBに接続しています、OracleAQを使用して実施例を構築しました。

だから私はjms.QueueSessionを使って欲しいものをする方法を知っています。しかし、休止状態を使用して、私はhibernate.sessionを取得します。これらのメソッドはありません。

私はキューでアクションを実行するたびに新しい接続を開くことは望ましくありません。これは私が実際に行っていることです。 hibernate.sessionからキュー操作を実行する方法はありますか? SQLクエリでのみ?

答えて

2

あなたは、JMS(メッセージキュー)セッションとHibernate(データベース)セッションを混同していると思います。 HibernateフレームワークはJMSと重複しないため、両方を行うために使用することはできません。

あなたは、これが機能するためには2つの異なるセッションをする必要があります:

  1. A HibernateのSession(org.hibernate.Session)DB作業
  2. A JMSセッション(javax.jms.Session)のためのJMS /キュー仕事への

ユースケースによっては、XAトランザクションマネージャが両方のセッションで適切な2フェーズコミットを行い、トランザクションの整合性を維持することもできます。

0

また、私は、JMS接続を使ってデータベースデータを操作する方法について、「穏やかな」方法を探していました。そこにはなにも。 Deanは正しいです。同じデータに対して2つの異なる接続を使用し、それらの間でXAトランザクションを分散させる必要があります。

このソリューションではこれまでに見たことのないさまざまな問題の世界が広がります。実生活では、分散トランザクションは本当に重要ではありません。驚くべきことに、いくつかの状況では、Oracleは2つの接続が同じデータベースを指していることを検出し、XAを使用している場合でも2フェーズ・コミットをバイパスできます。

関連する問題