0

我有以下代码:

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>

有谁知道怎么了?

4

2 回答 2

0

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

更新:

如果您在第一次连接中看到它,那么它很可能是 URL。一些谷歌搜索表明连接 URL 的格式是jdbc:db2://<host>[:<port>]/<database_name>. 您的 URL 缺少主机名和数据库名。如果端口不是标准的,那么您也需要指定端口。

于 2013-10-11T19:57:51.297 回答
0

试试看——

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

另请参阅JNDI 数据源 HOW-TO

于 2013-10-11T20:04:49.907 回答