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"
    

  


仕組みが理解できていれば、意外と簡単。