2010-11-26 13 views
1

開発モードで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で定義されたリソースを破壊することについて言及していませんでした。また、プロダクションセットアップが異なるため、開発専用のフックを入れても構いません。

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

答えて

0

答えは、jetty-env.xmlconfigure an additional jettyConfig parameterの参照をmaven-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> 
関連する問題