Using Jython to Speed Development Don Coleman, Aaron Mulder, Tom Purcell Chariot Solutions



Yüklə 0,52 Mb.
tarix07.11.2018
ölçüsü0,52 Mb.
#78901


Using Jython to Speed Development

  • Don Coleman, Aaron Mulder, Tom Purcell Chariot Solutions


Goal



Who are we?

  • We are J2EE Architects

  • We write commercial Java software

  • We use Jython as a tool for developing and testing Java software



Presentation Agenda

  • About Jython

    • Language Overview
    • Using the Interactive Interpreter
  • Server Side Jython

    • Accessing Databases
    • Accessing EJBs
    • PyServlet
    • Embedded Jython
  • Advanced Jython



About Jython



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



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



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



Sample Code

  • class Greeter:

  • def sayHello(self, name = None):

  • if name == None:

  • print "Hello"

  • else:

  • print "Hello, %s" % name

  • def sayGoodbye(self):

  • print "Goodbye"



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



Interactive Command Line

  • $ jython

  • >>> print “Hello world!”

  • Hello world!

  • >>>

  • Use CTRL+D to exit on UNIX

  • Use CTRL+Z to exit on Windows



Language Overview



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()”)



Variable Assignment and Printing

  • >>> s = 17

  • >>> print s

  • 17

  • >>> s = “JavaOne”

  • >>> print s

  • JavaOne

  • >>>



Creating a method

  • >>> def add(a,b):

  • ... return a + b

  • ...

  • >>> add(4,5)

  • 9

  • >>>



Creating a class

  • >>> class Calc:

  • ... def add(self, a, b)

  • ... return a + b

  • ...

  • >>> c = Calc()

  • >>> c.add(4,5)

  • 9

  • >>>



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



Dictionaries

  • Dictionaries are similar to HashMaps

  • >>> dict = {}

  • >>> dict['color'] = 'red'

  • >>> dict[17] = 'seventeen'

  • >>> dict

  • {'color':'red', 17:'seventeen'}

  • >>> dict['color']

  • 'red'

  • >>>



Loops / Iterators

  • >>> l = ['spam','bacon','eggs']

  • >>> for item in l:

  • ... print item

  • ...

  • spam

  • bacon

  • eggs

  • >>>



Using Java in Jython

  • >>> from java.lang import *

  • >>> System.getProperty(“user.home”)

  • '/home/dcoleman'

  • >>> from java.math import BigDecimal

  • >>> b = BigDecimal(“17”)

  • >>> b

  • 17

  • >>>



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


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()


Server-Side Jython



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



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()



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)



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



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



Mapping PyServlet

  • PyServlet

  • org.python.util.PyServlet

  • 1

  • PyServlet

  • *.py



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



Demo



Advanced Jython



PyUnit

  • PyUnit is based on the JUnit Framework

  • Test are generally shorter with PyUnit

  • Ability to access private methods

  • Ant integration (using JUnit task)



PyUnit

  • import unittest

  • class DemoTestCase(unittest.TestCase):

  • def testBar(self):

  • self.assertEquals(5, len("hello"))

  • if __name__ == '__main__':

  • unittest.main()



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



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



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



Code Completion

  • Jython Console with Code Completion

  • http://don.freeshell.org/jython



Conclusion



Q&A



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





Yüklə 0,52 Mb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©www.genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə