Tomcat7->Tomcat8 dbcpまわり変更点備忘録

自分自身の備忘録用として書きます~

【今回やったこと】
Tomcat7を使っていたシステムをTomcat8へ移行するお仕事。対象のシステムではTomcatのDBコネクションプール回りをちょっぴりカスタマイズしています。

【ぶつかったエラー】

Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSource
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 32 more

tomcat-dbcp.jarのBasicDataSourceクラスがnot found。確かにカスタマイズ処理の入ったjarの中でこのクラスをimportして使用しています。はて・・・?

【原因】
色々あーでもないこーでもないと調査した後、ふと思い立ってTomcat7に入ってたtomcat-dbcp.jarとTomcat8に入ってたtomcat-dbcp.jarを展開してフォルダごと比較してみてやっと気づきました。原因、それはTomcat7とTomcat8ではパッケージ名が異なっていること。

Tomcat7 : org.apache.tomcat.dbcp.dbcp.BasicDataSource.class
Tomcat8 : org.apache.tomcat.dbcp.dbcp2.BasicDataSource.class

oh….import書き換えて、mvn clean packageして、実行してみたらめでたくエラー解消。よかったよかった。

【その他気づいたtomcat-dbcp.jarの中の変更点】
カスタマイズ処理の入ったjarをいじいじしていて気づいたものなのですが、把握した限り記載しておきます。備忘録備忘録。

1. maxTotal
Tomcat7版では「maxActive」というパラメータでしたが、「maxTotal」という名前に変更されました。…ネーミング気に入らなかったのかな。機能は「同時に割り当てることのできるアクティブな接続の最大数」とのことなので変わってない・・・かな?時間の関係でメソッドの中身までは追ってません。今度見る時間あったらのぞいてみようと思います。

2. maxWaitMillis
Tomcat7版では「maxWait」でしたが「maxWaitMillis」になりました。コネクション待機時間の最大値なので機能は(たぶん)変わりません。時間の関係でメソry… ミリ秒で設定します宣言した感じのようす?

3. RemoveAbandonedOnBorrow/RemoveAbandonedOnMaintenance
こちらの変更、英語ちから不足も相まっていまいちよく分かっていないので追跡調査中なのですが、Tomcat7の「RemoveAbandoned」パラメータがなくなり、Tomcat8では「RemoveAbandonedOnBorrow」「RemoveAbandonedOnMaintenance」が登場しています。こちらのBasicDataSourceのドキュメントを読んでいたのですが引用するとこんな感じ。

public boolean getRemoveAbandonedOnBorrow():
Flag to remove abandoned connections if they exceed the removeAbandonedTimeout when borrowObject is invoked.
The default value is false.
If set to true a connection is considered abandoned and eligible for removal if it has not been used for more than removeAbandonedTimeout seconds.

public boolean getRemoveAbandonedOnMaintenance():
Flag to remove abandoned connections if they exceed the removeAbandonedTimeout during pool maintenance.
The default value is false.
If set to true a connection is considered abandoned and eligible for removal if it has not been used for more than removeAbandonedTimeout seconds.

今までよりも細かく設定できるようになりましたよ、という認識でいいのかな~ちがうのかなーちゃんと調べたら追記します。

以上、この先いつこの知識が必要になるのか全く分からないんですが、自分用備忘録でした。