ModjyIndex » History » Version 1

Version 1/9 - Next ยป - Current version
Alan Kennedy, 2009-03-15 09:01 PM


A WSGI server for jython

Introduction to modjy

Python Web Server Gateway Interface, as specified in PEP-333, 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. Which means that

  1. Jython WSGI applications run inside a Java/J2EE servlet container, e.g. Apache Tomcat
  2. Incoming requests are handled by the servlet container
  3. The container is configured to route requests to the modjy servlet
  4. The modjy servlet creates an embedded jython interpreter inside the servlet container, and loads a configured jython web application, e.g. Django, the web framework for perfectionists with deadlines.
  5. The modjy servlet delegates the requests to the configured WSGI application or framework.
  6. The WSGI response is routed back to the client through the servlet container.

For further information about WSGI, see wsgi.org. For a detailed specification of WSGI see PEP-333: Python Web Server Gateway Interface, version 1.0.

How to use modjy

  1. See the download page to find out how to get hold of modjy.
  2. See the install page to read about installing modjy
  3. See the configuration page to read about the various configuration options available to you for configuring modjy
  4. See the loading applications page to find out about the different mechanisms that modjy can use to locate and load WSGI callable objects
  5. See the WSGI page for a discussion of how modjy complies with the WSGI standard.

License: Apache License Version 2.0

Modjy is released under the Apache License Version 2.0

The full text of the licence, including all terms and conditions, is included in the "Download":download.html.

A structural overview of modjy

Architecture

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.

Code structure

The principal jython class for implementation of modjy is the modjy_servlet class. This class uses mixins to factor out code by functionality, 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.

Add picture from clipboard (Maximum size: 10 MB)