|
Using Jython to Speed Development Don Coleman, Aaron Mulder, Tom Purcell Chariot Solutions
|
tarix | 07.11.2018 | ölçüsü | 0,52 Mb. | | #78901 |
|
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? 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
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 >>> 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
Inheriting from Java from javax.swing import * 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 # 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
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
Dostları ilə paylaş: |
|
|