ModjyIndex » History » Version 1
Alan Kennedy, 2009-03-15 09:01 PM
h1. A WSGI server for jython
h2(#intro). Introduction to modjy
Python *Web Server Gateway Interface*, as specified in "PEP-333":http://www.python.org/dev/peps/pep-0333/, is a ??simple and universal interface between web servers and [python] web applications or frameworks??.
Modjy is an implementation of a WSGI compliant gateway/server for jython, built on "Java/J2EE servlets":http://java.sun.com/products/servlet/. Which means that
# Jython WSGI applications run inside a Java/J2EE servlet container, e.g. "Apache Tomcat":http://tomcat.apache.org/
# Incoming requests are handled by the servlet container
# The container is configured to route requests to the modjy servlet
# The modjy servlet creates an embedded jython interpreter inside the servlet container, and loads a configured jython web application, e.g. "Django":http://www.djangoproject.com/, ??the web framework for perfectionists with deadlines??.
# The modjy servlet delegates the requests to the configured WSGI application or framework.
# The WSGI response is routed back to the client through the servlet container.
For further information about WSGI, see "wsgi.org":http://wsgi.org. For a detailed specification of WSGI see "PEP-333: Python Web Server Gateway Interface, version 1.0":http://www.python.org/dev/peps/pep-0333/.
h2(#toc). How to use modjy
# See the [[ModjyDownload|download]] page to find out how to get hold of modjy.
# See the [[ModjyInstall|install]] page to read about installing modjy
# See the [[ModjyConfiguration|configuration]] page to read about the various configuration options available to you for configuring modjy
# See the [[ModjyLocateCallables|loading applications]] page to find out about the different mechanisms that modjy can use to locate and load WSGI callable objects
# See the [[ModjyWSGI|WSGI]] page for a discussion of how modjy complies with the WSGI standard.
h2(#license). License: Apache License Version 2.0
Modjy is released under the "Apache License Version 2.0":http://www.apache.org/licenses/LICENSE-2.0.html
The full text of the licence, including all terms and conditions, is included in the "Download":download.html.
h2(#structural_overview). A structural overview of modjy
The architecture of modjy is very simple, from a J2EE point of view. It consists of a single java servlet class, which is a thin wrapper around the required jython functionality. Since the java servlet is multithreaded, only one instance of it will ever run in a given container (unless configured otherwise). This java servlet also initializes the jython runtime, setting some necessary parameters beforehand.
The java servlet then creates a single instance of the jython-implemented *modjy_servlet* class, to which all incoming HTTP requests are delegated. Depending on configuration, modjy_servlet creates 1 or more instances of the jython WSGI application object, as described in "How modjy locates application callable objects":ModjyLocateCallables. It then creates WSGI environment and start_response_callable objects, and invokes the application.
More details on how to configure modjy to use single vs. multi threading, etc, see the "Configuration reference":params.html.
h3. Code structure
The principal jython class for implementation of modjy is the *modjy_servlet* class. This class uses "mixins":http://en.wikipedia.org/wiki/Mixin to "factor out code by functionality":http://www.linuxjournal.com/article/4540, so that the structure can be more easily evolved, components replaced, etc.
Modjy has been updated to work on jython 2.5 and jython 2.2, and will no longer run on jython 2.1.