Using Jython to Speed Development - PowerPoint PPT Presentation

1 / 42
About This Presentation
Title:

Using Jython to Speed Development

Description:

bacon. eggs | JavaOne 2003 | BOF-1069. 1. Using Java in Jython from java.lang import ... non-public fields, methods, and constructors of Java objects. ... – PowerPoint PPT presentation

Number of Views:842
Avg rating:3.0/5.0
Slides: 43
Provided by: chariots
Category:

less

Transcript and Presenter's Notes

Title: Using Jython to Speed Development


1
Using Jython to Speed Development
  • Don Coleman, Aaron Mulder, Tom PurcellChariot
    Solutions

2
Goal
Use Jython to make software development easier.
3
Who are we?
  • We are J2EE Architects
  • We write commercial Java software
  • We use Jython as a tool for developing and
    testing Java software

4
Presentation Agenda
  • About Jython
  • Language Overview
  • Using the Interactive Interpreter
  • Server Side Jython
  • Accessing Databases
  • Accessing EJBs
  • PyServlet
  • Embedded Jython
  • Advanced Jython

5
About Jython
6
What is Jython?
  • Jython is an implementation of the Python
    language that runs on the JVM
  • Jython excels at scripting and is excellent for
    exploring and debugging code
  • Jython's interpreted nature allows you to work
    with Java without a compiler and manipulate live
    objects on the fly
  • Jython gives you the power of Java Python

7
What is Python?
  • Python is a mature language that ...
  • has clear syntax
  • is easy to learn
  • is easy to use
  • is object oriented
  • is powerful

8
Installing Jython
  • Install JDK 1.4
  • Download Jython from http//www.jython.org
  • cd to the directory with jython-21.class
  • Start the installer java -cp . jython-21

9
Sample Code
  • class Greeter
  • def sayHello(self, name None)
  • if name None
  • print "Hello"
  • else
  • print "Hello, s" name
  • def sayGoodbye(self)
  • print "Goodbye"

10
Why would you use Jython?
  • Live interaction with Java for experimentation
  • Testing and debugging
  • Write quick scripts without needing to compile
  • Quick runtime tests
  • BigDecimal("0").equals(BigDecimal("0.00"))
  • Inspecting private variables or methods
  • Rapid development
  • Embedded scripting

11
Interactive Command Line
  • jython
  • gtgtgt print Hello world!
  • Hello world!
  • gtgtgt
  • Use CTRLD to exit on UNIX
  • Use CTRLZ to exit on Windows

