1

データベースからデータをフェッチするためにHibernateを使用しています。20以上のノードを持つOracleRACデータベースがあります。

ここで問題となるのは、データベースの1つのノードに障害が発生した場合、アプリケーションがエラーをスローせずに実行時に他のノードに切り替える必要があり、そのノードがダウンしている場合は、賢明なように3番目のノードに切り替える必要があります。

接続を確立するレガシーJDBCスタイルを使用している場合、ノードへの接続が失敗すると接続オブジェクトがnullになるため、非常に簡単に実行できます。

これは私がセッションファクトリを作成している方法です、

private static final SessionFactory sessionFactory = buildSessionFactory();

  private static SessionFactory buildSessionFactory() 
  {
       try 
       {
       return new Configuration().configure("database.cfg.xml").buildSessionFactory();
       }
  }

これがセッションの取得方法です。

セッション=HibernateUtil.getSessionFactory()。openSession();

さて、どうすればノードがダウンしたことを識別できるので、代替ノードに接続してみることができます。

すべてのノードIDが異なるため、以下のタイプの構成を使用できません

jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)       (address=(protocol=tcp)(host=host1)(port=1521))(address=(protocol=tcp)(host=host2)(port=1521)))(connect_data=(service_name=xxxxsid)(failover_mode=(type=select)(method=basic)))

どうすればこれを達成できるかを理解するために、2日から頭を悩ませています。

4

1 に答える 1

0

セッションを開くときに、セッション状態の読み取り(読み取り専用など)などのアサーション(Javaアサーション)を作成することをお勧めします。これにより、接続がアクティブかどうかを確認できます。アサーションに基づいて、取得を試すことができます。別のノードの別のセッション。

このリンクは少し役立つかもしれません(アサーションを作成します):

https://forum.hibernate.org/viewtopic.php?f=1&t=1001337

それが役に立てば幸い ;-)

于 2012-07-22T18:35:04.373 に答える