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]
|