我的应用程序使用 JDBC 数据库驱动程序。我从一个 jar 文件中加载这些文件,对于我目前正在使用的 DB2,我是 db2jcc.jar。在类路径中使用这个 jar,一切都很好,但我需要从应用程序配置文件中的属性中找到 jar - 例如,
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 类加载器不在树中它的上方。问题是,在我应该停止一天工作(在英国)之后很久,我想不出如何以一种模糊整洁和理智的方式最好地解决它。
想法?
谢谢。