【问题标题】:Eclipse Tomcat creating 3 duplicate JNDI connection poolsEclipse Tomcat 创建 3 个重复的 JNDI 连接池
【发布时间】:2011-04-05 21:54:26
【问题描述】:

在一个运行 Eclipse Helios SR2、Windows 7 和 Tomcat 6.0.32 的开发人员工作站上,我们遇到了一个非常奇怪的重复 JNDI 连接池的情况

  • 从 Eclipse 运行 tomcat
  • server.xml

>

<Context docBase="path to web app" path="/ds-web" reloadable="true">
    <Resource
        name="jdbc/ds"
        username="ds"
        password="pass"
        type="javax.sql.DataSource" 
        url="jdbc:postgresql://localhost:5432/ds"  
        auth="Container" 
        driverClassName="org.postgresql.Driver" 
        factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
        logAbandoned="true" 
        maxActive="30" 
        maxIdle="10" 
        maxWait="1000" 
        removeAbandoned="true" 
        removeAbandonedTimeout="60"
        validationQuery="SELECT 1"
        testOnBorrow="true"
        testOnReturn="true"/>

</Context>
  • 启动服务器时,在控制台上我们连续看到以下 3 次

AbandonedObjectPool is used
(org.apache.commons.dbcp.AbandonedObjectPool@11aa58b)
    LogAbandoned: true
    RemoveAbandoned: true
    RemoveAbandonedTimeout: 60
  • 然后应用程序找不到 JNDI 资源
  • 如果我们删除server.xml 中的&lt;Resource&gt;,那么控制台会显示根本没有创建连接池
  • 在另一台具有相同硬件和操作系统的开发人员机器上,我们没有这个问题

有什么想法吗? 谢谢

马克

【问题讨论】:

    标签: java eclipse tomcat jndi


    【解决方案1】:

    我的建议,从server.xml 复制整个&lt;Context&gt; 并在您的Web 应用程序META-INF 文件夹中创建一个空白context.xml 并将从server.xml 复制的&lt;Context&gt; 粘贴到那里。

    重新启动您的应用程序,看看这是否有效。

    【讨论】:

      【解决方案2】:

      我们在机器上重新安装了 postgresql,问题得到了解决。

      我们认为原始 postgresql 配置中的某些内容被搞砸了,tomcat 无法以某种方式连接到 BD。我猜tomcat只是“尝试3次”,因此是三倍输出。

      另一个未解之谜......

      【讨论】:

        【解决方案3】:

        移动

        <Resource
            name="jdbc/ds"
            username="ds"
            password="pass"
            type="javax.sql.DataSource" 
            url="jdbc:postgresql://localhost:5432/ds"  
            auth="Container" 
            driverClassName="org.postgresql.Driver" 
            factory="org.apache.commons.dbcp.BasicDataSourceFactory" 
            logAbandoned="true" 
            maxActive="30" 
            maxIdle="10" 
            maxWait="1000" 
            removeAbandoned="true" 
            removeAbandonedTimeout="60"
            validationQuery="SELECT 1"
            testOnBorrow="true"
            testOnReturn="true"/>
        

        到server.xml即

        <GlobalNamingResources>
        

        元素

        在您的 conf/context.xml 文件中,您将改为指定

        <ContextLink name="jdbc/ds" global="jdbc/ds"/>
        

        这样,三个上下文将共享同一个池。

        【讨论】:

          猜你喜欢
          • 2017-12-21
          • 2013-05-07
          • 1970-01-01
          • 2011-11-13
          • 2010-10-25
          • 1970-01-01
          • 1970-01-01
          • 2014-09-13
          • 2019-10-14
          相关资源
          最近更新 更多