Running jython WSGI applications on Google AppEngine, with modjy.¶
Now that Google has added Java/JVM support to their AppEngine , it is now possible to run other JVM languages on it as well, including our favourite language Jython .
Modjy is the jython WSGI -> servlets gateway, used to bridge jython WSGI applications to running inside java servlet containers. And Google AppEngine is arguably one of the largest-scale servlet containers there is. And modjy can run applications on AppEngine. In order to do so, follow these steps. We contributed modjy to jython a few months back .
Follow this link to see the modjy demo application running on Google AppEngine
Get a jython.jar suitable for running on AppEngine.¶
Ever since the patches provided by google to make jython run on Google Appengine were applied to jython 2.5 at revision 6252 , the jython.jar supplied with the jython 2.5 distribution should run unmodified on Google Appengine.
So you should use the jython.jar from the latest version of jython , which at the time of writing is Release Candidate 4, which will probably become the final jython 2.5.0 release.
Making the jython library accessible.¶
A limitation of Google's AppEngine is that you can only upload a limit of 1,000 files for any given web application. A lot of the code for modjy resides in the Lib/modjy directory of the jython distribution. The Lib directory is pretty big, and so exceeds the file limit.
The easiest way to get around this is to upload the Library in a zip file. Simply make a zip file of the contents of the Lib directory within the directory itself, i.e. the paths inside the zip file should not start with *Lib/. (You can download such a zip file below if you're concerned about getting it wrong).
Lastly, you have to add a .pth file which refers to your newly created lib.zip. It doesn't matter what that file is called, as long as it ends in .pth. So make a simple one line text file called all.pth, and put the text "lib.zip" on that one line.
Place both the all.pth and the lib.zip file in the WEB-INF/lib-python directory of your web application, and you're good to go!
Appengine application descriptor¶
When uploading applications to AppEngine, you also need to provide an Application Descriptor , stored in a file called appengine-web.xml. The file must reside in the web archive directory, inside WEB-INF, i.e. at the same level as the standard servlet web.xml file.
Here is the file that we use for the modjy demo application.
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>jywsgi</application> <version>5</version> </appengine-web-app>
Downloading the complete finished product.¶
We have provided a complete version of the modjy demo application for Google AppEngine for you to download. (This version is derived from jython 2.5RC4)
Don't forget that you have to get a copy of the latest jython.jar and place it into the WEB-INF/lib directory.
You will also have to place the AppEngine runtime api jar file in the WEB-INF/lib directory as well. It is located in the lib/user directory of the AppEngine SDK download .
Deploying to Google AppEngine.¶
To deploy the application, issue the following command
$APP_ENGINE_SDK_HOME/bin/appcfg update modjy_webapp
And you should be up and running.