12
Language Overview
13
Language Overview
  • supports modules, classes and methods
  • dynamic typing (don't declare variable types)
  • familiar control structures (for, if, while ...)
  • uses for comments
  • built-in collection types (lists, dictionaries)
  • indentation for code blocks not braces
  • no semicolons to indicate end of line
  • omits new keyword (o Object())

14
Variable Assignment and Printing
  • gtgtgt s 17
  • gtgtgt print s
  • 17
  • gtgtgt s JavaOne
  • gtgtgt print s
  • JavaOne
  • gtgtgt

15
Creating a method
  • gtgtgt def add(a,b)
  • ... return a b
  • ...
  • gtgtgt add(4,5)
  • 9
  • gtgtgt

16
Creating a class
  • gtgtgt class Calc
  • ... def add(self, a, b)
  • ... return a b
  • ...
  • gtgtgt c Calc()
  • gtgtgt c.add(4,5)
  • 9
  • gtgtgt

17
Lists
  • Lists are like arrays and ArrayLists
  • gtgtgt l
  • gtgtgt l.append(1)
  • gtgtgt l.append('string')
  • gtgtgt l.append(12.3)
  • gtgtgt print l
  • 1, 'string', 12.3
  • gtgtgt len(l)
  • 3
  • gtgtgt l2
  • 12.3

18
Dictionaries
  • Dictionaries are similar to HashMaps
  • gtgtgt dict
  • gtgtgt dict'color' 'red'
  • gtgtgt dict17 'seventeen'
  • gtgtgt dict
  • 'color''red', 17'seventeen'
  • gtgtgt dict'color'
  • 'red'
  • gtgtgt

19
Loops / Iterators
  • gtgtgt l 'spam','bacon','eggs'
  • gtgtgt for item in l
  • ... print item
  • ...
  • spam
  • bacon
  • eggs
  • gtgtgt

20
Using Java in Jython
  • gtgtgt from java.lang import
  • gtgtgt System.getProperty(user.home)
  • '/home/dcoleman'
  • gtgtgt from java.math import BigDecimal
  • gtgtgt b BigDecimal(17)
  • gtgtgt b
  • 17
  • gtgtgt

21
Jython Modules
  • A module is a collection of jython code
  • May contain, code, methods, classes
  • Import modules import module from module import
    object
  • Run modules like a script
  • jython module.py

22
Inheriting from Java
  • from javax.swing import
  • from java.awt import Color
  • class GreenPanel(JPanel)
  • def __init__(self)
  • self.background Color.green
  • def toString(self)
  • return "GreenPanel"
  • if __name__ "__main__"
  • f Jframe("Green", size(200,200))
  • f.getContentPane().add(GreenPanel())
  • f.show()

23
Server-Side Jython
24
Database Access
  • Can use standard JDBC calls in Jython
  • There's a more pythonic DB API called zxJDBC,
    included with Jython 2.1
  • Use whichever you're comfortable with, though
    zxJDBC is a little more compact

25
JDBC Example
  • from java.lang import
  • from java.sql import
  • Class.forName("org.hsqldb.jdbcDriver")
  • conn DriverManager.getConnection(
    "jdbchsqldbdemo", "sa", "")
  • stmt conn.createStatement()
  • rs stmt.executeQuery("SELECT code, desc FROM
    states")
  • while rs.next()
  • print rs.getString("code"),rs.getString("desc"
    )
  • rs.close()
  • stmt.close()
  • conn.close()

26
zxJDBC Example
  • from com.ziclix.python.sql import zxJDBC
  • from pprint import pprint
  • conn zxJDBC.connect("jdbchsqldbdemo", "sa",
    "", "org.hsqldb.jdbcDriver")
  • cursor conn.cursor()
  • cursor.execute("SELECT code, desc FROM states")
  • data cursor.fetchall()
  • cursor.close()
  • conn.close()
  • pprint(data)

27
A Jython EJB Client
  • Set up the classpath, jndi.properties like
    normal, then...
  • gtgtgt from javax.naming import
  • gtgtgt c InitialContext()
  • gtgtgt home c.lookup("Demo")
  • gtgtgt demo home.create()
  • gtgtgt demo.setFoo("Jython")
  • gtgtgt demo.getFoo()
  • 'Jython'
  • gtgtgt demo.getDate()
  • Tues Jun 10 114517 PST 2003

28
PyServlet
  • Jython includes a servlet that executes .py
    scripts
  • Similar to the way .jsp files are executed
  • Just need to map the servlet in the web.xml file
  • Can provide python.home and python.path
    init-params to customize the Jython libs and
    configuration

29
Mapping PyServlet
  • ltweb-appgt
  • ltservletgt
  • ltservlet-namegtPyServletlt/servlet-namegt
  • ltservlet-classgt
  • org.python.util.PyServlet
  • lt/servlet-classgt
  • ltload-on-startupgt1lt/load-on-startupgt
  • lt/servletgt
  • ltservlet-mappinggt
  • ltservlet-namegtPyServletlt/servlet-namegt
  • lturl-patterngt.pylt/url-patterngt
  • lt/servlet-mappinggt
  • lt/web-appgt

30
Embedded Jython
  • Can execute Jython within a servlet or EJB
    container
  • Jython can load resource references, local EJB
    references, etc. like any other component
  • Can set up a client to interact with the Jython
    in the server, just like the normal interpreter
  • Probably need to customize the environment to
    make additional JARs visible to Jython

31
Demo
32
Advanced Jython
33
PyUnit
  • PyUnit is based on the JUnit Framework
  • Test are generally shorter with PyUnit
  • Ability to access private methods
  • Ant integration (using JUnit task)

34
PyUnit
  • import unittest
  • class DemoTestCase(unittest.TestCase)
  • def testBar(self)
  • self.assertEquals(5, len("hello"))
  • if __name__ '__main__'
  • unittest.main()

35
Accessing non-public code
  • Edit the Jython registry file
  • The registry is a text file in the Jython
    installation directory
  • Setting this to false will allow Jython to
    provide access to
  • non-public fields, methods, and constructors of
    Java objects.
  • python.security.respectJavaAccessibility false

36
Compiling Jython to Java
  • allows Jython code to run in Java
  • jythonc is the compiler .py gt .java gt .class
  • jython.jar must be in the classpath
  • special _at_sig comment to declare the method's
    signature in Java

37
Jython Standard Libraries
  • Jython includes a rich set of built-in libraries
  • You can run most Python code except where -
    modules implemented in C - modules that target a
    particular platform - modules where JVM lacks
    functionality

38
Code Completion
  • Jython Console with Code Completion
  • http//don.freeshell.org/jython

39
Conclusion
40
QA
41
Links...
  • This presentation is available from
    http//www.chariotsolutions.com/presentations.html
  • Jython www.jython.org
  • Python www.python.org
  • Jython Console http//don.freeshell.org/jython
  • Jython Essentials by Samuele Pedroni Noel
    Rappin http//www.oreilly.com/catalog/jythoness/
  • JEdit http//www.jedit.com
  • Eclipse Python Integration http//www.python.org/c
    gi-bin/moinmoin/EclipsePythonIntegration

42
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com