获取TOMCAT数据源惊奇的发现,DataSource是如何实例化的,求高手
问题一:如图一:得到的是数据源接口DataSource,为什么DEBUG(图二)的变量就指向到了子类的BasicDataSource?
问题二:为什么直接可以将DataSource这个接口实例化呢?
问题三:我现在想得到TOMCAT数据源里配置的信息,比如数据库地址、用户名等信息,该如何获取?
--------------------编程问答-------------------- 1 DataSource继承自BasicDataSource,你看你配置文件。
2 那不是实现的接口,就像Set s = new HashSet()一样。
3 还不知道,等楼下回答。 --------------------编程问答-------------------- 1、BasicDataSource 继承DataSource ,但是我直接这样写
DataSource ds =(BasicDataSource)ctx.lookup("java:comp/env/jdbc/testDB"),居然报错,报的是
ClassCastException: Cannot cast org.apache.tomcat.dbcp.dbcp.BasicDataSource (id=150) to org.apache.tomcat.dbcp.dbcp.BasicDataSource,不明白怎么回事 --------------------编程问答-------------------- DataSource 是接口,BasicDataSource是类,怎么能跟BasicDataSource匹配呢。 --------------------编程问答--------------------
你的JVM中存在2个类,它们都是一样的package和类名字,但是他们不是同一个类. --------------------编程问答--------------------
BasicDataSource 继承DataSource ,父类引用指向子类对象,怎么不能匹配 --------------------编程问答--------------------
你的意思是存在两个BasicDataSource,那该怎么解决能,我现在想得到BasicDataSource --------------------编程问答--------------------
虽然是继承,类能强制转换成接口么?你这样写试试。
BasicDataSource ds =(BasicDataSource)ctx.lookup("java:comp/env/jdbc/testDB") --------------------编程问答--------------------
这样写报错,我就是不明白为什么不能直接转换成子类BasicDataSource 一定要转换成DataSource 才是对的 --------------------编程问答--------------------
你的WEB-INF/lib/里是不是有tomcat-dbcp.jar? 如果有的花,删除掉.
如果你用eclipse,直接Ctrl+Shift+T.输入BasicDataSource,即可察看你的工程中什么地方存在BasicDataSource
补充:Java , Web 开发