2010-07-28 4 views
4

J'essaie de faire un peu d'accès JDBC à partir de JavaScript en utilisant le Rhino inclus dans Java 6. Mais je ne peux pas faire le DriverManager trouver le Driver que je veux utiliser.Pourquoi jrunscript n'honore-t-il pas mon chemin de classe?

Ces deux exemples devraient être équivalents:

Java:

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.'); 
} 

... mais quand je les cours, je reçois ce comportement:

Java:

> java -cp .;jtds-1.2.5.jar DbTest 
java.sql.SQLException: Unknown server host name 'myserver'. 
awww. 

C'est génial, il a réussi à charger le pilote et a essayé de résoudre le serveur.

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 

Pourquoi ne pas trouver la classe? J'ai essayé avec et sans importPackage() et importClass(), avec et sans le préfixe Packages. Si je commente forName, puis DriverManager ne trouve pas un pilote approprié.

+0

essayé sous Linux maintenant, exactement la même comportement. Également essayé d'exécuter 'java -cp blabla com.sun.tools.script.shell.Main dbtest.js', pas de différence. – clacke

+0

Suspecter qu'il s'agit d'un problème de sécurité et que le moteur de script s'exécute à l'aide de son propre chargeur de classe. La question est donc de savoir où cela peut être modifié. Essayé d'exécuter un Ant '

Questions connexes