JNDI接続設定@Tomcat5.5/Spring2.x/PostgreSQL8.x

Tomcat5.5.xx環境化にて、SpringFramework(2.x.x)を使う際にデータソースをJNDI経由で取得、利用する際のメモ。

  • PostgreSQLでDB接続出来る環境を用意。
  • プログラム単体で接続テストを行い、繋がるかどうか確認。
  • Tomcatプロジェクトを作成、その際のプロパティ→[Tomcat]→[全般]→[コンテキストの更新を可能にする…]チェックは外した状態で。
  • web.xmlに以下の設定を追加。(jdbc/testdbは仮の名称。適宜置換)

    jdbc/testdb
    javax.sql.DataSource
    Container

  • CATALINA_HOME/conf/Catalina/localhost/配下に、作成したプロジェクト名でxmlファイルを作成。
<?xml version="1.0" encoding="UTF-8"?>
<Context
    path="/(アプリケーション名)" reloadable="true"
    docBase="C:/eclipse3.3/workspace/(作成プロジェクト名)"
    workDir="C:/eclipse3.3/workspace/(作成プロジェクト名)/work"> 
    <Resource
        auth="Container"
        name="jdbc/testdb"
        type="javax.sql.DataSource"
        driverClassName="org.postgresql.Driver"
        password="(パスワード)"
        maxIdle="1"
        maxWait="10"
        username="(ユーザ名)"
        url="(設定した接続URL)"
        maxActive="10"
    />
</Context>
  • Springframeworkのライブラリ他各種をプロジェクトに導入。
  • (作成したTomcatプロジェクト)/WEB-INF/配下にspring用の設定ファイル作成。ここではapplicationContext.xmlとした。
  • applicationContext.xmlに以下の設定を追加。valueタグ内の値は最初「jdbc/testdb」としていたんだけど、エラーが出るので「java:comp/env/」を付加したら上手く動いたっぽい。
<!-- DataSource設定 -->

    java:comp/env/jdbc/testdb

  • dataSourceを利用するクラスの設定をapplicationContext.xmlに追加。ここでの利用クラスとは、getDataSource()メソッドを持つクラス(JdbcDaoSupportとか)となる。

    

  • 更にStrutsのActionクラス等から上記作成クラスを利用する場合。
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(
                            this.getServlet().getServletContext());
XXXXXService service = (XXXXXService)wac.getBean("mstSmplDao");

たぶん他にも色々方法はあると思うけど、とりあえず上手く行った一例としてメモしておくことにします。