Tomcat環境構築メモ


ログアウトするとTomcatが終了してしまう

 TomcatでWEBアプリケーションを開発していて、モノが出来上がりいよいよ本番環境で動かすというときに、Tomcatを起動したターミナルをログアウトするとTomcatが終了してしまうと言った現象に悩まされたことはないだろうか?これはそのターミナルをログアウトするときにTomcatにSIGHUPが送られ、Tomcatはこれを受けて終了してしまうためで正常な動作である。

 これを防ぐにはnohupコマンドを使用してTomcatを起動し、SIGHUPを無視すればよい。以下のように入力することによって、ターミナルをログアウトしてもTomcatは動き続けることができる。

$ nohup ./startup.sh &

JDBCドライバをインストールする(PostgreSQL)

 Tomcat + PostgreSQLでWEBアプリケーションからDBへ接続する前にJDBCドライバをインストールする必要がある。PostgreSQLのバージョンによってインストールするドライバは異なる。近年の親切なインストーラを使用してOSインストール時にPostgreSQLもインストールした場合、たいていJDBCドライバもインストールされているのではないだろうか。

 例えば7.3.x用のJDBC 3.0ドライバであればpg73jdbc3.jarのようなファイルがどこかにあるはずである。もし見つからなくてもhttp://jdbc.postgresql.org/download.htmlからダウンロードすれば良い。このファイルを単に$CATALINA_HOME/common/lib(後述する接続プールを使うためにはここに置く必要がある。)にコピーするだけである。

Tomcatの接続プール(DBCP)を使う(PostgreSQL)

 Tomcat + PostgreSQLの組み合わせで接続プールを使うにはserver.xmlの設定、web.xmlの設定およびコードの記述が必要になる。$CATALINA_HOME/conf/server.xmlの設定で重要なことは、これは僕自身もしばらく悩んだのだが<Context>タグの子要素で必要なことを記述することである。

 例えばhttp://(ターゲットのサーバ名)/test/のようなURLでアクセスされるようなWEBアプリケーションでは/testの<Context>タグを記述し、それに包含させるよう<Resource>タグや<ResourceParams>タグを記述する。

<しばらく悩んだエラー>

Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

<server.xmlの記述例>

<Host name="localhost" debug="0" appBase="webapps"
 unpackWARs="true" autoDeploy="true"
 xmlValidation="false" xmlNamespaceAware="false">

  <Context path="/test" docBase="test"
          debug="5" reloadable="true" crossContext="true">
    <Resource name="jdbc/postgres" auth="Container"
              type="javax.sql.DataSource"/> 

    <ResourceParams name="jdbc/postgres">
      <parameter>
        <name>factory</name>
        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>org.postgresql.Driver</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:postgresql:testdb</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>postgres</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value></value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>20</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>10</value>
      </parameter>
      <parameter>
        <name>maxWait</name>
        <value>-1</value>
      </parameter>
    </ResourceParams>
  </Context>
</Host>

 尚、server.xmlを書き換えたらTomcatを再起動する必要があるのでお忘れなく。WEB-INF/web.xmlではserver.xmlで記述した内容を参照させるように<resource-ref>タグを記述する。<res-ref-name>タグの参照名はserver.xmlの<Resource>タグのそれと一致していなければならない。

<web.xmlの記述例>

<web-app>
  <resource-ref>
    <description>postgreSQL Datasource</description>
    <res-ref-name>jdbc/postgres</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>

 アプリケーションでは以下のように記述することでDataSourceが取得できる。

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:/comp/env/jdbc/postgres");
Connection conn = ds.getConnection();

 いくつか参考になりそうなところを挙げておく。

<Tomcat5 サーブレット/JSP コンテナ JNDIデータソースの手引き>
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-datasource-examples-howto.html

<Tomcat5 サーブレット/JSP コンテナ JNDI リソース HOW-TO>
http://www.jajakarta.org/tomcat/tomcat5.0/ja/docs/tomcat-docs/jndi-resources-howto.html

<PostgreSQL 7.3.4 プログラマガイド 5.9. 接続プールとデータソース>
http://www.postgresql.jp/document/pg734doc/programmer/jdbc-datasource.html

DriverManagerを使った接続(PostgreSQL)

 接続プールを使わずにDriverManagerを使った伝統的な接続ももちろん可能だ。この場合、server.xml、web.xml等の面倒な設定はいらない反面、毎回DBへの接続、切断を行うことになるので性能的に問題があるようだ。性能を上げようとすると独自の工夫が必要となるので、通常は接続プールを使ったほうが良いだろう。
Class.forName("org.postgresql.Driver"); // JDBCドライバロード
Connection conn = DriverManager.getConnection("jdbc:postgresql:testdb","postgres","");

JAVA VMのヒープサイズの調整

 CATALINA_OPTS環境変数にTomcat起動時のJAVA VMに渡す引数を記述することができる。ヒープサイズの調整をするには、-Xms(初期ヒープサイズ)、-Xmx(最大ヒープサイズ)を記述することになる。例えば、初期ヒープサイズ128MB、最大ヒープサイズ256MBに設定するには以下のようにCATALINA_OPTS環境変数を設定する。
CATALINA_OPTS="-Xms128m -Xmx256m"
export CATALINA_OPTS
<java - Java アプリケーション起動ツール>
http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/linux/java.html
(2005/03/23)

新着情報
【オープンソースソフトウェア環境構築】Apple silicon Macで開発環境を構築
【Rust Tips】Actix webでJSONをPOSTする
【Rust Tips】コマンドライン引数を取得する

Copyright© 2004-2022 モバイル開発系(K) All rights reserved.
[Home]