代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

当web应用程序上下文被破坏时关闭Jetty数据源

  •  1
  • Robert Munteanu  · 技术社区  · 14 年前

    我用的是 maven-jetty-plugin 以开发模式运行web应用程序。另外,我在 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 redeploy没有关闭连接池-c3p0线程仍处于活动状态,这意味着我得到了PermGen和JDBC连接泄漏。

    我在jetty-env.xml中找不到破坏已定义资源的引用,而且我也不太愿意使用仅用于开发的钩子,因为产品设置不同。

    在开发时重新部署应用程序时,如何确保没有由于未关闭连接池而导致的泄漏?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Robert Munteanu    14 年前

    答案是从 jetty-env.xml configure 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>