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