From: Tony S. <tsc...@sa...> - 2009-11-16 21:32:26
|
Hello Jython people. I'm trying to see if I can use Jython to write an ETL script so I can use a Pervasive JDBC driver and avoid writing the script in Java. I'm able to access the driver from Java with Class.forName("com.pervasive.jdbc.v2.Driver"); However, I can't seem to get my Jython script to recognize the driver. ------------------------------------------ from java import * from java.sql import * from java.lang import * Class.forName("com.pervasive.jdbc.v2.Driver").newInstance() -------------------------------------------- Gives me: -------------------------------------------- Traceback (innermost last): File "read_scanmaster.py", line 18, in ? at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:319) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:264) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:186) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: com.pervasive.jdbc.v2.Driver -------------------------------------------- I'm executing the script from the same environment as the Java code that is able to recognize the driver, so I know the CLASSPATH is right. I've also tried setting the CLASSPATH within the Jython script with: -------------------------------------------- import sys sys.path.append('/usr/local/psql/bin/jpscs.jar') sys.path.append('/usr/local/psql/bin/pvjdbc2.jar') sys.path.append('/usr/local/psql/bin/pvjdbc2x.jar') --------------------------------------------- But that doesn't help either. Any tips would be greatly appreciated. Thanks. Tony |
From: Justin D. <jde...@op...> - 2009-11-17 22:49:00
|
As far as I know jdbc drivers can only be loaded from the system classpath, which means not with the syspath class loader. So I believe directly adding the libs to the syspath can't work. Have you tried importing the driver class directly to see if it is indeed on the classpath when jython starts? Tony Schmidt wrote: > > Hello Jython people. > > I'm trying to see if I can use Jython to write an ETL script so I can > use a Pervasive JDBC driver and avoid writing the script in Java. > > I'm able to access the driver from Java with > Class.forName("com.pervasive.jdbc.v2.Driver"); > > However, I can't seem to get my Jython script to recognize the driver. > > ------------------------------------------ > from java import * > from java.sql import * > from java.lang import * > > Class.forName("com.pervasive.jdbc.v2.Driver").newInstance() > -------------------------------------------- > > Gives me: > > -------------------------------------------- > Traceback (innermost last): > File "read_scanmaster.py", line 18, in ? > at java.net.URLClassLoader$1.run(URLClassLoader.java:217) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:205) > at java.lang.ClassLoader.loadClass(ClassLoader.java:319) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) > at java.lang.ClassLoader.loadClass(ClassLoader.java:264) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:186) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:616) > > java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: > com.pervasive.jdbc.v2.Driver > -------------------------------------------- > > I'm executing the script from the same environment as the Java code that > is able to recognize the driver, so I know the CLASSPATH is right. I've > also tried setting the CLASSPATH within the Jython script with: > > -------------------------------------------- > import sys > sys.path.append('/usr/local/psql/bin/jpscs.jar') > sys.path.append('/usr/local/psql/bin/pvjdbc2.jar') > sys.path.append('/usr/local/psql/bin/pvjdbc2x.jar') > --------------------------------------------- > > But that doesn't help either. > > Any tips would be greatly appreciated. > > Thanks. > > Tony > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users -- Justin Deoliveira OpenGeo - http://opengeo.org Enterprise support for open source geospatial. |
From: Tony S. <tsc...@sa...> - 2009-11-18 02:00:57
|
Thanks for your reply, Justin. This looks like it's working if I specify the CLASSPATH by calling the jython.jar from java, like so: java -classpath /usr/local/psql/bin/pvjdbc2.jar:/usr/local/psql/bin/pvjdbc2x.jar:/usr/lo cal/psql/bin/jpscs.jar:/usr/share/java/jython.jar:/usr/share/java/oro.ja r:/usr/share/java/servlet.jar:/usr/lib/libreadline-java/libreadline-java .jar org.python.util.jython read_scanmaster.py Seems odd. I wonder why setting CLASSPATH in my shell environment didn't do anything. I thought Jython was supposed to append that to java.class.path. -----Original Message----- From: Justin Deoliveira [mailto:jde...@op...] Sent: Tuesday, November 17, 2009 2:49 PM To: Tony Schmidt Cc: jyt...@li.... Subject: Re: [Jython-users] Jython not finding JDBC driver class As far as I know jdbc drivers can only be loaded from the system classpath, which means not with the syspath class loader. So I believe directly adding the libs to the syspath can't work. Have you tried importing the driver class directly to see if it is indeed on the classpath when jython starts? Tony Schmidt wrote: > > Hello Jython people. > > I'm trying to see if I can use Jython to write an ETL script so I can > use a Pervasive JDBC driver and avoid writing the script in Java. > > I'm able to access the driver from Java with > Class.forName("com.pervasive.jdbc.v2.Driver"); > > However, I can't seem to get my Jython script to recognize the driver. > > ------------------------------------------ > from java import * > from java.sql import * > from java.lang import * > > Class.forName("com.pervasive.jdbc.v2.Driver").newInstance() > -------------------------------------------- > > Gives me: > > -------------------------------------------- > Traceback (innermost last): > File "read_scanmaster.py", line 18, in ? > at java.net.URLClassLoader$1.run(URLClassLoader.java:217) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:205) > at java.lang.ClassLoader.loadClass(ClassLoader.java:319) > at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) > at java.lang.ClassLoader.loadClass(ClassLoader.java:264) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:186) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:43) > at java.lang.reflect.Method.invoke(Method.java:616) > > java.lang.ClassNotFoundException: java.lang.ClassNotFoundException: > com.pervasive.jdbc.v2.Driver > -------------------------------------------- > > I'm executing the script from the same environment as the Java code that > is able to recognize the driver, so I know the CLASSPATH is right. I've > also tried setting the CLASSPATH within the Jython script with: > > -------------------------------------------- > import sys > sys.path.append('/usr/local/psql/bin/jpscs.jar') > sys.path.append('/usr/local/psql/bin/pvjdbc2.jar') > sys.path.append('/usr/local/psql/bin/pvjdbc2x.jar') > --------------------------------------------- > > But that doesn't help either. > > Any tips would be greatly appreciated. > > Thanks. > > Tony > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------ ------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users -- Justin Deoliveira OpenGeo - http://opengeo.org Enterprise support for open source geospatial. |