0

私の質問は、これに非常に関連しています: Multiple dynamic data sources for a servlet context。しかし、私はまだ適切な解決策を見つけていないので、もう一度質問したいと思います.

JDBC 経由で MS SQL Server と通信する小さな JSF アプリケーションがあります。Tomcat は Web コンテナーとして使用されます。アプリケーションは、単一のデータベースからデータを取得して保存します。ログイン画面が提供されます。資格情報がデータベースに保存されている資格情報と一致する場合、アクセスが許可され、アプリケーションをいじることができます。

ここで、さらにデータベースを追加し、ユーザー名とパスワードだけでなくデータベース名も要求するログイン画面を提供したいと考えています。テスト用と開発用にデータベースをいくつか用意したいので、さまざまなデータベースが使用されています。バックアップ計画もすべてのデータベースで同じではありません。

現在、コード内のデータベースを検索するために JNDI リソースを使用しています。ただし、これにより、context.xml と web.xml を編集し、Tomcat を再起動する必要があります。私はそれをしたくありません。再起動すると、「再起動していますが、すべての接続が失われてもよろしいですか?」と周囲に伝えなければなりません。</p>

それを行うためのより動的な方法はありますか?

4

4 に答える 4

0

答えはわかりませんがOSQL -L 、JNIから電話をかけると、その地域で利用可能なSQLデータベースインスタンスのリストを取得できます。次に、接続して、その中のデータベースのリストを取得できます。

それで:

  1. ユーザーがユーザー名とパスワードを入力します
  2. appはOSQL-Lを実行してインスタンスのリストを取得し、選択リストを提供します
  3. ユーザーがインスタンスを選択すると、jdbcはステップ1でクレデンシャルを使用して、インスタンスからデータベースのリストを取得します
  4. jdbcは、選択したデータベースを使用して接続します。
于 2009-07-02T18:54:37.573 に答える
0

目的のために、実際には3つの別々のアプリケーションサーバーインスタンスが必要です(3つの別々のマシン上、または同じマシン上で異なるポート、または異なるホストヘッダーなどをリッスンします)。開発サーバーインスタンスは常に開発データベースを検索し、ステージングサーバーはステージングデータベースなどを検索し、JNDIはこれを反映するように設定する必要があります。それがJNDIの目的です。

とはいえ、単一のアプリケーションサーバーだけで設定する必要がある場合は、これを行うカスタム認証レルムの作成を検討する必要があります。自分で使用するデータソースを決定する実際の作業を行うか、HibernateShardsのようなものを調べることができます。

于 2009-07-02T19:05:07.880 に答える
0

selectステートメントを使用してSQLサーバーでデータベースを取得し、最終的にアプリケーションに関係のないデータベースの一部を破棄できます。

ResultSet rs = stmt.executeQuery("show databases");
于 2009-07-02T19:12:02.450 に答える
0

データソースの配列を作成し、この配列で使用するインデックスをユーザーが選択できるようにします。

于 2009-07-02T09:56:03.207 に答える