【问题标题】:Beanshell won't load my dynamically added JDBC Driver class?Beanshell 不会加载我动态添加的 JDBC Driver 类?
【发布时间】:2011-08-19 02:46:24
【问题描述】:

使用 JDK1.6.0_16,我有一个简单的程序,我试图让 beanshell 2.0b4 动态加载 .jar(正如the documentation 建议的那样),但我没有运气。文档说,如果我使用 beanshells 的 getClass() 方法,那么它将加载以前由“addClassPath()”方法加载的 jars。它不工作。我需要这方面的帮助...

//debug();
addClassPath("mysql-connector-java-5.1.15.jar"); 
import com.mysql.jdbc.Driver; 
import java.sql.Connection;  
import java.sql.DriverManager; 
import java.util.Arrays;

System.out.println("MySQL Connect Example.");
System.out.println("Classpath: " + Arrays.toString( getClassPath() ) + "\n");

Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "test";
String driver = "com.mysql.jdbc.Driver";
String userName = "root"; 
String password = "password";
try {
  Class driverClass = getClass( driver );
  if(driverClass != null) {
    Driver driver = driverClass.newInstance();
    if(driver != null) {
      DriverManager.registerDriver(driver);
    }
  }
  conn = DriverManager.getConnection(url+dbName,userName,password);
  System.out.println("Connected to the database");
  conn.close();
  System.out.println("Disconnected from database");
} catch (Exception e) {
  e.printStackTrace();
}

我遇到的这个问题强烈表明(beanshell 的)getClass() 方法无法看到它自己动态更改的类路径。

注意:此代码仅在我将 mysql.jar 文件放入 jre/lib/ext 目录(这是旧版 jre 类加载器可以加载它的位置;而不是 beanshell 类加载器)时才有效

【问题讨论】:

    标签: java classloader beanshell dynamic-class-loaders


    【解决方案1】:

    这可能不是 beanshell 的事情,jdbc 在跨类加载器加载驱动程序时存在问题(查看类 javadoc 以获取 ClassLoader,并查看像 this 这样的黑客攻击)。

    【讨论】:

    • 我一直在尝试您提供的那篇文章中的想法,但仍然无法克服类加载器问题。我可能会放弃它。
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多