Travis,
When you say "context" do you mean an object that defines the Context interface, or do you mean a web application?
WILL
----- Original Message ----- From: "Travis Bear" <[EMAIL PROTECTED]>
To: "Velocity Users List" <velocity-user@jakarta.apache.org>
Sent: Tuesday, February 01, 2005 11:23 AM
Subject: Classpath/Classloader issue with java program invoked via Velocitycontext int Tomcat
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]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]