java JNDI ClassCastException
我试图将JNDI与名为CEDataSource的自定义数据源一起使用。根据我对这项工作的理解,我还必须创建一个定制工厂
因此,我创建了一个自定义工厂,它将返回CEDataSource对象,但现在,当我尝试在Java中与
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
// Look up our data source
CEDataSource ds = (CEDataSource)envCtx.lookup("jdbc/cePu");
我得到了异常ClassCastException “CEDataSource无法映射到CEDataSource”。我将CEDataSource和CEDataSourceFactory添加到TOMCAT/lib文件夹,并在部署的应用程序上引用了同一个jar
对于可能出现这种错误的原因,我们将不胜感激。谢谢
# 1 楼答案
您在
jdbc/cePu
上执行的查找不是类类型CEDataSource,它属于其他类类型,这就是为什么您会得到类强制转换异常。如果你能给我看一下jdbc/cePu的配置,那会很有帮助# 2 楼答案
实际上,在Eclipse调试会话下启动Tomcat并不太困难(只需将所有Bootstrap.jar放在一个项目中,并在JVM参数中添加系统属性即可)。我已经做过很多次了,哪怕只是为了解剖那只猫的肠道。完成后,您可以中断JNDI连接工厂的类强制转换异常,然后您将能够查看工厂是否被调用
据我所知,Tomcat使用DBCP数据源。实际上是在com下重新打包的。阿帕奇。公猫dbcp。dbcp。数据源(IIRC)
因此,如果这是你查找的结果,我不会感到惊讶
事后看来,我现在意识到我也忘了提到,如果创建CEDataSource实例所需的任何底层类(例如JDBC驱动程序)丢失,那么您也会得到这个ClassCastException。这很公平,但你总是关注课程本身,而不是其他罐子