開発モードでWebアプリケーションを実行するのにmaven-jetty-plugin
を使用しています。また、私はjetty-env.xml
にC3P0 JNDI DataSourceを設定します。Webアプリケーションコンテキストが破棄されたときのJettyデータソースを閉じる
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="wac" class="org.mortbay.jetty.webapp.WebAppContext">
<New id="dataSource" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>
<Ref id="wac" />
</Arg>
<Arg>jdbc/MyVeryOwnDB</Arg>
<Arg>
<New class="com.mchange.v2.c3p0.ComboPooledDataSource">
<Set name="driverClass">oracle.jdbc.driver.OracleDriver</Set>
<Set name="jdbcUrl">jdbc:oracle:thin:@X:Y:Z</Set>
<Set name="user">U</Set>
<Set name="password">P</Set>
</New>
</Arg>
</New>
</Configure>
これはうまく動作しますが、私は、接続プールは、Webアプリケーションの再デプロイにシャットダウンされていないことに気づいた - C3P0スレッドがまだ生きている、私が得ることを意味していますPermGenとJDBC接続の両方がリークします。
私は、jetty-env.xmlで定義されたリソースを破壊することについて言及していませんでした。また、プロダクションセットアップが異なるため、開発専用のフックを入れても構いません。
開発時にアプリケーションを再デプロイするときに、接続プールが閉じられていないことによるリークがないことを確認するにはどうすればよいですか?