getConnection()上的java.util.NoSuchElementException

时间:2013-10-11 19:53:23

标签: java tomcat jdbc connection-pooling

我有以下代码:

Context ctx = new InitialContext(); // Set the initial context
DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + serverURL);        
conn = dataSource.getConnection();

但是,行conn = dataSource.getConnection();正在抛出java.util.NoSuchElementException。我有点困惑。这是否意味着我的服务器URL不正确?这是我的context.xml:

<Context>
    <Resource name=serverURL auth="Container" type="javax.sql.DataSource"
        driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://"
        username="" password="" maxActive="100" maxIdle="30" maxWait="10000" />

</Context> 

这是我的web.xml:

<resource-ref>

        <res-ref-name>serverURL</res-ref-name>

        <res-type>javax.sql.DataSource</res-type>

        <res-auth>Application</res-auth>

        <res-sharing-scope>Shareable</res-sharing-scope>

    </resource-ref>

任何人都知道什么是错的?

2 个答案:

答案 0 :(得分:0)

当连接用完时连接池抛出

java.util.NoSuchElementException。您有连接泄漏的可能性。您可以尝试启用废弃连接日志记录以找出泄漏的位置。

更新

如果你看到第一个连接,那么它很可能是URL。某些Google搜索表示连接网址的格式为jdbc:db2://<host>[:<port>]/<database_name>。您的URL缺少主机名和数据库名称。如果端口不是标准端口,那么您也需要指定端口。

答案 1 :(得分:0)

试试 -

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup(serverURL);
Connection conn = ds.getConnection();
// ...

另见JNDI Datasource HOW-TO