Message5232
I'm finding unusual behaviour running a jython servlet on Tomcat 6.
The bizarre thing is that the behaviour only occurs when Tomcat is run
as a Windows service. It does NOT occur when Tomcat 6 is run from the
command line.
This problem was originally seen by a user running modjy, but I've
written a minimal servlet which recreates the problem without modjy. See
attached source file.
When the jython servlet has an __init__ method, i.e. like so
class jyServlet(HttpServlet):
def __init__(self):
HttpServlet.__init__(self)
def service(self, request, response):
response.getWriter().write('Hello World!')
then the servlet crashes on Tomcat 6 with the following stacktrace
Traceback (most recent call last):
File "<string>", line 4, in __init__
RuntimeError: maximum recursion depth exceeded
org.python.core.PyException.fillInStackTrace(PyException.java:70)
java.lang.Throwable.<init>(Throwable.java:181)
java.lang.Exception.<init>(Exception.java:29)
java.lang.RuntimeException.<init>(RuntimeException.java:32)
org.python.core.PyException.<init>(PyException.java:46)
org.python.core.PyException.<init>(PyException.java:43)
org.python.core.PyException.<init>(PyException.java:61)
org.python.core.Py.RuntimeError(Py.java:124)
org.python.core.Py.JavaError(Py.java:450)
org.python.core.PyTableCode.call(PyTableCode.java:168)
org.python.core.PyBaseCode.call(PyBaseCode.java:297)
org.python.core.PyBaseCode.call(PyBaseCode.java:191)
org.python.core.PyFunction.__call__(PyFunction.java:385)
org.python.core.PyMethod.__call__(PyMethod.java:215)
org.python.core.PyMethod.instancemethod___call__(PyMethod.java:221)
org.python.core.PyMethod.__call__(PyMethod.java:206)
org.python.core.PyObjectDerived.dispatch__init__(PyObjectDerived.java:1097)
org.python.core.PyType.invoke_new_(PyType.java:444)
org.python.core.PyType.type___call__(PyType.java:1397)
org.python.core.PyType.__call__(PyType.java:1388)
org.python.core.PyObject.__call__(PyObject.java:381)
JythonServlet.init(JythonServlet.java:38)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574)
org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527)
java.lang.Thread.run(Thread.java:619)
When the __init__ method is dropped, i.e. it is defined like so
class jyServlet(HttpServlet):
def service(self, request, response):
response.getWriter().write('Hello World!')
Then a different problem occurs: here is the traceback (with > 1000
lines snipped for brevity)
java.lang.StackOverflowError
java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)
org.python.core.PyStringMap.__finditem__(PyStringMap.java:55)
org.python.core.PyType.lookup_where(PyType.java:1059)
org.python.core.PyType.lookup(PyType.java:1048)
org.python.core.PyReflectedConstructor.__call__(PyReflectedConstructor.java:93)
[> 1000 identical lines snipped]
org.python.core.PyReflectedConstructor.__call__(PyReflectedConstructor.java:93) |
|
Date |
User |
Action |
Args |
2009-10-19 15:08:51 | amak | set | recipients:
+ amak |
2009-10-19 15:08:50 | amak | set | messageid: <1255964930.92.0.613890276404.issue1489@psf.upfronthosting.co.za> |
2009-10-19 15:08:50 | amak | link | issue1489 messages |
2009-10-19 15:08:48 | amak | create | |
|