blob: f303e198d63a7d9dfc97c2c9a7879011e52f8124 [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>PL/Java 1.1.0</title>
</head>
<body>
<table border="0">
<tr>
<td align="left" valign="top">
<table border="0">
<tr><td align="left" valign="top">
<img src="http://gborg.postgresql.org/images/projects/pljava/screenshots/pljava_logo_small.gif" align="left">
</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td>The project is sponsored by:</td></tr>
<tr><td><table border="0"><tr>
<td><a href="http://www.enterprisedb.com">
<img height="70" src="http://gborg.postgresql.org/images/projects/pljava/screenshots/enterprisedb_logo.jpg" border="0"/>
</a></td>
<td><a href="http://www.tada.se">
<img height="50" src="http://gborg.postgresql.org/images/projects/pljava/screenshots/tada_logo.jpg" border="0"/>
</a></td>
</tr></table></td></tr>
</table>
</td>
<td align="left" valign="top">
<p></p>
<h2>PL/Java 1.2.0 released</h2>
<h3>Bringing the power of Java<font face="Times New Roman">™</font> to PostgreSQL<font face="Times New Roman">™</font>
Functions and Triggers.</h3>
<p><font size="2">
Java&#8482; is a registered trademark of Sun Microsystems, Inc. in the United States and other countries.<br/>
PostgreSQL&#8482; is a trademark of PostgreSQL Inc and Regents of the University of California.
</font></p>
<p>PL/Java is an add on module to the PostgreSQL backend. It falls into the same
category as PL/SQL, PL/TCL, PL/Perl, PL/Python, and PL/R. When installed, functions
and triggers can be written in Java using your favorite Java IDE and installed
into the database.</p>
</td>
</tr>
</table>
<h3>The PL/Java 1.2.0 <a href="http://gborg.postgresql.org/project/pljava/genpage.php?downloads">
release of PL/Java</a> provides the following features.</h3>
<ol>
<li>Ability to write both functions and triggers using Java 1.4 or higher.</li>
<li>Standardized utilities (modeled after the SQL 2003 proposal) to install and
maintain Java code in the database.</li>
<li>Standardized mappings of parameters and result. Complex types as well as sets
are supported.</li>
<li>An embedded, high performance, JDBC driver utilizing the internal PostgreSQL
SPI routines.</li>
<li>Metadata support for the JDBC driver. Both DatabaseMetaData and ResultSetMetaData is included.</li>
<li>The ability to return a ResultSet that origins from a query as an alternative to build a ResultSet row by row</li>
<li>Full support for PostgreSQL 8.0 savepoints and exception handling.</li>
<li>Ability to use IN, INOUT, and OUT parameters when used with PostgreSQL 8.1</li>
<li>Two language handlers, one TRUSTED (the default) and one that is not TRUSTED (language tag is javaU to
conform with the defacto standard)</li>
<li>Transaction and Savepoint listeners enabling code execution when a
transaction or savepoint is commited or rolled back.</li>
<li>Integration with GNU GCJ on selected platforms.</li>
</ol>
<h3>PL/Java in brief</h3>
<p>A function or trigger in SQL will appoint a static method in a Java class. In
order for the function to execute, the appointed class must be installed in the
database. PL/Java adds a set of functions that helps installing and maintaining the
java classes. Classes are stored in normal Java archives (AKA jars). A Jar may optionally
contain a deployment descriptor that in turn contains SQL commands to be executed
when the jar is deployed/undeployed. The functions are modeled after the standards
proposed for SQL 2003.</p>
<p>PL/Java implements a standardized way of passing parameters and return values.
Complex types and sets are passed using the standard JDBC ResultSet class. Great
care has been taken not to introduce any proprietary interfaces unless absolutely
necessary so that Java code written using PL/Java becomes as database agnostic as
possible.</p>
<p>A JDBC driver is included in PL/Java. This driver is written directly on top
of the PostgreSQL internal SPI routines. This driver is essential since it's very
common for functions and triggers to reuse the database. When they do, they must
use the same transactional boundaries that where used by the caller.</p>
<p>PL/Java is optimized for performance. The Java virtual machine executes within
the same process as the backend itself. This vouches for a very low call overhead.
PL/Java is designed with the objective to enable the power of Java to the database
itself so that database intensive business logic can execute as close to the actual
data as possible.</p>
<p>The standard Java Native Interface (JNI) is used when bridging calls from the
backend into the Java VM and vice versa. Please read the
<a href="http://gborg.postgresql.org/project/pljava/genpage.php?jni_rationale">rationale</a>
behind the choice of technology and
<a href="http://gborg.postgresql.org/project/pljava/genpage.php?solutions">a more
in-depth discussion</a> about some implementation details. PL/Java is primarily targeted
to the new 8.1 version but will run with PostgreSQL 8.0 versions too albeit with
some limitations. </p>
<p>For info on how to get started, please read the
<a href="http://gborg.postgresql.org/project/pljava/genpage.php?readme">release
notes</a>. A
<a href="http://gborg.postgresql.org/project/pljava/genpage.php?userguide">user
guide</a> contains more information on how to create and manage our Java functions
and triggers.</p>
<p>Source and selected binaries are available for download. See the
<a href="http://gborg.postgresql.org/project/pljava/genpage.php?downloads">download
page</a> for more details.</p>
</body>
</html>