Jython

robertbachmann 1,209 views 18 slides Nov 17, 2013
Slide 1
Slide 1 of 18
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18

About This Presentation

http://jsug.at/wiki/Meeting_49


Slide Content

.
.
. . . . .
Jython
PythonontheJVM
RobertBachmann
JSUGMeeting#49
1

Outline
•UseCases
•Limitations
•Usage&javax.script/JSR223
•A(short)casestudy
2

Python?
•Scriptinglanguage
•Dynamicallytyped
•Standardinterpreter: (C)Python
3

A broader view…
•JRuby(RubyontheJVM)
•Groovy(nativeJVMlanguage)
•CLR:IronPython&IronRuby
4

Use cases
•Re-useofJavalibraries
•Re-useofJavainfrastructure
•AddingscriptingabilitiestoaJavasoftware
•Prototyping
•Testscripting
•Performanceimprovementsw.r.t(C)Python
5

Limitations
•NotaJavareplacement(cf. Scala)
•Nocurrentcompiler
•CannotusePythonmoduleswithCcode
•Jythonlagsbehind(C)Python&IronPython
IJython: 2.5.3stable/2.7a2alpha
I(C)Python: 2.7stable
IIronPython: 2.7stable
•PerformanceworsethanJava
6

Usage
•“HelloWorld”withJython
•UsingJavafromJython
•UsingJythonwithjavax.script
•UsingJythonfromJava
•Deploymentoptions
7

Hello World
# program.py
print”Hello␣World”
$ jython program.py
Hello World
8

Hello World with classes and modules
### demo.py
classHello:
defgreet(self, name):
print”Hello␣”+ name
### program.py
fromdemoimportHello
h = Hello()
h.greet(”JSUG”)
# or:
importdemo
h = demo.Hello()
h.greet(”JSUG”)
9

Using Java from Jython – Example
# Hello World with Swing
fromjavax.swingimportJOptionPane
JOptionPane.showMessageDialog(None, ”Hello!”)
10

Using Java from Jython – Notes
•Jythonclassescan
IimplementJavainterfaces
IextendJavaclasses
•Classpath
Iimportusesclasspathviasys.path
IAddJARsviasys.path.append()
11

javax.script
•JSR223: ScriptingfortheJavaTMPlatform
•APIforusingscriptinglanguageswithJava
•Centralclass: ScriptEngine
12

javax.script
ScriptEngineManager factory =
newScriptEngineManager();
ScriptEngine engine =
factory.getEngineByName( ”python”);
engine.eval(”print␣’Hello,␣World’”);
engine.put(”x”, 10)
engine.eval(”y␣=␣x␣*␣2”);
Object y = engine.get( ”y”)
System.out.println(y)
13

Using Jython classes from Java
•Steps:
IDerivefromJavaclass/interface
IUseJythonInterpertertocreatean
instance
ICalltheinstance’s__tojava__method
•Completesolution:
http://www.jython.org/jythonbook/en/1.0/
JythonAndJavaIntegration.html
14

Deployment options
•ServletContaier
Iorg.python.util.PyServlet
IWSGIviamodjy
•Standalone.jar
15

Case study
•Scenario: AClibrarywithJavaand.Net
wrappers
•Challenge: Automatedtestingofalllibraries
•Solution: Single-sourcetestautomation
withJython/IronPython
16

Questions?
17

Thanks
Twitter@robertbachmann
Emailrb@ — .at
18
Tags