Inhaltsverzeichnis
Inhaltsverzeichnis
SQL-Modul: http://linuxtest.ki.ision.net/cocoon/docs/sql/html
PostgreSQL:
1. /usr/doc/postgresql-7.0.3: Doku
Nach Installieren der Datenbank PostgreSQL-7.0.3 (s.dort) wird vom User root die Datenbank root erzeugt, darin eine Tabelle namens test angelegt und zwei Datensätze aus Namen und Vornamen hineingeschrieben sowie ein Primärschlüssel bestimmt:
CREATE TABLE test ( name_id SERIAL PRIMARY KEY, Vorname CHAR(15), Nachname CHAR(20) );
Inhaltsverzeichnis
In der Datei:
/usr/local/jakarta/dist/tomcat/cocoon/WEB-INF/cocoon.properties
wird, sofern notwendig, die Zeile einkommentiert:
processor.type.sql = org.apache.cocoon.processor.sql.SQLProcessor
Von der PostgreSQL-JDBC-Homepage:
http://www.retep.org.uk/postgres
wird der Treiber für PostgreSQL-7.0.3 heruntergeladen nach:
/home/geronimo/sql/postgres/source/jdbc
und kopiert nach:
/usr/local/postgresql-7.0.3/src/jdbc/jdbc7.0-1.1.jar
JDBC-Test:
Die Funktion von JDBC lässt sich mit folgendem kleinen Java-Programm testen:
import java.sql.*;
public class sample2 {
public static void main (String[] args) throws SQLException,
ClassNotFoundException {
Class.forName("org.postgresql.Driver"); // load JDBC driver
// establish a connection with the desired database
Connection db =
DriverManager.getConnection(
"jdbc:postgresql://localhost/test", // url database
"user", // username
"password"); // password
// set up a query to run
PreparedStatement st = db.prepareStatement("SELECT * FROM statename ");
// run the query to produce a ResultSet
ResultSet rs = st.executeQuery();
int numCols = rs.getMetaData().getColumnCount();
// print out the contents of the ResultSet
while (rs.next()) {
for (int j=1; j <= numCols; j++)
System.out.print(rs.getString(j) + " ");
System.out.println();
}
// close the resources
rs.close();
st.close();
db.close();
}
}
In PostgreSQL muss vorher mit: createdb test die Datenbank test angelegt und anschließend darin die Tabelle statename erzeugt werden.
Außerdem muss der User Postgres in:
/usr/local/pgsql/bin
mit: pg_ctl stop und
pg_ctl start die neuen Einstellungen wirksam machen.
Inhaltsverzeichnis
Damit PostgreSQL auch auf TCP/IP Aufrufe hört -- sowohl JDBC als auch das Tcl-Frontend PgAccess benutzen sie -- muss in:
/etc/rc.d/initd/postgres
die Zeile einkommentiert:
# Add the "-i" option to enable TCP/IP sockets in addition # to unix domain sockets. This is needed for Java´s JDBC # PGOPTS="-i"sowie die Umgebungsvariable POSTMASTER mit dem -i -Flag versehen werden:
POSTMASTER=postmaster -i
Danach muss PostgreSQL noch mitgeteilt werden, dass JDBC das Recht hat, sie zu bemühen. Entsprechend werden in:
/usr/local/pgsql/data/pg_hba.conf
Die Zeilen eingetragen:
host root 192.168.128.125 255.255.255.0 trust host geronimo 192.168.128.125 255.255.255.0 trust host xml 192.168.128.125 255.255.255.0 trust
In der Datei: /etc/rc.config findet sich bezüglich PostgreSQL folgende Passage:
# # Should the postgres daemon be startet automatically on system startup? # START_POSTGRES="yes" # # In which directory should the PostgreSQL database reside? # POSTGRES_DATADIR="/usr/local/pgsql/data" # # The options that are given to the PostgreSQL master daemon on startup. # See the manual pages for postmaster and postgres for valid options. # Don´t put "-D datadir" here since it is set by the startup script. # Don´t change this, unless you know what you do. # POSTGRES_OPTIONS="-i"sowie im Verzeichnis /etc/init.d/ die für PostgreSQL zuständige Startdatei postgres, in der dem System mitgeteilt werden muss, wo sich die für PostgreSQL relevanten Verzeichnisse befinden:
H=/usr/local/pgsql/bin/postmaster LOGFILE=/usr/local/pgsql/log/postgresql.log DATADIR=/usr/local/pgsql/data . /etc/rc.config
Tomcat und damit Cocoon muss mitgeteilt werden, wo sie JDBC finden können. Das geschieht, indem das jdbc7.0-1.1.jar-Archiv in das lib-Verzeichnis von tomcat kopiert wird: /usr/local/jakarta/dist/tomcat/lib
Außerdem müssen Tomcat in: $TOMCAT_HOME/conf/server.xml die Zugangsdaten für die Datenbank mitgeteilt werden:
driverName="org.postgresql.Driver"
connectionURL="jdbc:postgresql://localhost.html"
connectionName="root"
connectionPassword="foo"
wobei hier xml der Name der Datenbank ist.
In PostgreSQL muss die Datenbank: root erzeugt werden und darin eine Tabelle test, die einige Adressbuchzeilen enthält mit den Bezeichnungen:
| Vorname |
| Nachname |
| telefonnr |
| strasse |
| hausnr |
| plz |
| ort |
Im .xml-File wird die Anfrage an die Datenbank in der SQL-Notation gestellt:
<query connection="foo"> select * from test </query>Alle anderen Angaben dienen der Identifikation des Benutzers und der aufgerufenen Datenbank.
Das .xsl-Stylesheet verarbeitet die Antwort der Datenbank, die via SQL-Modul in XML angeliefert wird. Hier ist HTML das schließliche Ausgabeformat, es könnte aber auch ein beliebig anderes sein.
xml-File und xsl-Stylesheet orientieren sich an den Anweisungen in:
/usr/local/apache/htdocs/cocoon/docs/sql.html, der offiziellen Cocoon-Dokumentation.
.xml-File:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="sql02.xsl" type="text/xsl"?>
<?cocoon-process type="sql"?>
<?cocoon-process type="xslt"?>
<page>
<connectiondefs>
<connection name="foo"> <!-- beliebiger Name -->
<driver>org.postgresql.Driver</driver>
<dburl>jdbc:postgresql://localhost/root</dburl>
<username>root</username>
<password>foo</password>
</connection>
</connectiondefs>
<tab>
<query connection="foo">
select * from test
</query>
</tab>
<sqlerror message="The database server is on fire"/>
</page>
.xsl-Stylesheet
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="page">
<xsl:processing-instruction name="cocoon-format">
type="text/html"
</xsl:processing-instruction>
<html>
<head>
<title>
PostgreSQL Search Results
</title>
</head>
<body bgcolor="#FFF8DC">
<font face="helvetica">
<h1>PostgreSQL</h1>
<xsl:apply-templates/>
</font>
</body>
</html>
</xsl:template>
<xsl:template match="tab">
<table border="2" cellspacing="0"
cellpadding="6" bordercolor='#000099' bgcolor="#CCCCFF">
<tr>
<th>Vorname</th>
<th>Nachname</th>
<th>Telefon-Nr.</th>
<th>Strasse</th>
<th>Hausnr.</th>
<th>PLZ</th>
<th>Ort</th>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="ROW">
<tr>
<xsl:apply-templates select="Vorname"/>
<xsl:apply-templates select="Nachname"/>
<xsl:apply-templates select="telefonnr"/>
<xsl:apply-templates select="strasse"/>
<xsl:apply-templates select="hausnr"/>
<xsl:apply-templates select="plz"/>
<xsl:apply-templates select="ort"/>
</tr>
</xsl:template>
<xsl:template match="Vorname">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="Nachname">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="telefonnr">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="strasse">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="hausnr">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="plz">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
<xsl:template match="ort">
<td>
<xsl:apply-templates/>
</td>
</xsl:template>
</xsl:stylesheet>
Der xml-File wird aufgerufen mit:
http://localhost/cocoon/cocoon_sql/sql01.xml
und liefert die Ausgabe der Datenbank, entsprechend dem xsl-Stylesheet formatiert, zurück (s. o.).