- ベストアンサー
StrutsでDataSourceの切り替え
- Tomcat4 + Struts1.1にて、ログインした人の種別により接続するDataSourceの切り替えを行いたいのですが、このようなことは出来るのでしょうか?
- Struts-configには複数のDataSourceが設定できますが、こちらをどうやって切り替えれば良いのかが分からずに困っています。また切り替え以外での対応方法はあるのでしょうか?
- こちらの件で、どなたかご存知の方、もしくは詳細な説明が記載されたHPを知っている方がおられましたら、教えていただけないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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コネクション自体を引数で渡すように設計することにより、なんら問題はないと思います。例のソースのようにユーザ識別をあちこちにちりばめる必要はありません。
その他の回答 (2)
- pcbeginner
- ベストアンサー率46% (261/560)
#1です。 やっぱり的外れだったようで…。 申し訳ありませんでした。 自身の参考にもなりました。 ありがとうございました。
お礼
とんでもございません。 ご回答頂きまして大変感謝しております。 m(_ _)m
- pcbeginner
- ベストアンサー率46% (261/560)
的はずれな回答だったらごめんなさい。 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システムなら今回の方法がもっとも手軽かなと おもいます。 どうもありがとうございました。
お礼
ご回答ありがとうございます。 上記のようにdata-sourceでキーの設定をすれば 大丈夫そうですね。 データアクセス部分の共用の件についは、 データソースの切り分け部分を別クラス (もしくは共通で使用するクラス)に定義して、 呼び出すようにしてあげれば、きれいに まとまるかなと思います。 一度上記の方法で試してみます。 どうもありがとうございました。