Mar 12, 2006

[Derby] Derby を Tomcat 5.5 の DataSource に設定する方法

Server Mode で起動した Derby を Tomcat 5.5 に DataSource として登録する方法をメモ。 Tomcat 5.0 → 5.5 で設定方法が変わったことで、意外と設定に時間がかかってしまった。

The Apache Tomcat 5.5 Servlet/JSP Container JNDI Datasource HOW-TO
http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

Derby を Server Mode で起動

Derby 10.1.2.1 を前提とする。

> set JAVA_HOME=c:\jdk1.5.0_06
> set DERBY_INSTALL=c:\db-derby-10.1.2.1-bin
> cd db-derby-10.1.2.1-bin\frameworks\NetworkServer\bin
db-derby-10.1.2.1-bin\frameworks\NetworkServer\bin>startNetworkServer.bat
サーバーは、ポート 1527 で接続を受け入れる準備ができました。

Tomcat 5.5 の設定

Tomcat 5.5.15 を前提とする。

  1. Tomcat に Derby の JDBC ドライバを登録する。 derbyclient.jar、derbynet.jar、derbytools.jar を %CATALINA_HOME%/common/lib/ にコピーする。
  2. DataSource の設定を行う。 %CATALINA_HOME%/conf/server.xml に下記の設定を追加する。
    <Host name="localhost" 
          appBase="webapps"
          unpackWARs="true" 
          autoDeploy="true"
          xmlValidation="false" 
          xmlNamespaceAware="false">
    
      <Context path="/myapp" 
               docBase="myapp"
               reloadable="false" 
               crossContext="true">
    
        <Resource name="jdbc/TestDB" 
                  auth="Container" 
                  type="javax.sql.DataSource"
                  driverClassName="org.apache.derby.jdbc.ClientDriver"
                  url="jdbc:derby://localhost:1527/derbyDB;create=true"/>
      </Context>
    <Host>
    
ちなみに、Host → Context → Resource という階層構造にしないと、何故か url や driverClassName が設定されないために
Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver
という例外が発生する。

Web アプリケーションの設定

<web-app>
  <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/TestDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

アプリケーションからの呼び出し

普通に JNDI 経由で DataSource を取得すれば良い。

Context context = new InitialContext();
Object obj = context.lookup("java:comp/env/jdbc/TestDB");
DataSource dataSource  = (DataSource)obj;
Connection connection = dataSource.getConnection();

Posted in Derby | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |