Beitrag zum Student Guide

advertisement
Student Guide
Java Client/Server
anhand von
Photo Communities
Software Projekt im Rahmen der Vorlesung
Java Client / Server
Studiengang Computer Networking,
Fachhochschule Furtwangen, WS 00/01
Team:
Jörg Hühne
Florian Leibenzeder
Dominic Yow-Sin-Cheung
Oliver Hilß
Stefan Zier
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
1 Einleitung
Erstellt werden soll ein webbasiertes, kooperatives Photoalbum. Verschiedene Benutzer
können Fotos in einen gemeinsamen Speicherort laden, kategorisieren und publizieren.
1.1 Funktionale Anforderungen






Es existiert ein gemeinsames Fotoalbum mit einer limitierten Anzahl vorgegebener
Kategorien
Benutzer können sich beim System authentifizieren
Im System existiert ein Administrator
Besucher können über ein Formular einen Account auf dem System beantragen, der
Administrator wird per E-Mail benachrichtigt und kann den Benutzer-Account freischalten
oder den Antrag ablehnen. Der Benutzer wird per E-Mail von der Entscheidung des
Administrators benachrichtigt
Benutzer können über ein Formular Fotos hochladen, eine Beschreibung eingeben und
einer Kategorie zuordnen
Benutzer und Gäste können die Fotos in den einzelnen Kategorien betrachten
____________________________________________________________________________
2
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
2 Umgebung
2.1 Technologien
Die Anwendung sollte auf einer relationalen Datenbank aufsetzen, auf die per JDBC zugegriffen
wurde. Um potentiell mehrere Anwendungen auf dem gleichen Datenbestand aufsetzen zu
können und vor allem weil es technisch interessant war, wurde ein objektorientierter
Datenbankwrapper entwickelt, der seine Services per CORBA zur Verfügung stellt. Die
eigentliche Anwendung bestand aus Java Servlets zur dynamischen Generierung des HTMLCodes, die die Services des Datenbank-Wrappers nutzten. Zum Versand von E-Mails an
Benutzer des Systems kam weiterhin die Java Mail API zum Einsatz.
2.2 Runtime Tools
Java Development Kit 1.2.2-006 für Win32 und Linux
Inprise VisiBroker 4.11 für Win32 und Linux (Trial)
Apache Jakarta Tomcat 3.1
MySQL 3.23.25 beta
MySQL JDBC Driver 2.0.2
Java Mail API 1.1.3 (und Java Activation Framework 1.0.1)
Servertec IWS FileUpload Classes
2.3 Development Tools
Inprise JBuilder 4.0 Foundation
CVS 1.10.5 Win32 und Linux
Apache Ant 1.1
TogetherJ 4.01
____________________________________________________________________________
3
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
3 Erfahrungen
3.1 Technologien
Der Umgang mit den Technologien verlief aufgrund ihrer Ausgereiftheit weitgehend problemlos.
Die Mail API bot ein für diesen Zweck etwas zu umfangreiches API, das einen gewissen
Einarbeitungsaufwand erfordert.
Da bei Servlets meistens nur die service()-Methode zu implementieren war, gestaltete sich
deren Programmierung recht einfach. Unschön war allerdings die Vermischung des HTMLCodes mit dem Programmcode. Dies ließe sich zwar durch eine Template-Engine lösen, doch
ist der Einsatz mit einem Mehraufwand behaftet, der für diese Beispiel-Anwendung nicht
gerechtfertigt war.
Zunächst achteten einige Teammitglieder auch nicht auf die Thread-Safety der Servlets. Sie
überschrieben Instanzvariablen des Servlets in der service()-Methode. Bei mehreren
gleichzeitig ablaufenden Requests hätten sich so die einzelnen Threads gegenseitig
Variablenwerte überschreiben können.
Die JDBC API ist so gehalten, daß man mit einer kleinen Teilmenge bereits gut arbeiten kann.
Geht man nach Beispielen aus zahlreichen Tutorials von Sun vor, kann man schon in kurzer
Zeit zum Test ein SELECT-Statement absetzen. Aufwändiger war der Einsatz von
PreparedStatements in Verbindung mit einem Connection-Pool.
In Produktionsumgebungen ist dies jedoch die Regel, da nur so mehrere Anfragen zur
Datenbank gleichzeitig laufen können. Deshalb erschien es uns auch interessant, einen
einfachen Pool selbst zu implementieren.
In einem Connection-Pool wird eine bestimmte Anzahl von Datenbank-Verbindungen schon im
voraus erstellt und Client-Threads bei Bedarf zur Verfügung gestellt. Der Hintergrund ist, daß
der Aufbau einer Verbindung zeitlich recht teuer ist.
Um den Pool flexibel zu halten, können Anzahl der vorgehaltenen Verbindungen, TreiberName, Datenbank-URL und Login-Daten über eine Konfigurationsdatei festgelegt werden. Der
CORBA Datenbank-Wrapper stellt für jede Tabelle in der Datenbank einen Service zur
Verfügung, auf den über eine definierte Schnittstelle zugegriffen wird.
Probleme bereiteten hier CORBA-spezifische Besonderheiten. Zum Beispiel, kann CORBA
keine null-Werte übertragen. Liefert ein Methodenaufruf null an den ORB zurück, so bekommt
der Client eine CORBA_UNKNOWN SystemException. Aufgrund der einfach gehaltenen
Interface-Definition, hielten sich die Probleme bei der Implementierung jedoch in Grenzen.
3.2 Tools
Das JDK lief wie man es von einem Production Release erwartet völlig problemlos auf beiden
Plattformen. Kompatibilitätsprobleme zwischen den Plattformen traten nicht auf.
VisiBroker hatte mit dem eingesetzten SmartAgent (eine proprietäre CORBA-Erweiterung zum
einfachen Discovery von Services per UDP-Broadcast) auf der Win32-Plattform einige
Stabilitätsprobleme. Es passierte öfters, daß die CORBA-Kommunikation erst nach einem
Neustart des SmartAgent Dienstes wieder funktionierte.
Apache Tomcat geht bei der Konfiguration teils etwas unkonventionelle Wege, so daß man eine
Weile benötigt, bis man die XML-Konfigurationsdateien verstanden hat. Der Lernaufwand hält
sich aber in Grenzen.
MySQL ist im Vergleich zu kommerziellen Datenbanken äusserst spartanisch ausgestattet,
zeigte sich aber als stabil. Die für Win32 mitgelieferten Wartungstools waren jedoch von
geringer Qualität. So war zum einen die Benutzerschnittstelle äusserst unkonventionell und
erforderte einigen Einarbeitungsaufwand. Zudem gab es öfters Abstürze der Wartungstools. Zu
____________________________________________________________________________
4
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
bemerken bleibt, daß MySQL keine referentielle Integrität garantiert. Der JDBC-Treiber
funktionierte für die recht einfachen Queries der Anwendung mit Statements und
PreparedStatements problemlos.
Außer dem oben bemängelten komplexen API traten mit der Mail API keine Probleme auf. Die
Sun Implementation funktionierte stets zuverlässig zum Mail-Versand per SMTP.
Der File-Upload war recht schnell und problemlos zu implementieren. Wir verwendeten die
Mulitpart-FileUpload Klassen von Servertec. Sie stellen alle nötigen Funktionen für den File
Upload zur Verfügung. Das parsen von HTTP Multipart-Form Requests stellt dabei die
wichtigste Funktion dar. Die Klassen bieten Methoden, die diese Aufgabe übernehmen. Es wird
eine Hashtable zurückgegeben, welche die FileUpload-Objekte enthält. Diese können benutzt
werden, um Eigenschaften der hochgeladenen Dateien, zum Beispiel Name und ContentType,
zu bestimmen.
TogetherJ ist inzwischen ein erwachsenes UML CASE-Tool, das den Vergleich mit Rational
Rose nicht zu scheuen braucht. Im Gegensatz zu Rose benutzt TogetherJ den Quellcode als
einzigen Ort zur Datenablage, so ist gewährleistet, daß Modell und Code immer synchron sind.
Bei unserem Projekt kam TogetherJ in der Anfangsphase fuer das Design der Use Cases und
der Klassendiagramme zum Einsatz. Sicherlich wäre für ein Projekt in der Grössenordung
unserer Anwendung auch ein einfaches Grafikprogramm oder Diagrammtool wie Visio
ausreichend gewesen, doch stand auch hier eher der Gedanke der Tool Evaluierung in Bezug
auf Funktioalität und Anwendbarkeit im Fordergrund.
Anfangs stand uns nur die Whiteboard-Edition zur Verfügung. Obwohl man damit durchaus
einen Enblick in das Produkt erhalten kann, fehlten selbst für unsere geringen Anforderungen
einige wichtige Funktionen, die den sinnvollen Einsatz erschwerten. Mit der befristeten
Hochschul-Lizenz, die vom Funktionsumfang her der Vollversion entspricht, konnten wir dann
aber produktiv arbeiten.
JBuilder erwies sich als kostengünstige und äusserst ausgereifte Entwicklungsumgebung. Da
die Version 4.0 nun auf JDK 1.3 aufbaut, das unter Win32 eine erheblich beschleunigte
Grafikdarstellung bei Swing-Applikationen hat, ist das Arbeiten gegenüber älteren Versionen
merklich weniger zäh. Die kostenpflichtige Enterprise-Version bietet sogar direkt Tools zur
Entwicklung von CORBA IDLs und integriert CVS.
Die Teammitglieder, die CVS noch nie benutzt hatten, hatten ursprünglich leichtere
Verständnisprobleme mit der Funktionsweise des Systems. Nachdem diese aus dem Weg
geschafft waren, gab es immer wieder Situationen, in denen ein Update nicht sichtbar wurde.
Alle waren auf Bedienungsfehler zurückzuführen, aber sorgten stets für Frust, weil es viel Zeit
kostete, den Grund zu finden und zu beheben. Zudem kam es öfters vor, daß binäre Files
versehentlich ohne die Option –kb eingecheckt wurden und somit nur bis zum ersten carriage
return im Repository waren.
Ant war für jemanden, der vorher schon Make verwendet hatte, sehr einfach anhand von
Beispielen zu erlernen. Es bietet viele Vorteile gegenüber Make, z.B. einfacher Umgang mit
Unterverzeichnissen, einfache Integration von CVS und Javadoc und bessere Abstimmung auf
Java. So muß zum Beispiel nicht für jeden einzelnen Kompiliervorgang eine neue JVM gestartet
werden, was viel Zeit spart. Bugs konnten wir nicht feststellen, die Anwendung war, sobald die
build.xml erstellt war, denkbar einfach.
Für Verwirrung sorgte auch die Handhabung von Dateipfaden. Da sie in Windows und UNIX
unterschiedlich aufgebaut werden, kann dies schnell zu Exceptions beim Schreiben oder
Auslesen von Dateien führen.
Insgesamt muss gesagt werden, dass das Aufsetzen der kompletten Entwicklungsumgebung
nicht trivial war und einiges an Zeit in Anspruch nahm, besonders weil einige der Komponenten
Neuland für die meisten Teammitglieder waren. Die Installation der einzelnen Tools war
besonders unter Windows kein Problem. Die Integration aller Komponenten in ein
harmonierendes Entwicklungssystem, mit Einbindung aller notwendigen Libraries und
____________________________________________________________________________
5
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
Debugging für Servlets und CORBA Services direkt in der Entwicklungsumgebung, erforderte
doch einiges an Einarbeitungszeit.
3.3 Prozess
Zur Entwicklung der Software wurde zunächst ein iterativer Prozess mit zwei Iterationen
vorgeschlagen. Nach der ersten Iteration sollte eine Implementation des Systems ohne CORBA
funktionsfähig sein. Die zweite Iteration sollte dazu dienen, CORBA in das System einzufügen.
Dieser Ansatz erwies sich leider als unpassend, da eine nachträgliche Umstellung auf CORBA
zu viel Redesign erfordert hätte. Glücklicherweise fiel uns dieser Umstand recht früh auf. Wir
entschieden dann, die beiden Iterationen zu einer zusammenzufassen.
Die Komponenten des Systems wurden in folgender Reihenfolge entwickelt:



Datenbankschema
IDL für den Datenbank-Wrapper
Zeitgleich: Datenbank-Wrapper und Servlets
Die Reihenfolge erwies sich als gut, wobei aber bei der zeitgleichen Entwicklung von Wrapper
und Servlets ein erhebliches Maß an Kommunikation zwischen den beiden Teams nötig war,
um sich über den aktuellen Stand der Implementation auf dem Laufenden zu halten. Hierfür
erwies sich aufgrund der räumlichen Verteilung der Projektmitglieder das Instant Messaging
Tool ICQ als äusserst hilfreich.
____________________________________________________________________________
6
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
4 Zusammenfassung
Insgesamt betrachtet funktionierte die Teamarbeit äußerst gut, unter anderem weil sich alle
Teammitglieder schon länger kannten und gut miteinander zurecht kamen.
Das technische Zusammenspiel der Komponenten funktionierte ebenfalls äußerst gut. Wie
schon erwähnt, macht der Aufbau einer entsprechenden Programmierumgebung einen nicht
unerheblichen Teil des gesamten Arbeitsaufwandes aus. So schlug die Selektion der
verwendeten Tools sowie deren sinnvolle Integration durch Anpassung von
Konfigurationsdateien und Erstellung von entsprechenden Batch-Dateien mit schätzungsweise
30% des Projektaufwandes zu Buche. Bei grüßeren Projekten relativiert sich dieser einmalige
Aufwand allerdings recht schnell.
Zu bemerken bleibt, daß die Software nicht unter Last getestet wurde, die oben beschriebenen,
recht positiven, Ergebnisse hätten unter Last anders ausfallen können.
____________________________________________________________________________
7
Student Guide Java Client/Server
Photo Communities, CN7 WS00/01
5 Links
Abschließend noch eine Sammlung mit Links zu den verwendeten Tools. Neben dem Download
der Softwarepakete findet man hier natürlich auch Dokumentation zu den Werkzeugen.
Weiterhin sei auch immer auf die zu den Tools mitgelieferte Dokumentation verwiesen, die in
der Regel eingehende Installationsanweisungen und Beispielkonfigurationen bietet.
Java JDK & APIs:
Jakarta Tomcat:
Ant:
Jbuilder:
VisiBroker:
TogetherJ:
MySQL:
MySQL JDBC Driver:
http://java.sun.com/products
http://jakarta.apache.org/
http://jakarta.apache.org/ant/index.html
http://www.borland.com/jbuilder/
http://www.borland.com/visibroker/
http://www.togethersoft.com/
http://www.mysql.com/
http://mmmysql.sourceforge.net/
____________________________________________________________________________
8
Herunterladen