Java NamingContext无法强制转换到数据源?
嗨,我有一个数据库连接类。这个类是动态web项目的一部分。我正在本地运行tomcat服务器上的web项目,并且我还试图连接到derby服务器。我已经导入了derby和tomcat的所有外部文件,这两个服务器都在运行。当我在这一行运行我的应用程序时,我总是失败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
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开发人员在此无需修复任何问题。