Glassfish jdbc /数据库查找失败

时间:2014-01-15 12:16:50

标签: java servlets jdbc glassfish web.xml

我希望我不是因为我无法找到答案而问一个重复的问题。 我收到了这个错误:

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吗?我错过了什么? 谢谢您的帮助!

1 个答案:

答案 0 :(得分:2)

解决了问题:

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

第二我遗漏了“ jdbc ”。在 servlet 中, web.xml sun-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 实际上没有必要