Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Using Jython to Speed Development Don Coleman, Aaron Mulder, Tom Purcell Chariot Solutions | JavaOne 2003 | BOF-1069 Goal Use Jython to make software development easier. 1 | JavaOne 2003 | BOF-1069 Who are we? • We are J2EE Architects • We write commercial Java software • We use Jython as a tool for developing and testing Java software 1 | JavaOne 2003 | BOF-1069 Presentation Agenda • About Jython ─ Language Overview ─ Using the Interactive Interpreter • Server Side Jython ─ Accessing Databases ─ Accessing EJBs ─ PyServlet ─ Embedded Jython • Advanced Jython 1 | JavaOne 2003 | BOF-1069 About Jython | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Installing Jython • • • • 1 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 | JavaOne 2003 | BOF-1069 Sample Code class Greeter: def sayHello(self, name = None): if name == None: print "Hello" else: print "Hello, %s" % name def sayGoodbye(self): print "Goodbye" 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Interactive Command Line $ jython >>> print “Hello world!” Hello world! >>> Use CTRL+D to exit on UNIX Use CTRL+Z to exit on Windows 1 | JavaOne 2003 | BOF-1069 Language Overview | JavaOne 2003 | BOF-1069 Language Overview • • • • • • • • 1 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()”) | JavaOne 2003 | BOF-1069 Variable Assignment and Printing >>> s = 17 >>> print s 17 >>> s = “JavaOne” >>> print s JavaOne >>> 1 | JavaOne 2003 | BOF-1069 Creating a method >>> def add(a,b): ... return a + b ... >>> add(4,5) 9 >>> 1 | JavaOne 2003 | BOF-1069 Creating a class >>> class Calc: ... def add(self, a, b) ... return a + b ... >>> c = Calc() >>> c.add(4,5) 9 >>> 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Dictionaries Dictionaries are similar to HashMaps >>> dict = {} >>> dict['color'] = 'red' >>> dict[17] = 'seventeen' >>> dict {'color':'red', 17:'seventeen'} >>> dict['color'] 'red' >>> 1 | JavaOne 2003 | BOF-1069 Loops / Iterators >>> l = ['spam','bacon','eggs'] >>> for item in l: ... print item ... spam bacon eggs >>> 1 | JavaOne 2003 | BOF-1069 Using Java in Jython >>> from java.lang import * >>> System.getProperty(“user.home”) '/home/dcoleman' >>> from java.math import BigDecimal >>> b = BigDecimal(“17”) >>> b 17 >>> 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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() 1 | JavaOne 2003 | BOF-1069 Server-Side Jython | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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() 1 | JavaOne 2003 | BOF-1069 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) 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Mapping PyServlet <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> 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Demo | JavaOne 2003 | BOF-1069 Advanced Jython | JavaOne 2003 | BOF-1069 PyUnit • • • • 1 PyUnit is based on the JUnit Framework Test are generally shorter with PyUnit Ability to access private methods Ant integration (using JUnit task) | JavaOne 2003 | BOF-1069 PyUnit import unittest class DemoTestCase(unittest.TestCase): def testBar(self): self.assertEquals(5, len("hello")) if __name__ == '__main__': unittest.main() 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 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 1 | JavaOne 2003 | BOF-1069 Code Completion Jython Console with Code Completion http://don.freeshell.org/jython 1 | JavaOne 2003 | BOF-1069 Conclusion | JavaOne 2003 | BOF-1069 Q&A | JavaOne 2003 | BOF-1069 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/cgibin/moinmoin/EclipsePythonIntegration 1 | JavaOne 2003 | BOF-1069 | JavaOne 2003 | BOF-1069