1 / 42

Using Jython to Speed Development

Using Jython to Speed Development. Don Coleman, Aaron Mulder, Tom Purcell Chariot Solutions. Goal. Use Jython to make software development easier. Who are we?. We are J2EE Architects We write commercial Java software We use Jython as a tool for developing and testing Java software.

Download Presentation

Using Jython to Speed Development

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 >>> print “Hello world!” Hello world! >>> Use CTRL+D to exit on UNIX Use CTRL+Z 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 >>> s = 17 >>> print s 17 >>> s = “JavaOne” >>> print s JavaOne >>>

  15. Creating a method >>> def add(a,b): ... return a + b ... >>> add(4,5) 9 >>>

  16. Creating a class >>> class Calc: ... def add(self, a, b) ... return a + b ... >>> c = Calc() >>> c.add(4,5) 9 >>>

  17. Lists Lists are like arrays and ArrayLists >>> l = [] >>> l.append(1) >>> l.append('string') >>> l.append(12.3) >>> print l [1, 'string', 12.3] >>> len(l) 3 >>> l[2] 12.3

  18. Dictionaries Dictionaries are similar to HashMaps >>> dict = {} >>> dict['color'] = 'red' >>> dict[17] = 'seventeen' >>> dict {'color':'red', 17:'seventeen'} >>> dict['color'] 'red' >>>

  19. Loops / Iterators >>> l = ['spam','bacon','eggs'] >>> for item in l: ... print item ... spam bacon eggs >>>

  20. Using Java in Jython >>> from java.lang import * >>> System.getProperty(“user.home”) '/home/dcoleman' >>> from java.math import BigDecimal >>> b = BigDecimal(“17”) >>> b 17 >>>

  21. Jython Modules • A module is a collection of jython code • May contain, code, methods, classes • Import modulesimport 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( "jdbc:hsqldb:demo", "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("jdbc:hsqldb:demo", "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... >>> from javax.naming import * >>> c = InitialContext() >>> home = c.lookup("Demo") >>> demo = home.create() >>> demo.setFoo("Jython") >>> demo.getFoo() 'Jython' >>> demo.getDate() Tues Jun 10 11:45:17 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. <web-app> <servlet> <servlet-name>PyServlet</servlet-name> <servlet-class> org.python.util.PyServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>PyServlet</servlet-name> <url-pattern>*.py</url-pattern> </servlet-mapping> </web-app> Mapping PyServlet

  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 > .java > .class • jython.jar must be in the classpath • special @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. Q&A

  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/cgi-bin/moinmoin/EclipsePythonIntegration

More Related