From: <php...@li...> - 2006-09-20 15:09:30
|
Hello, php-java-bridge is a great tool. But now I'm having a problem with accessing a MySQL-database using jdbc which I was not able to solve. I always get the message "java.sql.SQLException: No suitable driver Responsible" or class not found errors. The problem occurs when I try to convert the java code Class.forName("com.mysql.jdbc.Driver"); and the "getConnection" into corresponding php-code. Please see the code snippets and the provided system information for details. I have tried several ours to solve the problem. So any help would be desperately appreciated... Any ideas? ################## Part of the php-Script with some comments: <?php java_require('file:///usr/share/java/mysql.jar'); // I also tried to put the jar into the same directory than the script without effect: // java_require('file:///var/www/mysql.jar'); $conn = new Java('java.sql.Connection'); // The following is working without errors. So the class must be there, I suppose... $mysql = new javaClass('com.mysql.jdbc.Driver'); $mysqlinst = $mysql->newInstance(); // The following two code lines yield: /* Uncaught [o(Exception):"java.lang.Exception: Invoke failed: [c(Class)]->forName((String)o(String)). Cause: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Responsible VM: 1.5.0_08@http://java.sun.com/" at: #-18 java.net.URLClassLoader$1.run(URLClassLoader.java:200) #-17 java.security.AccessController.doPrivileged(Native Method) #-16 java.net.URLClassLoader.findClass(URLClassLoader.java:188) #0 [internal function]: Java->__call('forName', Array) #1 /var/www/java.php(33): Java->forName('com.mysql.jdbc....') #2 {main}] thrown in <b>/var/www/java.php */ // $javaclass = new Java('java.lang.Class'); // $javaclass->forName('com.mysql.jdbc.Driver'); // The following to lines also produce a ClassNotFoundExeption: // $javaclass = new Java('php.java.bridge.SimpleJavaBridgeClassLoader'); // $javaclass->forName('com.mysql.jdbc.Driver'); $drivermanager = new JavaClass('java.sql.DriverManager'); $conn = $drivermanager->getConnection("jdbc:mysql://localhost/mv-hett", 'user', 'pwd'); [...] ################## Error message of the "getConnection" line in browser: Fatal error</b>: Uncaught [o(Exception):"java.lang.Exception: Invoke failed: [c(DriverManager)]->getConnection((String)o(String), (String)o(String), (String)o(String)). Cause: java.sql.SQLException: No suitable driver Responsible VM: 1.5.0_08@http://java.sun.com/" at: #-11 java.sql.DriverManager.getConnection(DriverManager.java:545) #-10 java.sql.DriverManager.getConnection(DriverManager.java:171) #-9 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) #0 [internal function]: Java->__call('getConnection', Array) #1 /var/www/java.php(42): JavaClass->getConnection('jdbc:mysql://lo...', 'user', 'pwd') #2 {main}] thrown in <b>/var/www/java.php</b> ################## Standalone Java-Code that does the same works without problems: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class mv { public static void main(String[] args) throws ClassNotFoundException, SQLException { Connection conn; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/mv-hett", "user", "pwd"); [...] --- It is compiled using: declare mysqllib=/usr/share/java/mysql.jar javac -classpath $CLASSPATH:$mysqllib:. projects/test/mv.java ################## test.php - Output: java.runtime.name -> Java(TM) 2 Runtime Environment, Standard Edition sun.boot.library.path -> /usr/lib/j2sdk1.5-sun/jre/lib/i386 java.vm.version -> 1.5.0_08-b03 java.vm.vendor -> Sun Microsystems Inc. java.vendor.url -> http://java.sun.com/ path.separator -> : java.vm.name -> Java HotSpot(TM) Client VM file.encoding.pkg -> sun.io user.country -> US sun.os.patch.level -> unknown java.vm.specification.name -> Java Virtual Machine Specification user.dir -> / java.runtime.version -> 1.5.0_08-b03 java.awt.graphicsenv -> sun.awt.X11GraphicsEnvironment java.endorsed.dirs -> /usr/lib/j2sdk1.5-sun/jre/lib/endorsed os.arch -> i386 java.io.tmpdir -> /tmp line.separator -> java.vm.specification.vendor -> Sun Microsystems Inc. os.name -> Linux sun.jnu.encoding -> ANSI_X3.4-1968 java.library.path -> /usr/lib/j2sdk1.5-sun/jre/lib/i386/client:/usr/lib/j2sdk1.5-sun/jre/lib/i386:/usr/lib/j2sdk1.5-sun/jre/../lib/i386 java.specification.name -> Java Platform API Specification java.class.version -> 49.0 sun.management.compiler -> HotSpot Client Compiler os.version -> 2.6.16-2-vserver-686 user.home -> /root user.timezone -> Zulu jdbc.drivers -> com.mysql.jdbc.Driver java.awt.printerjob -> sun.print.PSPrinterJob file.encoding -> ANSI_X3.4-1968 java.specification.version -> 1.5 java.class.path -> /usr/lib/php5/20051025/JavaBridge.jar user.name -> root java.vm.specification.version -> 1.0 java.home -> /usr/lib/j2sdk1.5-sun/jre sun.arch.data.model -> 32 user.language -> en java.specification.vendor -> Sun Microsystems Inc. java.vm.info -> mixed mode, sharing java.version -> 1.5.0_08 java.ext.dirs -> /usr/lib/j2sdk1.5-sun/jre/lib/ext:/usr/share/java/ext:/usr/java/packages/lib/ext sun.boot.class.path -> /usr/lib/j2sdk1.5-sun/jre/lib/rt.jar:/usr/lib/j2sdk1.5-sun/jre/lib/i18n.jar:/usr/lib/j2sdk1.5-sun/jre/lib/sunrsasign.jar:/usr/lib/j2sdk1.5-sun/jre/lib/jsse.jar:/usr/lib/j2sdk1.5-sun/jre/lib/jce.jar:/usr/lib/j2sdk1.5-sun/jre/lib/charsets.jar:/usr/lib/j2sdk1.5-sun/jre/classes java.vendor -> Sun Microsystems Inc. file.separator -> / java.vendor.url.bug -> http://java.sun.com/cgi-bin/bugreport.cgi sun.io.unicode.encoding -> UnicodeLittle sun.cpu.endian -> little sun.cpu.isalist -> JavaBridge back-end version: 3.1.7 ################## php.ini Adding the mysql.jar to the classpath in php.ini did not help. [java] java.hosts = 127.0.0.1:9676 java.servlet = Off java.classpath=/usr/lib/php5/20051025/JavaBridge.jar:/usr/share/java/mysql.jar ################## The backend is running standalone, "ps aux" yields the line: /usr/bin/java -classpath .:/usr/share/java/mysql.jar -Djdbc.drivers=com.mysql.jdbc.Driver -jar /usr/lib/php5/20051025/JavaBridge.jar INET_LOCAL:9676 After it did not work I added the classpath-info and the -Djdbc.drivers. It did not help either. |
From: <php...@li...> - 2006-09-22 15:37:55
|
Hi, please copy the mysql.jar and the other jars it depends on to java.ext.dirs and re-start the bridge back-end. This will solve this problem immediately. I will look at this problem. > I always get the message "java.sql.SQLException: No > suitable driver > Responsible" or class not found errors. > > The problem occurs when I try to convert the java > code > Class.forName("com.mysql.jdbc.Driver"); > and the "getConnection" into corresponding php-code. > > Please see the code snippets and the provided system > information for > details. > > I have tried several ours to solve the problem. So > any help would be > desperately appreciated... Any ideas? > > > ################## > Part of the php-Script with some comments: > > <?php > java_require('file:///usr/share/java/mysql.jar'); > // I also tried to put the jar into the same > directory than the > script without effect: > // java_require('file:///var/www/mysql.jar'); > > $conn = new Java('java.sql.Connection'); > > // The following is working without errors. So > the class must be > there, I suppose... > $mysql = new javaClass('com.mysql.jdbc.Driver'); > $mysqlinst = $mysql->newInstance(); > > // The following two code lines yield: > /* Uncaught > [o(Exception):"java.lang.Exception: Invoke > failed: > [c(Class)]->forName((String)o(String)). Cause: > java.lang.ClassNotFoundException: > com.mysql.jdbc.Driver Responsible VM: > 1.5.0_08@http://java.sun.com/" at: > #-18 > java.net.URLClassLoader$1.run(URLClassLoader.java:200) > #-17 > java.security.AccessController.doPrivileged(Native > Method) > #-16 > java.net.URLClassLoader.findClass(URLClassLoader.java:188) > #0 [internal function]: Java->__call('forName', > Array) > #1 /var/www/java.php(33): > Java->forName('com.mysql.jdbc....') > #2 {main}] thrown in <b>/var/www/java.php */ > // $javaclass = new Java('java.lang.Class'); > // $javaclass->forName('com.mysql.jdbc.Driver'); > > // The following to lines also produce a > ClassNotFoundExeption: > // $javaclass = new > Java('php.java.bridge.SimpleJavaBridgeClassLoader'); > // $javaclass->forName('com.mysql.jdbc.Driver'); > > $drivermanager = new > JavaClass('java.sql.DriverManager'); > $conn = > $drivermanager->getConnection("jdbc:mysql://localhost/mv-hett", > 'user', > 'pwd'); > [...] > > ################## > Error message of the "getConnection" line in > browser: > > Fatal error</b>: Uncaught > [o(Exception):"java.lang.Exception: > Invoke failed: > [c(DriverManager)]->getConnection((String)o(String), > > (String)o(String), (String)o(String)). Cause: > java.sql.SQLException: No > suitable driver Responsible VM: > 1.5.0_08@http://java.sun.com/" at: > #-11 > java.sql.DriverManager.getConnection(DriverManager.java:545) > #-10 > java.sql.DriverManager.getConnection(DriverManager.java:171) > #-9 > sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > #0 [internal function]: > Java->__call('getConnection', Array) > #1 /var/www/java.php(42): > JavaClass->getConnection('jdbc:mysql://lo...', > 'user', 'pwd') > #2 {main}] > thrown in <b>/var/www/java.php</b> > > > ################## > Standalone Java-Code that does the same works > without problems: > > import java.sql.Connection; > import java.sql.DriverManager; > import java.sql.SQLException; > > public class mv { > public static void main(String[] args) throws > ClassNotFoundException, > SQLException { > Connection conn; > > Class.forName("com.mysql.jdbc.Driver"); > conn = > DriverManager.getConnection("jdbc:mysql://localhost/mv-hett", > "user", > "pwd"); > [...] > > --- > > It is compiled using: > declare mysqllib=/usr/share/java/mysql.jar > javac -classpath $CLASSPATH:$mysqllib:. > projects/test/mv.java > > > ################## > test.php - Output: > > java.runtime.name -> Java(TM) 2 Runtime Environment, > Standard Edition > sun.boot.library.path -> > /usr/lib/j2sdk1.5-sun/jre/lib/i386 > java.vm.version -> 1.5.0_08-b03 > java.vm.vendor -> Sun Microsystems Inc. > java.vendor.url -> http://java.sun.com/ > path.separator -> : > java.vm.name -> Java HotSpot(TM) Client VM > file.encoding.pkg -> sun.io > user.country -> US > sun.os.patch.level -> unknown > java.vm.specification.name -> Java Virtual Machine > Specification > user.dir -> / > java.runtime.version -> 1.5.0_08-b03 > java.awt.graphicsenv -> > sun.awt.X11GraphicsEnvironment > java.endorsed.dirs -> > /usr/lib/j2sdk1.5-sun/jre/lib/endorsed > os.arch -> i386 > java.io.tmpdir -> /tmp > line.separator -> > java.vm.specification.vendor -> Sun Microsystems > Inc. > os.name -> Linux > sun.jnu.encoding -> ANSI_X3.4-1968 > java.library.path -> > /usr/lib/j2sdk1.5-sun/jre/lib/i386/client:/usr/lib/j2sdk1.5-sun/jre/lib/i386:/usr/lib/j2sdk1.5-sun/jre/../lib/i386 > java.specification.name -> Java Platform API > Specification > java.class.version -> 49.0 > sun.management.compiler -> HotSpot Client Compiler > os.version -> 2.6.16-2-vserver-686 > user.home -> /root > user.timezone -> Zulu > jdbc.drivers -> com.mysql.jdbc.Driver > java.awt.printerjob -> sun.print.PSPrinterJob > file.encoding -> ANSI_X3.4-1968 > java.specification.version -> 1.5 > java.class.path -> > /usr/lib/php5/20051025/JavaBridge.jar > user.name -> root > java.vm.specification.version -> 1.0 > java.home -> /usr/lib/j2sdk1.5-sun/jre > sun.arch.data.model -> 32 > user.language -> en > java.specification.vendor -> Sun Microsystems Inc. > java.vm.info -> mixed mode, sharing > java.version -> 1.5.0_08 > java.ext.dirs -> > /usr/lib/j2sdk1.5-sun/jre/lib/ext:/usr/share/java/ext:/usr/java/packages/lib/ext > sun.boot.class.path -> > /usr/lib/j2sdk1.5-sun/jre/lib/rt.jar:/usr/lib/j2sdk1.5-sun/jre/lib/i18n.jar:/usr/lib/j2sdk1.5-sun/jre/lib/sunrsasign.jar:/usr/lib/j2sdk1.5-sun/jre/lib/jsse.jar:/usr/lib/j2sdk1.5-sun/jre/lib/jce.jar:/usr/lib/j2sdk1.5-sun/jre/lib/charsets.jar:/usr/lib/j2sdk1.5-sun/jre/classes > java.vendor -> Sun Microsystems Inc. > file.separator -> / > java.vendor.url.bug -> > http://java.sun.com/cgi-bin/bugreport.cgi > sun.io.unicode.encoding -> UnicodeLittle > sun.cpu.endian -> little > === message truncated === ___________________________________________________________ Der frühe Vogel fängt den Wurm. Hier gelangen Sie zum neuen Yahoo! Mail: http://mail.yahoo.de |
From: <php...@li...> - 2006-10-06 16:44:08
|
Hi, please excuse the delay. > > The problem occurs when I try to convert the java > > code > > Class.forName("com.mysql.jdbc.Driver"); > > and the "getConnection" into corresponding > php-code. > > Class.forName("name") loads name from the bootstrap classloader, so java_require() has no effect. -- One could expect that some default class loader, for example the class loader from the current Thread context is used. But in many areas Java simply doesn't work as one would expect. Please either use Class.forName with an explicit classLoader argument (you can obtain the current class loader from the current Thread) or simple use: new Java("name); instead. Btw: Your .ini entry java.classpath=foo.jar;bar.jar probably didn't work because the above semi-colon starts an one-line comment. Regards, Jost Boekemeier ___________________________________________________________ Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de |