Glassfish jdbc/数据库查找失败

问题描述 投票:0回答:2

我希望我不会因为找不到答案而提出重复的问题。 我收到此错误:

javax.naming.NamingException:在 SerialContext 中查找“jdbc/osclassDB”失败

这就是我所做的:我设置了一个 JDBC 连接池 和一个指向该池的 JDBC 资源(均在 Glassfish 中)。

然后我告诉我的web.xml有一个 JDBC 资源:

<resource-ref>
    <res-ref-name>jdbc/osclassDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>                
</resource-ref>

然后我尝试在 Servlet 中使用该资源:

  Connection connection = null;

  try {        
     InitialContext initialContext = new InitialContext();
     //Context dbContext = (Context) initialContext.lookup("java:comp/env");

     DataSource dataSource = (DataSource) initialContext.lookup("jdbc/osclassDB");
     connection = dataSource.getConnection();

     if (connection == null) {
         throw new SQLException("Error establishing connection!");
     }
     // some queries here
  } 
  // catch and finally close connection

但是当我打电话给

Servlet
时,它会抛出
NamingException
并告诉我
Lookup failed for 'jdbc/osclassDB' in SerialContext

我在这里做错了什么?是web.xml吗?我错过了什么吗? 感谢您的帮助!

java servlets jdbc glassfish web.xml
2个回答
2
投票

问题解决了:

第一个,添加一个sun-web.xml,将资源引用web.xml链接到实际的jndi-name(我在Glassfish上设置的那个)。通常情况下,这应该是没有必要的(Oracle 说),但我还是这么做了 [编辑: 事实证明,这确实没有必要! ]

2nd我遗漏了“jdbc”。在 servletweb.xmlsun-web.xml 中,它现在被称为“osclassDB”(我的资源名称),而不是“jdbc/osclassDB”

现在看起来像这样:

web.xml

<resource-ref>
    <res-ref-name>osclassDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>                
</resource-ref>

sun-web.xml

<resource-ref>
    <res-ref-name>osclassDB</res-ref-name>
    <jndi-name>osclassDB</jndi-name>  
</resource-ref> 

在 servlet 中

Context dbContext = (Context) initialContext.lookup("java:comp/env");
DataSource dataSource = (DataSource) dbContext.lookup("osclassDB");
connection = dataSource.getConnection();

[编辑:] sun-web.xml 确实没有必要


0
投票

如果您手动编辑您的domain.xml(就像我一样)

<resources>
<jdbc-resource ..
<jdbc-resource pool-name="DataSource" jndi-name="jdbc/myDataSource"></jdbc-resource>
..

确保您还添加了此条目

<servers>
    <server config-ref="server-config" name="server">
      ...
      <resource-ref ref="jdbc/myDataSource"></resource-ref>

  
© www.soinside.com 2019 - 2024. All rights reserved.