
Tomcat4 + Struts1.1にて、ログインした人の種別により接続するDataSourceの切り替えを行いたいのですが、このようなことは出来るのでしょうか?
--------------------------------------------
例:ユーザA、ユーザBで接続するDBを変更する。
--------------------------------------------
1.データベースに2つのDataSourceを用意する。
※以降DB1,DB2とする。
中のテーブル設定は全く同じとする。
2.ユーザAがログインした場合はDB1のhogeTableを、
ユーザBがログインした場合はDB2のhogeTableを
参照してデータを取得する。
--------------------------------------------
要は、1つのシステムでユーザ毎にデータベースが分かれている為、ログイン情報によってどのデータベースを参照するかを切り替えたいのです。
(こうすればテーブル名は同じの為、データアクセス部分は共用できると考えています。)
Struts-configには複数のDataSourceが設定できますが、こちらをどうやって切り替えれば良いのかが分からずに困っています。
(また切り替え以外での対応方法はあるのでしょうか?)
こちらの件で、どなたかご存知の方、もしくは詳細な説明が記載されたHPを知っている方がおられましたら、教えていただけないでしょうか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
struts-config.xml のデータソース記述部分に
<data-source key="aaa">
~省略
</data-source>
<data-source key="bbb">
~省略
</data-source>
などとキーを設定して識別できるようにします。
実際にデータソースを必要とする部分で
context = req.getServletContext();
dataSource ds = (DataSource)context.getAttribute("aaa");
とすれば "aaa" のデータソースを取得できます。
getAttribute("bbb"); とすれば "bbb" のデータソースを取得できます。
>データアクセス部分は共用できると考えています
やったわけではないですが、可能と思います。
#1さん御心配の件はDBコネクション自体を引数で渡すように設計することにより、なんら問題はないと思います。例のソースのようにユーザ識別をあちこちにちりばめる必要はありません。
ご回答ありがとうございます。
上記のようにdata-sourceでキーの設定をすれば
大丈夫そうですね。
データアクセス部分の共用の件についは、
データソースの切り分け部分を別クラス
(もしくは共通で使用するクラス)に定義して、
呼び出すようにしてあげれば、きれいに
まとまるかなと思います。
一度上記の方法で試してみます。
どうもありがとうございました。
No.3
- 回答日時:
#1です。
やっぱり的外れだったようで…。
申し訳ありませんでした。
自身の参考にもなりました。
ありがとうございました。
No.1
- 回答日時:
的はずれな回答だったらごめんなさい。
JDBCレベルの場合ですと
DriverManager.getConnection(String url)
は(その他のgetConnectionメソッドも)
引数にurlを指定しますので、
>テーブル名は同じの為、データアクセス部分は共用できる
は成り立たないと思うのですが…
つまり、接続先が2つあるのであれば
Connection db1 = DriverManager.getConnection(db1URL);
Coonection db2 = DriverManager.getConnection(db2URL);
とConnectionを2つ保持しないといけないのでは…。
Statementのexecute(String sql)
に渡すSQL文は同じSQL文
String sql = "SELECT * FROM hogeTable";
でいいと思いますが、実行する部分は
Statement stdb1 = db1.createStatement();
Statement stdb2 = db2.createStatement();
if(ユーザー判別){
//ユーザーA
stdb1.execute(sql);
}else{
//ユーザーB
stdb2.execute(sql);
}
と判別しないといけないと思いますが…
ご回答ありがとうございます。
JDBCレベルだと、確かにご回答いただいたかたちで
大丈夫ですね。
ただ今回はStrutsということもあり、
上記の方法での対応は出来ないかなと
考えています。
ただし(フレームワーク等を使用しない)純粋な
WEBシステムなら今回の方法がもっとも手軽かなと
おもいます。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ルーター・ネットワーク機器 NUROのルータF660Aについて 2 2022/09/07 11:44
- サーバー Windows2019CALとRDS CALについて 1 2022/06/19 13:48
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- PHP 「ログイン機能を持たせる」説明が気難しいです。 2 2022/10/11 02:59
- ASP・SaaS Slackの料金体系に詳しい方教えてください 2 2022/09/03 17:27
- docomo(ドコモ) アンドロイド、ワイファイが勝手に切られる 2 2023/07/09 20:28
- JavaScript Typescript が必要な理由 1 2023/01/07 11:45
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0でSQLServerへ・・・Recor...
-
【VB】コンボボックスにデータ...
-
複数SQL発行について
-
VBA 変数名に変数を使用したい。
-
ActiveReports(アクティブレポ...
-
accessでフィールド追加のあと...
-
エクセルでXY座標に並べられた...
-
VBAコンボボックスの内容が反映...
-
『列名 '担当者CD' があいま...
-
配列のペースト出力結果の書式...
-
INT64対応のprintf系関数はあり...
-
ExcelVBAからAccessMDB内のテー...
-
Excel複数シートをaccessへ一括...
-
ファイル名の一部削除について
-
EXCELのVBAでLenB関数について
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
StrConvでUnicodeに変換出来な...
-
ExcelからAccessのテーブルに書...
-
2次元配列のソート
-
C# DataTableに最後に追加した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UPDATE時にSETしたい日本語文字...
-
【VB】コンボボックスにデータ...
-
VB6.0でSQLServerへ・・・Recor...
-
複数SQL発行について
-
名前'dbOpenDynaset'は宣言され...
-
MDBをADO接続でINSERT・UPDATE...
-
初心者ですデータベースの形式 ...
-
PerlでMDBのデータを読みたいん...
-
VB6.0とaccessのDBを接続する
-
データベースの接続ができない
-
OracleDataReaderについて…
-
ListviewにDB内容を表示し方に...
-
VBSでADOを使ってaccessのテー...
-
データベースに書き込むときの...
-
レコードをセレクトしてデータ...
-
VB6でデータベースを変えるとテ...
-
StrutsでDataSourceの切り替え
-
[ASP]エラー プロバイダが指...
-
vb.netでデータベース(Access)...
-
ASPでoracleの接続について教え...
おすすめ情報