S2Daoで複数のデータソースを扱う
S2Daoを使用しているシステム(S)で他システムに対してデータを更新しないといけなくなり、他システム(W)用のデータソースを追加します。
変更するファイルは以下の2つ。
・j2ee.dicon
・dao.dicon
それぞれ、S用とW用に分割します。
まず、j2ee.diconについてトランザクション関連以外のコンポーネントを削除します。
・j2ee.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
各システム用のデータソースを定義したj2ee_s.dicon、j2ee_w.diconを作成します。
・j2ee_s.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
"oracle.jdbc.driver.OracleDriver"
"jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sss"
"USER01"
"PASSWORD01"
600
10
true
・j2ee_s.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
"oracle.jdbc.driver.OracleDriver"
"jdbc:oracle:thin:@zzz.zzz.zzz.zzz:1521:www"
"USER02"
"PASSWORD02"
600
10
true
dao.diconも分割します。それぞれで、S用、W用のj2ee.diconをインクルードします。
・dao_s.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
・dao_w.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
ActionやDaoのコンポーネント定義を記載しているapplication.diconを編集します。
・application.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
←分割後のdao.diconに変更
←分割後のdao.diconに変更
aop.traceInterceptor
〜 省略 〜
<!-- S用システムにアクセスするDAOアスペクト適用 -->
dao_s.interceptor
"jp.co.zzz.xxx.s.dao"
".*Dao"
<!-- W用システムにアクセスするDAOアスペクト適用 -->
dao_w.interceptor
"jp.co.zzz.xxx.w.dao"
".*Dao"
仕組みが理解できていれば、意外と簡単。