データベースからデータをフェッチするために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日から頭を悩ませています。