• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:StrutsでDataSourceの切り替え)

StrutsでDataSourceの切り替え

このQ&Aのポイント
  • Tomcat4 + Struts1.1にて、ログインした人の種別により接続するDataSourceの切り替えを行いたいのですが、このようなことは出来るのでしょうか?
  • 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コネクション自体を引数で渡すように設計することにより、なんら問題はないと思います。例のソースのようにユーザ識別をあちこちにちりばめる必要はありません。

ryvius
質問者

お礼

ご回答ありがとうございます。 上記のようにdata-sourceでキーの設定をすれば 大丈夫そうですね。 データアクセス部分の共用の件についは、 データソースの切り分け部分を別クラス (もしくは共通で使用するクラス)に定義して、 呼び出すようにしてあげれば、きれいに まとまるかなと思います。 一度上記の方法で試してみます。 どうもありがとうございました。

その他の回答 (2)

回答No.3

#1です。 やっぱり的外れだったようで…。 申し訳ありませんでした。 自身の参考にもなりました。 ありがとうございました。

ryvius
質問者

お礼

とんでもございません。 ご回答頂きまして大変感謝しております。 m(_ _)m

回答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); } と判別しないといけないと思いますが…

ryvius
質問者

お礼

ご回答ありがとうございます。 JDBCレベルだと、確かにご回答いただいたかたちで 大丈夫ですね。 ただ今回はStrutsということもあり、 上記の方法での対応は出来ないかなと 考えています。 ただし(フレームワーク等を使用しない)純粋な WEBシステムなら今回の方法がもっとも手軽かなと おもいます。 どうもありがとうございました。

関連するQ&A