我的应用程序使用JDBC数据库驱动程序。我从一个jar文件加载这些,db2jcc.jar是我正在使用的DB2的情况。有了这个罐子在classpath中,一切都很好,但我有一个条件,找出从属性在应用程序的配置文件中的罐子代替 - 例如,根据属性文件中的类路径加载Java类
database.driver=/opt/IBM/db2/V9.5/java/db2jcc.jar
我可以通过确定一个的URLClassLoader加载类,但问题是我需要将这样创建的对象视为显式的DB2XADataSource。例如:
URLClassLoader dbClassLoader = new URLClassLoader(new URL[]{driverJar});
xaClass = dbClassLoader.loadClass("com.ibm.db2.jcc.DB2XADataSource");
DB2XADataSource dataSource = (DB2XADataSource) xaClass.newInstance();
dataSource.setCurrentSchema(DATABASE_SCHEMA); // <- dataSource has to be a
dataSource.setDatabaseName(DATABASE_NAME); // DB2XADataSource to do this
(。重排,有点改名;其实我做的loadClass中包含此代码的类的构造函数,而的newInstance是其方法之一)
我想我因为加载我的类的类加载器试图查找DB2XADataSource以执行强制转换,但URL类加载器不在树的上方,所以正在进入类加载程序纠结。问题是,在我应该停止工作一天之后(在英国这里),我想不出如何以最简单和最理智的方式解决问题。
想法?
谢谢。