jpaでHibernateを使用していて、persistence.xmlで構成されています。WebアプリケーションからHibernate接続プロパティを取得することは可能ですか?
ありがとう。
jpaでHibernateを使用していて、persistence.xmlで構成されています。WebアプリケーションからHibernate接続プロパティを取得することは可能ですか?
ありがとう。
おそらく、リフレクションを使用せず、将来コードを壊さないようにHibernateに依存する必要があります。SessionFactoryからプロパティを取得する必要がありますが、パブリックではないため、リフレクションを介してフィールドを検索し、field.setAccessibleを使用してアクセスする必要があります。何かのようなもの:
Field f = SessionFactoryImpl.class.getDeclaredField("properties");
f.setAccessible(true);
Properties p = (Properties)f.get(sessionFactory);
次に、Environmentの定数を使用して、関連する設定を引き出します。実際のデータベース接続設定を探していて、アプリがjndiを使用している場合は、jndi名を使用してデータソースを取得し、それを調べて接続情報を取得することができます。
この種の場合、私は通常、デバッガーを使用し、ブレークポイントを設定してから、情報がどこにあるかがわかるまで変数を調べます。次に、公開されているかどうかを確認し、公開されていない場合は、リフレクションを使用して公開します。ただし、保証はありません。
JDBCを使用している場合は、いつでも接続とそのメタデータを取得できます。Springトランザクションマネージャーを使用している場合は、次のように取得できます。
transactionManager.getDataSource().getConnection().getMetaData()
これは、ユーザー名を含むデータベースとその接続に関する大量の情報を表示します。データベース接続プールを処理する可能性のあるいくつかの情報がpersistence.xmlにあります。これは通常、Hibernateのどこにも保存されませんが、実際の接続プールコードに保存されます。
persistence.xmlファイルからどのような情報を取得する必要がありますか?