|
|||||
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データソースの手引き>
<Tomcat5 サーブレット/JSP コンテナ JNDI リソース HOW-TO>
<PostgreSQL 7.3.4 プログラマガイド 5.9. 接続プールとデータソース> 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)
Copyright© 2004-2022 モバイル開発系(K) All rights reserved.
[Home]
|
|||||