1

を使用してmaven-jetty-plugin、開発モードで Web アプリケーションを実行しています。また、c3p0 JNDI DataSource を構成しますjetty-env.xml

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

これは問題なく動作しますが、webapp の再デプロイ時に接続プールがシャットダウンされていないことに気付きました。c3p0 スレッドがまだ生きているため、PermGen と JDBC 接続リークの両方が発生します。

jetty-env.xml で定義されたリソースを破棄することについての言及は見つかりませんでした。また、プロダクションのセットアップが異なるため、開発専用のフックを入れることもためらっています。

開発時にアプリケーションを再デプロイするときに、接続プールが閉じられていないために発生するリークがないことを確認するにはどうすればよいですか?

4

1 に答える 1

0

答えは、 から参照を削除し、を使用して追加のパラメーターjetty-env.xmlを構成することです。jettyConfigmaven-jetty-plugin

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" 
<Configure id="Server" class="org.mortbay.jetty.Server">
    <New id="dataSource" class="org.mortbay.jetty.plus.naming.Resource">
        <Arg></Arg> <!-- Global scope -->
        <!-- Other values elided for brevity -->
    </New>
</Configure>
于 2010-12-13T15:16:04.593 に答える