Я пытаюсь получить доступ к JDBC из JavaScript, используя Rhino, включенный в Java 6. Но я не могу заставить DriverManager
найти Driver
, который я хочу использовать.
Эти два примера должны быть эквивалентны:
Ява:
public class DbTest {
public static void main(String[] argv) {
java.sql.Connection c = null;
try {
java.lang.Class.forName("net.sourceforge.jtds.jdbc.Driver");
c = java.sql.DriverManager.getConnection(
"jdbc:jtds:sqlserver://myserver/mydb", "user", "password");
}
catch (Exception e) {
c = null;
System.out.println(e);
};
if(c != null) {
System.out.println("yay, got c!");
try {
c.close();
}
catch(Exception e) {}
} else {
System.out.println("awww.");
}
}
}
JavaScript:
importPackage(Packages.net.sourceforge.jtds.jdbc);
java.lang.Class.forName('net.sourceforge.jtds.jdbc.Driver');
var c = null;
try {
c = java.sql.DriverManager.getConnection(
'jdbc:jtds:sqlserver://myserver/mydb', 'user', 'password');
}
catch (e) {
c = null;
println(e);
};
if(c) {
println('yay, got c!');
c.close();
} else {
println('awww.');
}
... но когда я запускаю их, я получаю такое поведение:
Ява:
> java -cp .;jtds-1.2.5.jar DbTest
java.sql.SQLException: Unknown server host name 'myserver'.
awww.
Это здорово, ему удалось загрузить драйвер и попытаться разрешить сервер.
JavaScript:
> jrunscript -cp .;jtds-1.2.5.jar dbtest.js
script error in file dbtest.js :
sun.org.mozilla.javascript.internal.WrappedException:
Wrapped java.lang.ClassNotFoundException:
net.sourceforge.jtds.jdbc.Driver (dbtest.js#2) in dbtest.js at line number 2
Почему не находит класс? Я пробовал с importPackage()
и importClass()
и без, с префиксом Packages
и без него. Если я закомментирую forName
, то DriverManager
не найдет подходящего драйвера.
java -cp blabla com.sun.tools.script.shell.Main dbtest.js
, без разницы. - person clacke   schedule 29.07.2010<script />
, у которого есть атрибут classpath, очевидно, в интересах сценария. Тоже не работает. - person clacke   schedule 29.07.2010java -cp $JAVA_HOME/lib/tools.jar -Xbootclasspath:"$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/resources.jar:jtds-1.2.5.jar" com.sun.tools.script.shell.Main dbtest.js
работает. Но я хочу знать, почему ниjrunscript
, ни<script />
, похоже, не используют обычный путь к классам и какой из них они используют. - person clacke   schedule 29.07.2010