Beiträge zur Dokumentation von Cameleon OSP |
Diese Beispielinstallation basiert auf den Produkten "SuSE Linux" Version
7.2, "Apache Tomcat" in der Version 4.01, "MySQL" in der Version 3.23.37
und dem Java-Standard-Development-Kit (JSDK) in der Version 1.3.1_02. Es
wird davon ausgegangen, dass diese Komponenten auf dem Linux-System installiert
und jedes für sich lauffähig ist. Es wird ausserdem angenommen,
dass der Tomcat-Server auf Port 8080 läuft. Falls Sie Probleme haben
diese einzelnen Komponenten zum Laufen zu bringen, empfehle ich das Troubleshooting,
welches Sie am Ende dieser Seite finden.
Tomcat |
Tomcat benötigt zum Start die Informationen zur installierten JSDK (JAVA_HOME). Außerdem benötigt "Tomcat" die Pfadinformation zu den Laufzeitbibliotheken des JSDK (CLASSPATH). Auch sollte der Pfad zum "bin"-Verzeichnis des JSDK "Tomcat" bekannt gemacht werden, da "Tomcat" sozusagen "on the fly" kompiliert und dies natürlich nur dann funktioniert, wenn die Pfad korrekt gesetzt sind. Ich habe es mir hier einfach gemacht, indem ich ein Startskript namens "tomcat" erstellt habe, welches alle diese Informationen enthält. Über dieses Skript kann ich dann den "Tomcat" starten indem ich einfach "tomcat start" aufrufe und beenden indem ich einfach "tomcat stop" aufrufe. Bitte versäumen Sie nicht dieses Startskript bspw. mit "chmod 755 tomcat" ausführbar zu machen! Damit es schon beim Systemstart gestartet wird, empfiehlt es sich dieses Skript der SuSE-Analogie zu folge nach "/etc/init.d" zu kopieren und dann einen entsprechenden Soft-Link in den Runlevel-Verzeichnissen "/etc/init.d/rc?.d" zu erstellen. Angenommen Sie verwenden den Default-Runlevel 31 (Full multiuser with network), dann können sie mit dem folgenden Befehl einen solchen Soft-Link erzeugen:
ln -s /etc/init.d/tomcat /etc/init.d/rc3.d/S99tomcat
ln -s /etc/init.d/tomcat /etc/init.d/rc3.d/K11tomcat
Der Soft-Link mit dem Namen S99tomcat veranlaßt SuSE dazu, bei Systemstart das Startskript "tomcat" ganz am Schluss auszuführen, nachdem alle anderen Prozesse gestartet sind. Der Soft-Link mit dem Namen "K11tomcat" bewirkt, dass "Tomcat" nach den Prozessen mit der Nummer "K10..." und vor denen mit "K12..."gestoppt wird. Ich habe deshalb "K11tomcat" gewählt, damit "Tomcat" vor "MySQL" (standardmäßig "K12mysql") beendet wird. Das ist sinnvoll, denn es wäre fatal, wenn im Falle eines Systemstopps die Anwendung die unter "Tomcat" läuft im Netz noch angeboten wird und funktioniert, während die Datenbank bereits beendet wurde. Hier nun der Inhalt des Skripts "/etc/init.d/tomcat"
#!
/bin/sh
export JAVA_HOME=/usr/lib/jdk1.3.1_02
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export CATALINA_HOME=/opt/tomcat
export PATH=$JAVA_HOME/bin:$PATH
case
"$1" in
start)
/opt/tomcat/bin/startup.sh
;;
stop)
/opt/tomcat/bin/shutdown.sh
;;
esac
Wie Sie aus dem Skript ersehen können, liegt bei meinem System
das "JSDK" unter "/usr/lib/jdk1.3.1_02"
und "Tomcat" unter "/opt/tomcat".
Im weiteren Verlauf der Beispielinstallation wird davon ausgegangen, dass
dies so ist. Falls nicht, müssen Sie anstelle dieser Verzeichnisse
Ihre Verzeichnisse angeben.
Alternativ können Sie die "export"-Anweisungen auch in die Datei
"/etc/profile" kopieren, so dass die Variablen beim nächsten Systemstart
automatisch gesetzt werden. Wenn Sie die Variablen nur für sich selbst
setzen wollen, so können Sie diese "export"-Anweisungen auch in die
Datei "/home/ihrname/.bash_login" aufnehmen und sich dann neu anmelden.
Folgende Verzeichnisstruktur werden Sie bei "Tomcat" unterhalb von CATALINA_HOME vorfinden:
bin
classes
common
conf
lib
logs
server
webapps
work
Wichtig im Zusammenhang mit der Installation des Frameworks sind die Verzeichnisse "common", "lib" und "webapps". Die Verzeichnisse "work" und "logs" sind interessant bei der Fehlersuche. In das Verzeichnis "common/classes" kommen alle ungepackte Klassen die allen Applikationen zur Verfügung gestellt werden sollen. In das Verzeichnis "common/lib" kommen alle gepackten "jar"-Dateien die allen Applikationen zur Verfügung stehen sollen. Kopieren Sie also hier den "JDBC"-Treiber2 für "MySQL" hinein, damit er von allen Ihren Anwendungen gefunden werden kann. Hier hinein sollten Sie auch die vom Framework mitgelieferte Klassenbibliothek "must.jar" kopieren, damit alle Anwendungen die mit dem Framework erstellt werden die benötigten Klassen finden können. "Tomcat" bindet beim Start alle diese Bibliotheken ein, so dass auf die darin enthaltenen Verzeichnisstrukturen ohne weiteres Zutun zugegriffen werden kann. Machen Sie dies also zuerst, denn sonst wird alles Weitere nicht funktionieren.
Falls Sie aus Ihren Anwendungen "jar"-Dateien machen, so sollten Sie diese nach "lib" kopieren. Auch hier ist es so, dass die darin liegenden Verzeichnisstrukturen von "Tomcat" automatisch eingebunden werden. Nehmen wir also an, dass Sie "cookbook.jar" erzeugt haben und dieses nun unter "Tomcat" laufen lassen wollen, dann kopieren Sie diese Datei einfach nach "lib", stoppen und starten "Tomcat" neu und schon müsste es funktionieren. "jar"-Dateien für Ihre Anwendungen sollten Sie jedoch nur verwenden, wenn das Produkt fertiggestellt ist, denn damit "Tomcat" diese Dateien erkennt, muss "Tomcat" beendet und wieder gestartet werden. Während der Entwicklung ist es besser die Klassen ungepackt unterhalb des "webapps"-Verzeichnisses abzulegen. Dies benötigen Sie auch insbesondere dann, wenn Sie nicht nur Klassen, sondern auch JSP-Dateien und andere Resourcen in Ihrer Anwendung verwenden. Dies hat u.a. den Vorteil, dass Sie "Tomcat" mit dem "Tomcat-Manager" dazu veranlassen können geänderte Klassen zur Laufzeit neu zu lesen. Ein "shutdown" des "Tomcat" ist damit nicht mehr nötig, das heißt andere Anwendungen können weiter laufen. Sie sollten dieser Variante also den Vorzug geben, wenn Sie im Produktiveinsatz sind. Im nächsten Abschnitt erkläre ich deshalb die Installation der Demoanwendung "cookbook" unterhalb von "webapps". Erzeugen Sie also zuerst folgende Verzeichnisstruktur unterhalb von "webapps":
cookbook
cookbook/WEB-INF
(bitte
beachten Sie die Grossschreibung von WEB-INF!)
cookbook/WEB-INF/classes
cookbook/jsp
(hierhin
kopieren Sie die Java-Server-Pages *.jsp)
cookbook/help (hier
hinein die Dateien Logo.gif, cbprop.html, indtextb.jpg)
cookbook/help/english (hier
hinein die englischen Hilfedateien wie z.B. Operate.htm etc.)
cookbook/help/german (hier
hinein die deutschen Hilfedateien wie z.B. Operate.htm etc.)
cookbook/images (hier
hinein close.jpg, enq.jpg, menu.jpg, new.jpg, type.jpg)
cookbook/stylesheets (hier
hinein default.css, list.css, menu.css)
Als nächstes kopieren Sie bitte die gesamte Verzeichnisstruktur von "cookbook" in das Verzeichnis "cookbook/WEB-INF/classes", so dass die Java-Sourcecodes in folgendem Verzeichnis liegen:
cookbook/WEB-INF/classes/de/jugs/cookbook
Als letztes kopieren Sie bitte die Datei "must.html"
nach "webapps".
MySQL |
Das Hauptproblem bei das im Zusammenhang mit "MySQL" auftauchen kann ist das Problem der Zugriffsberechtigung. Damit die Anwendung "cookbook" über den JDBC-Treiber auf "MySQL" zugreifen kann, ist es notwendig einen Benutzer einzurichten. Standardmäßig wird der Benutzer "cook" verwendet. Wenn "Tomcat" und damit die Anwendung "cookbook" und "MySQL" auf einem Rechner laufen (was wohl in den meisten Fällen der Fall sein wird), dann greift die Anwendung über den Host "localhost" auf die Datenbank zu. Unter "MySQL" sieht der Benutzer dann in etwa so aus: cook@localhost. Einen solchen Benutzer richten wir mit dem MySQL-Datenbank-Tool "mysql" mit folgendem Kommando ein:
use mysql;
insert into user (Host, User, Password,
Select_priv, Insert_priv, Update_priv, Delete_priv) values ('localhost','cook','password('pwd1'),'Y','Y','Y','Y');
Anschließend sorgen wir dafür, dass "MySQL" die Benutzertabelle neu einliest indem wir das Kommando "mysqladmin reload" absetzen. Erst danach ist garantiert, dass der Benutzer "cookbook" von "MySQL" die Erlaubnis erhält auf die Datenbanktabellen zuzugreifen.
Die Anwendung "cookbook" benötigt, ausser den eigentlichen Tabellen die mit der Datenhaltung zu tun haben, noch zwei weitere die zum Einen für die Benutzerverwaltung (Tabelle "User") und zum Anderen für die Führung des Primärschlüssels (Tabelle "Identity") zuständig sind. Um das Anlegen dieser Tabellen zu vereinfachen, bringt "cookbook" eine Datei namens "createDB.sql" mit. Diese Datei enthält alle zum Anlegen und Füllen der Datenbank bzw. Tabellen erforderlichen SQL-Anweisungen. Übergeben Sie diese Datei an das Datenbank-Tool "mysql", so dass die SQL-Anweisungen ausgeführt werden:
mysql < createDB.sql
Versuchen Sie jetzt sich bei MySQL als User "cook" und Passwort "pwd1" anzumelden.
mysql -ppwd1 -u cook cookbook
Wenn das klappt und Sie den Prompt (mysql>)
von MySQL bekommen, dann ist es in Ordnung. Falls nicht, so schauen Sie
sich einmal mit "tail" die Logdatei
von MySQL an. Diese finden Sie aller Wahrscheinlichkeit nach unter dem
Namen "/var/lib/mysql/rechnername.log".
Probleme mit MySQL sind dort am ehesten zu erkennen. Sollte eine solche
Datei nicht existieren, dann haben Sie "MySQL" nicht im Log-Modus gestartet.
Ziehen Sie in diesem Fall die Dokumentation von "MySQL" zu rate.
Der grosse Augenblick |
Nun starten wir die Anwendung "cookbook". Starten Sie dazu unter Linux Ihre grafische Oberfläche und Ihren Lieblingsbrowser. Geben Sie folgende URL ein:
http://localhost:8080/cookbook/servlet/de.jugs.cookbook.Main
Nun sollten Sie nach einem kurzen Augenblick die Eingangsseite der Anwendung
"cookbook" sehen. Falls nicht, so hilft Ihnen vielleicht das Troubleshooting.
Falls Sie von einem entfernten Rechner aus auf den Tomcat-Server zugreifen
wollen, dann gilt natürlich nicht "localhost", sondern dann muss hier
der Name bzw. die IP-Adresse des Tomcat-Servers stehen.
Troubleshooting |
Frage: Beim Aufruf von "Main" kommt es zu der Fehlermeldung "java.lang.NullPointerException
at de.must.markup.MainStd.createConnection(MainStd.java:202)"
Antwort: Aller Wahrscheinlichkeit nach ist es dem Benutzer,
welcher über den JDBC-Treiber versucht auf die Datenbanktabellen zuzugreifen,
nicht gestattet diese zu öffnen. Bitte überprüfen Sie, ob
die Einstellungen in "Global.java" mit denen in der Tabelle "User" der
Datenbank "mysql" übereinstimmen.
oder
Antwort: Eventuell haben
Sie den JDBC-Treiber nicht installiert, oder es ist der Falsche. Installieren
Sie Ihn wie oben angeführt.
Frage: Trotz mehrfacher fehlerfreier Kompilierung der Java-Klassen
kommt es trotzdem immer zu Java-Fehlermeldungen aus denen ich aber nicht
schlau werde. Ich habe auch schon den Tomcat neu gestartet, auch das half
nichts.
Antwort: Wenn alles nichts hilft, dann löschen Sie alle
Dateien Ihrer Anwendung unterhalb von "/opt/tomcat/work/localhost/anwendung".
Frage: Das Verzeichnis "/opt/tomcat" gibt es bei mir nicht. Ich
kann diese Anleitung nicht nachvollziehen.
Antwort: Wahrscheinlich ist bei Ihnen der "Apache Tomcat Applikationsserver"
unter einem anderen Verzeichnis abgelegt – evtl. "jakarta". In diesem Fall
müssen Sie diese Anleitung entsprechend abändern, oder aber einen
Softlink namens "tomcat" auf das Verzeichnis "jakarta" erzeugen.
Frage: Beim Start des "Tomcat"
kommt es zu Fehlermeldungen.
Antwort: Bitte überprüfen
Sie, ob die Umgebungsvariablen wie o.a. auch korrekt gesetzt sind. Geben
Sie folgende Kommandos ein:
echo $CATALINA_HOME
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
Bekommen Sie immer eine Ausgaben?
Ist diese richtig? Falls nein, dann sollten Sie nochmals überprüfen,
ob die "export"-Anweisungen wie oben angeführt korrekt eingetragen
sind.
Frage: Wenn ich die Hilfedatei
von "cookbook" aufrufe, fehlen die Images.
Antwort: Mit der Beispielanwendung
werden die Images aus Platzgründen nicht mitgeliefert – sie werden
deshalb nicht angezeigt. Sie müssen sie sich ggf. von der Homepage
http://www.must.de
herunterladen.
Autor: Gunter Koch, 28.03.02