I'm really puzzled by an issue I'm seeing when I invoke an external
object's main method from inside the Velocity context.  All my code is
running as a webapp inside Tomcat.  The external object is a Jython
script compiled into a java class via jythonc.  This class is put into a
jar file and placed in $CATALINA_HOME/webapps/$WEBAPP_NAME/WEB-INF/lib.

When I invoke the Jython script from inside Tomcat, it breaks because it
can't locate any of the packages I try to import from.  The puzzling
part is that the context itself is able to import from the same package
that breaks the jython script, and it's running in the same VM.

Here is the Jython script Setup.py:



print "Entering Setup"
from org.jtmb.sql import DataEngine
from java.io import File
propsFile = File("conf/DataEngine.properties")
de = DataEngine.getStaticInstance(propsFile)
print de.getString("select version as name from branch")



Here is the code from the Velocity context where I statically invoke the
jython script:

com.myrio.setup.Setup.main(new String[]{});

Going on the theory that the context must have had a good classloader
because it was able to instantiate the DataEngine, I attempted to load
my class by explicitly using the same classloader:

    ClassLoader loader = this.getClass().getClassLoader();
    Object setup = Class.forName("com.myrio.setup.Setup", true,
loader).newInstance();
    logger.fatal ("Attempting to load setup with custom classloader");
    ((com.myrio.setup.Setup) setup).main(new String[]{});


In both cases, I get the same result.  Here's the output in
catalina.out.

Entering Setup
Traceback (innermost last):
  File "/home/travis/p4/3.5/qa/qas/code/jython/Setup.py", line 0, in
main
ImportError: No module named jtmb



Thanks in advance -- this is my first effort at using classloaders, so I
could easily be missing something.  I'm pretty sure I could get it to
work by manually setting the system classpath via system properties.
But that seems like a pretty broken approach.  Any help is appreciated!


-Travis



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to