Beanshell не будет загружать мой динамически добавленный класс драйвера JDBC? - PullRequest
1 голос
/ 19 августа 2011

Используя JDK1.6.0_16, у меня есть эта простая программа, где я пытаюсь заставить Beanshell 2.0b4 динамически загружать .jar (как и документация предполагает, что это будет), и мне не повезло , Документация гласит, что если я использую метод beansChell () getClass (), то он будет загружать файлы jar, которые ранее были загружены методом "addClassPath ()". Это не работает. Мне нужна помощь в этом ...

//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();
}

Эта проблема, которую я настоятельно рекомендую, состоит в том, что метод getClass () (бобовой оболочки) не может видеть свой собственный динамически измененный путь к классу.

ПРИМЕЧАНИЕ: этот код работает только тогда, когда я помещаю файл mysql.jar в каталог jre / lib / ext (куда его может загрузить устаревший загрузчик классов jre, а не загрузчик классов beanshell)

1 Ответ

1 голос
/ 19 августа 2011

это, вероятно, не то, что нужно: jdbc имеет проблемы с загрузкой драйверов через загрузчики классов (проверьте класс javadoc для ClassLoader и посмотрите такие хаки, как this ).

...