Java NamingContext无法强制转换到数据源?

Java NamingContext无法强制转换到数据源?,java,tomcat,derby,Java,Tomcat,Derby,嗨,我有一个数据库连接类。这个类是动态web项目的一部分。我正在本地运行tomcat服务器上的web项目,并且我还试图连接到derby服务器。我已经导入了derby和tomcat的所有外部文件,这两个服务器都在运行。当我在这一行运行我的应用程序时,我总是失败 ds = (DataSource) ctx.lookup("java:/comp/env"); 这些是我进口的包裹 import java.sql.Connection; import java.sql.SQLException; imp

嗨,我有一个数据库连接类。这个类是动态web项目的一部分。我正在本地运行tomcat服务器上的web项目,并且我还试图连接到derby服务器。我已经导入了derby和tomcat的所有外部文件,这两个服务器都在运行。当我在这一行运行我的应用程序时,我总是失败

ds = (DataSource) ctx.lookup("java:/comp/env");
这些是我进口的包裹

import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Logger;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
这是代码的一个片段

public DatabaseConnection() throws ServiceLocatorException{
try{
            ctx = new InitialContext();
            System.out.println("We are trying to connect to the Derby server: ");
            ds = (DataSource) ctx.lookup("java:/comp/env");
            logger.info("Database found:"+ds.toString());
        }catch(NamingException e){
            logger.severe("Cannot find context, throwing exception"+e.getMessage());
            e.printStackTrace();
            throw new ServiceLocatorException();
        }
}
我得到的例外是这个

java.lang.ClassCastException: org.apache.naming.NamingContext cannot be cast to javax.sql.DataSource

我不知道该怎么办

我希望您已经在web.xml中添加了资源引用条目


另外,在您的web应用程序中,确实包含了META-INF/context.xml文件。

我遇到了这个问题,搜索了所有搜索引擎,但没有找到答案

问题是,如果输入空的databasename/ResourceName作为参数,那么ctx.lookup的返回对象将是NamingContext而不是DataSource

你可以用

javax.naming.NamingEnumeration dsList = envCtx.list(""java:/comp/env"); 
查看此查询返回的内容

应该是正确的:

ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/myDb"); //- make sure myDb exists

关于这个问题,在-R/z2SU上有一个很长的博客,希望Apache Tomcat开发团队将来能解决这个问题。

请参阅
数据源的JNDI名称
不是
java:comp/env
。这是不可能的。结尾缺少了一些内容。-R/z2SU是的一个短url。“长问题”lnk完全不相关,当然不是Tomcat错误日志,没有理由让Tiomcat或其他任何东西支持“空数据库名/ResourceName”。Tomcat开发人员在此无需修复任何问题。