ModjyIndex

Version 1 (Alan Kennedy, 03/15/2009 09:01 pm)

1 1
h1. A WSGI server for jython
2 1
3 1
h2(#intro). Introduction to modjy
4 1
5 1
6 1
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??. 
7 1
8 1
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
9 1
10 1
11 1
 # Jython WSGI applications run inside a Java/J2EE servlet container, e.g. "Apache Tomcat":http://tomcat.apache.org/
12 1
 # Incoming requests are handled by the servlet container
13 1
 # The container is configured to route requests to the modjy servlet
14 1
 # 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??.
15 1
 # The modjy servlet delegates the requests to the configured WSGI application or framework.
16 1
 # The WSGI response is routed back to the client through the servlet container.
17 1
18 1
19 1
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/.
20 1
21 1
22 1
23 1
24 1
h2(#toc). How to use modjy
25 1
26 1
27 1
28 1
 # See the [[ModjyDownload|download]] page to find out how to get hold of modjy.
29 1
 # See the [[ModjyInstall|install]] page to read about installing modjy
30 1
 # See the [[ModjyConfiguration|configuration]] page to read about the various configuration options available to you for configuring modjy
31 1
 # See the [[ModjyLocateCallables|loading applications]] page to find out about the different mechanisms that modjy can use to locate and load WSGI callable objects
32 1
 # See the [[ModjyWSGI|WSGI]] page for a discussion of how modjy complies with the WSGI standard.
33 1
34 1
35 1
36 1
h2(#license). License: Apache License Version 2.0
37 1
38 1
39 1
Modjy is released under the "Apache License Version 2.0":http://www.apache.org/licenses/LICENSE-2.0.html
40 1
41 1
The full text of the licence, including all terms and conditions, is included in the "Download":download.html.
42 1
43 1
44 1
45 1
h2(#structural_overview). A structural overview of modjy
46 1
47 1
48 1
49 1
h3. Architecture
50 1
51 1
52 1
53 1
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.
54 1
55 1
56 1
57 1
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.
58 1
59 1
60 1
61 1
More details on how to configure modjy to use single vs. multi threading, etc, see the "Configuration reference":params.html.
62 1
63 1
64 1
65 1
h3. Code structure
66 1
67 1
68 1
69 1
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. 
70 1
71 1
72 1
73 1
Modjy has been updated to work on jython 2.5 and jython 2.2, and will no longer run on jython 2.1.