Tomcatの設定1:データソースを使用する方法とメリット
GeneXusに限った話ではないのですが、
ジェネレータにJavaを選んだ場合はTomcatを利用することが多いかと思いますので、
Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。
GeneXusのデフォルト設定だと、DBへの接続方法はJDBCで、
コネクションプーリングもアプリケーション側で実施する形となります。
[Enable Connection Pooling] プロパティ
このままでも特に問題は無いのですが、
私の経験上、Tomcatのデータソースを利用する方が安定性が少し上がります。
数年前の事例ですが、サーバーを起動したまま運用を続けていくと、
徐々にTomcatのメモリが蓄積されていき、数週間すると動きが悪くなってくる。という現象がありました。
サーバースペックや、利用人数、アプリ側の作り方など、色々と影響は考えられますが、
何か特定の処理や操作をした場合ではなく、少しづつゴミデータが蓄積されているような状況でした。
このシステムでTomcatのデータソースを利用するようにしたところ、
問題が解消され、メモリが綺麗に開放されるようになった。
という経験があります。
このことから、Tomcatのデータソースを利用した方が、安定性が良いのかと思う次第です。
やはり世界中の技術者に10年も20年も使い込まれたTomcatは性能や品質が良いのでしょうね。
ただ、まあ、運用計画的に1週間に1回位は再起動をした方が
何かと良いのではないかとも思いますけどね。
<設定方法>
Tomcat\conf\catalina\localhost\<アプリケーション名>.xmlのどちらかに記述する
記述場所は<Context> ~ </Context>の間
<Resource
name="jdbc/【任意のデータソース名】"
auth="Container"
type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://【DBのサーバーアドレス】:1433/【データベース名】"
username="【DBへの接続ユーザーID】"
password="【DBへの接続ユーザーパスワード】"
maxActive="20"
maxIdle="10"
validationQuery="select 1"
/>
※driverClassNameとurlはDBの種類とJDBCの種類によって変わります。
この例はSQLServerをjtdsドライバで接続する場合の記述
※maxActive、maxIdleはコネクションプーリングの設定値
他にも細かな設定は有りますので、必要があれば設定してください。
※validationQueryはDBコネクションが活きているかどうか確認するためのSQLコマンド
SQLServerやPostgreSQLの場合は必要。Oracleの場合は不要だった気がします。
こちらもDBによって中身を変える必要あり
※ユーザーIDとパスワードを平文で設定するので、セキュリティ的に気になりますが、
外部から参照できるファイルではないので、一応問題は無いのだと思います。
暗号化する方法もあるようですが、少々面倒な設定が必要なようです。
記述場所は<web-app> ~ </web-app>の間
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/【任意のデータソース名】</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
※任意のデータソース名は1.で定義した名前です
[Use Datasource for Web Based Applications] プロパティをTrueにします。
http://wiki.genexus.jp/hwiki.aspx?%5BUse+Datasource+for+Web+Based+Applications%5D+プロパティ,
[JDBC datasource] プロパティを設定
java:/comp/env/jdbc/【任意のデータソース名】
※ここが良く間違うポイントで、頭にjava:/comp/env/が必要なんです
以上です。
GeneXusをビルドして、Tomcatを再起動すればOKです。
接続エラーなどはTomcat\logsに出力されますので、エラーの場合はログを見てください。
注意点として、バッチプログラム(Mainprogram=True、CallProtcol=Command Line)の場合は
Tomcat上での動作にはなりませんのでDB接続はGeneXusのデータストアプロパティの接続情報に従う形になります。
ジェネレータにJavaを選んだ場合はTomcatを利用することが多いかと思いますので、
Tomcatで運用する場合で、いくつか考慮した方が良い設定・情報を記載します。
GeneXusのデフォルト設定だと、DBへの接続方法はJDBCで、
コネクションプーリングもアプリケーション側で実施する形となります。
[Enable Connection Pooling] プロパティ
このままでも特に問題は無いのですが、
私の経験上、Tomcatのデータソースを利用する方が安定性が少し上がります。
数年前の事例ですが、サーバーを起動したまま運用を続けていくと、
徐々にTomcatのメモリが蓄積されていき、数週間すると動きが悪くなってくる。という現象がありました。
サーバースペックや、利用人数、アプリ側の作り方など、色々と影響は考えられますが、
何か特定の処理や操作をした場合ではなく、少しづつゴミデータが蓄積されているような状況でした。
このシステムでTomcatのデータソースを利用するようにしたところ、
問題が解消され、メモリが綺麗に開放されるようになった。
という経験があります。
このことから、Tomcatのデータソースを利用した方が、安定性が良いのかと思う次第です。
やはり世界中の技術者に10年も20年も使い込まれたTomcatは性能や品質が良いのでしょうね。
ただ、まあ、運用計画的に1週間に1回位は再起動をした方が
何かと良いのではないかとも思いますけどね。
<設定方法>
1.TomcatのcontextにDB情報を定義する
Tomcat\conf\context.xmlか、Tomcat\conf\catalina\localhost\<アプリケーション名>.xmlのどちらかに記述する
記述場所は<Context> ~ </Context>の間
<Resource
name="jdbc/【任意のデータソース名】"
auth="Container"
type="javax.sql.DataSource"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://【DBのサーバーアドレス】:1433/【データベース名】"
username="【DBへの接続ユーザーID】"
password="【DBへの接続ユーザーパスワード】"
maxActive="20"
maxIdle="10"
validationQuery="select 1"
/>
※driverClassNameとurlはDBの種類とJDBCの種類によって変わります。
この例はSQLServerをjtdsドライバで接続する場合の記述
※maxActive、maxIdleはコネクションプーリングの設定値
他にも細かな設定は有りますので、必要があれば設定してください。
※validationQueryはDBコネクションが活きているかどうか確認するためのSQLコマンド
SQLServerやPostgreSQLの場合は必要。Oracleの場合は不要だった気がします。
こちらもDBによって中身を変える必要あり
※ユーザーIDとパスワードを平文で設定するので、セキュリティ的に気になりますが、
外部から参照できるファイルではないので、一応問題は無いのだと思います。
暗号化する方法もあるようですが、少々面倒な設定が必要なようです。
2.Tomcatのweb.xmlに使用するデータソースを定義する
Tomcat\webapps\<アプリケーションディレクトリ>\WEB-INF\web.xml記述場所は<web-app> ~ </web-app>の間
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/【任意のデータソース名】</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
※任意のデータソース名は1.で定義した名前です
3.GeneXusのプロパティを設定する
[Use Datasource for Web Based Applications] プロパティをTrueにします。
http://wiki.genexus.jp/hwiki.aspx?%5BUse+Datasource+for+Web+Based+Applications%5D+プロパティ,
[JDBC datasource] プロパティを設定
java:/comp/env/jdbc/【任意のデータソース名】
※ここが良く間違うポイントで、頭にjava:/comp/env/が必要なんです
以上です。
GeneXusをビルドして、Tomcatを再起動すればOKです。
接続エラーなどはTomcat\logsに出力されますので、エラーの場合はログを見てください。
注意点として、バッチプログラム(Mainprogram=True、CallProtcol=Command Line)の場合は
Tomcat上での動作にはなりませんのでDB接続はGeneXusのデータストアプロパティの接続情報に従う形になります。
コメント
コメントを投稿