Download What is Jython? - Chariot Solutions

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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