jython 2.7 and techniques for integrating with java - frank wierzbicki
DESCRIPTION
Jython 2.7 is scheduled to release by July 15. Frank will talk about the new features for Jython 2.7 and plans for Jython 3.x. He will also spend some time talking about techniques for integrating Jython with Java. Jython 2.7 release is sponsored by AdconionTRANSCRIPT
![Page 1: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/1.jpg)
Jython 2.7 UpdateFrank Wierzbicki
Wednesday, May 9, 2012
![Page 2: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/2.jpg)
Why use Jython?
• Massive amounts of Java code out there
• Some really useful Java libs
• Great JVM ecosystem
• But we’d all rather be writing Python code, right?
Wednesday, May 9, 2012
![Page 3: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/3.jpg)
Status
• Jython 2.7 is progresing well
• bytearray and io are the last missing big features
• 2.7 Unit test compliance
• 684 failing tests out of 10786 (~6%)
• Most of these are due to bytearray/io
Wednesday, May 9, 2012
![Page 4: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/4.jpg)
Dates
• Jython 2.7 work is being sponsored by Adconion. (Thanks!)
• Jython 2.7 alpha should be out this month
• The target for a production release is July 15 - which happens to be the final day of my contract to get Jython to 2.7 :)
Wednesday, May 9, 2012
![Page 5: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/5.jpg)
Why is Adconion sponsoring Jython?• Adconion is a hybrid Java/Python shop
based out of LA
• They use Python version 2.7 and Jython 2.5
• They have internal Django apps that access Java libraries
• The 2.5/2.7 differences are a pain
• They’d like to give back to the community
Wednesday, May 9, 2012
![Page 6: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/6.jpg)
Collaborators
• Major apps
• Implementations - CPython, PyPy
• Other Java dynamic languages - JRuby
• Tooling support
• Java Virtual Machine development
• Academic research - gradual typing
Wednesday, May 9, 2012
![Page 7: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/7.jpg)
Features
• Abstract Base Classes
• Bytearray
• __format__
• OrderedDict
• lots of Lib updates
• See CPython 2.6/2.7 what’s new for more
Wednesday, May 9, 2012
![Page 8: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/8.jpg)
Not in Jython 2.7
• multiprocessing
• buffer (so far never has been in Jython)
• memoryview (though there is a start, we’ll see)
Wednesday, May 9, 2012
![Page 9: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/9.jpg)
Java Platform
• Starting to (optionally) use invokedynamic
• Everything is compiled to Java Bytecode
• Use a choice of Java garbage collectors
• Always uses Java native threads
• All cores are used
java.util.concurrentnot interpretedno GIL
-J for setting options like one of 20 or so GCsheap sizeetc
Wednesday, May 9, 2012
![Page 10: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/10.jpg)
Java Integration
• Jython integrates well with Java
• Jython makes calling into Java look like standard Python code
• Java classes and interfaces can be subclassed from Jython
Wednesday, May 9, 2012
![Page 11: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/11.jpg)
builtin Java interfaces
• Jython’s list implements Java List<Object>
• Jython’s dict implements Map and ConcurrentMap
• Jython’s set implements Java Set
Wednesday, May 9, 2012
![Page 12: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/12.jpg)
//Java interfacepackage org.acme;
public interface MyInterface { public List strList();}
#From Python in file “acme.py”from org.acme import MyInterface
class pyobject(MyInterface): def strList(self): return [‘a’, ‘b’, ‘c’]
//From JavaPythonInterpreter interpreter = new PythonInterpreter ();interpreter.exec ("from acme import pyobject");MyInterface pythonObject = interpreter.get ("pyobject");
List pywords = pythonObject.strList()for (Object o : pyList){ String string = ((PyObject)o).__toJava__(String.class); //Do something with the now Java native strings.}
Wednesday, May 9, 2012
![Page 13: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/13.jpg)
PlyJy
• For a more sophisticated approach to calling into Python code from Java in Jython see the PlyJy project
Wednesday, May 9, 2012
![Page 14: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/14.jpg)
import org.plyjy.factory.JythonObjectFactory; JythonObjectFactory factory = JythonObjectFactory.getInstance();MyInterface pythonObject = (MyInterface) factory.createObject( MyInterface.class, "acme.pyobject");
Wednesday, May 9, 2012
![Page 15: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/15.jpg)
Jython package cache
[frank jython]$ ./dist/bin/jython*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/jython-dev.jar'*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/javalib/antlr-2.7.7.jar'*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/javalib/antlr-3.1.3.jar'*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/javalib/antlr-runtime-3.1.3.jar'*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/javalib/asm-4.0.jar'*sys-package-mgr*: processing new jar, '/home/frank/hg/jython/jython/dist/javalib/asm-commons-4.0.jar'
...
Wednesday, May 9, 2012
![Page 16: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/16.jpg)
Java package cache
• Goes through all jars and classes and figures out Java package contents
• enables “from java.foo import *”
• Java does not have a package.getClasses()
• If cache is disabled “from java import *” will not work from Jython
• * import for pure python still works
Wednesday, May 9, 2012
![Page 17: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/17.jpg)
zxJDBC
• zxJDBC implements DB-API
• integrated into Jython’s core
• A crucial piece for SQLAlchemy, Pyramid and Django support.
Wednesday, May 9, 2012
![Page 18: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/18.jpg)
Modjy
• Modjy implements WSGI for Jython
• Acts as a bridge to Java Servlets
• integrated into Jython’s core
• Pyramid and Django support
Wednesday, May 9, 2012
![Page 19: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/19.jpg)
Working apps
• SQLAlchemy
• Pyramid, DJango
• setuptools, ez_install, distribute
• virtualenv
• pip
• many more pure python apps
Wednesday, May 9, 2012
![Page 20: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/20.jpg)
ez_install
• Get ez_setup.py
• run “jython ez_setup.py”
• In Jython’s bin directory will be an ez_install that runs from Jython
Wednesday, May 9, 2012
![Page 21: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/21.jpg)
Install Django
• Get 1.3+ Django - run “jython setup.py install”
• From http://django-jython.googlecode.com get django-jython-1.3.tar.gz, untar it and run “jython setup.py install”
• see the django-jython project on googlecode.com for more detail
Wednesday, May 9, 2012
![Page 22: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/22.jpg)
Deploy Django
• run “jython manage.py war --include-java-libs=jdbcdriver.jar”
• This will produce a “war file”
• Copy this war file to the auto-deploy directory for most application servers (like Tomcat, Jetty or Glassfish)
Wednesday, May 9, 2012
![Page 23: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/23.jpg)
war format for doj|-- WEB-INF
| |-- lib | `-- lib-python | |-- Lib | |-- django | |-- doj | `-- mysite `-- media
Wednesday, May 9, 2012
![Page 24: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/24.jpg)
Pyramid on Jython
• jython ez_install pyramid
• Note that you should not try to use Chameleon with Jython - use Mako for templates.
Wednesday, May 9, 2012
![Page 25: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/25.jpg)
Creating an executable Jar
• Make a copy of jython.jar
• copy Lib/ into jython.jar
• copy a __run__.py file into new jar
• in the future it will be a __main__.py to fit with the new CPython convention as of 2.6/3.0
Wednesday, May 9, 2012
![Page 26: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/26.jpg)
Add Jython install stuff to a new jar
$ cd $JYTHON_HOME$ cp jython.jar app.jar$ zip -r app.jar Lib
Wednesday, May 9, 2012
![Page 27: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/27.jpg)
Add modules and paths to the jar file
$ cd $MY_APP_DIRECTORY$ zip app.jar *.py# Add path to additional jar file.$ jar ufm myapp.jar othermanifest.mf#Where, othermanifest.mf contains the following:Class-Path: ./otherjar.jar
Wednesday, May 9, 2012
![Page 28: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/28.jpg)
Add runner file, and run!
$ zip myapp.jar __run__.py#in 2.7/3.x$ zip myapp.jar __main__.py$ java org.python.util.jython -jar app.jar
Wednesday, May 9, 2012
![Page 29: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/29.jpg)
Jython 3000
• We already have a Jython 3 branch
• It has a nearly complete parser
• Not much else yet
• Can’t wait to delete old style classes and fake str suppot!
• I’d like to target 3.3 and support only JDK7 or above (maybe even JDK8 if it takes long)
Wednesday, May 9, 2012
![Page 30: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/30.jpg)
Jython 3 changes?
• All of the same changes as Python3
• unicode for all strings
• no old style classes
• new metaclass syntax
• many iterators instead of lists
• much more
Wednesday, May 9, 2012
![Page 31: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/31.jpg)
Jython specific changes
• Better way to call into Jython? Project Lambda maybe?
• Default to not scan packages?
• Get rid of swing specific helper functions
• Remove Lib gunk
Wednesday, May 9, 2012
![Page 32: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/32.jpg)
Jython/CPython collaboration
• Break out the CPython standard Lib into a shared Lib - merge all of Jython’s customizations into CPython Lib
• Share CPython’s 3.3 import implementation
• PEP 420 implicit namespace packages for Java packages
Wednesday, May 9, 2012
![Page 33: Jython 2.7 and techniques for integrating with Java - Frank Wierzbicki](https://reader033.vdocuments.site/reader033/viewer/2022060110/555a66e7d8b42ae7218b4b74/html5/thumbnails/33.jpg)
Where to Find Out More
• http://www.jython.org
• http://wiki.python.org/jython
• http://fwierzbicki.blogspot.com
• Twitter: fwierzbicki
Wednesday, May 9, 2012