Projektarbeit Ausarbeitung.sxw

Werbung
Entwurf und Realisierung
eines webbasierten
Stellenmarktes für KLinform
Heiko Ulbrich
UNIVERSITÄT KAISERSLAUTERN
Fachbereich Informatik
AG Integrierte Kommunikationssysteme
Prof. Dr. P. Müller
Projektarbeit
Entwurf und Realisierung eines
webbasierten Stellenmarktes für KLinform
Kaiserslautern, Dezember 2002
Vorgelegt von:
Betreuer:
Heiko Ulbrich
Prof.
Dr. Paul Müller
Dipl.
Inform. Markus Hillenbrand
ABSTRACT
Diese Ausarbeitung beschäftigt sich mit der Erstellung eines webbasierten
Stellenmarktes im Portal KLinform. Der Stellenmarkt ermöglicht es, im Internet
Stellen aller Art zu inserieren und zu suchen.
Der Analyse der Anforderungen und Rahmenbedingungen für den zu
erstellenden Baustein schliesst sich die Vorstellung der zugrunde liegenden
Techniken Java, Java Server Pages und relationale Datenbanken an. Dem
konzeptuellen Entwurf folgt dann, teilweise anhand ausgewählter Beispiele, die
Vorstellung
der
Implementierung
einzelner
Aufgabengebiete
des
Stellenmarktes.
Eine Zusammenfassung aller wichtigen Punkte schliesst die Ausarbeitung ab.
Inhaltsverzeichnis
1 Überblick.........................................................................................................1
1.1 Das Portal KLinform.................................................................................1
1.2 Das Projekt Stellenmarkt.........................................................................3
2 Analyse...........................................................................................................4
2.1 Erste Anforderungsfeststellung................................................................4
2.2 Bestehende Angebote.............................................................................5
2.3 Attribute einer Anzeige.............................................................................8
2.4 Funktionalität..........................................................................................10
2.5 Zusammenfassung................................................................................12
3 Komponenten und Techniken.......................................................................14
3.1 Datenbanksysteme................................................................................14
3.2 MVC-Konzept.........................................................................................18
3.3 Java Server Pages.................................................................................19
3.4 Java - Beans..........................................................................................20
3.5 Apache Jakarta Project - Tomcat...........................................................21
3.6 Ablauf.....................................................................................................22
4 Konzeptioneller Entwurf................................................................................23
4.1 Datenbank Schema...............................................................................23
4.2 Benutzerführung....................................................................................24
4.3 Beans, Cronjobs....................................................................................27
4.4 Sicherheit...............................................................................................27
5 Implementierung...........................................................................................29
5.1 Datenbank..............................................................................................29
5.2 Realisierung des MVC Konzepts...........................................................30
5.3 Personalisierung....................................................................................37
5.4 Gültigkeitsüberprüfung...........................................................................39
6 Zusammenfassung........................................................................................40
Quellenverzeichnis...........................................................................................42
A Anhang.........................................................................................................43
v
Abbildungsverzeichnis
Abbildung 2.1 Suchmaske - www.stellenmarkt.de..............................................6
Abbildung 2.2 Suchmaske - www.berlin-job.de...................................................7
Abbildung 2.3 Komponenten des Stellenmarktes.............................................13
Abbildung 3.1 Beispiel zu Relationen ...............................................................16
Abbildung 3.2 SQL Beispiel .............................................................................16
Abbildung 3.3 JDBC Verbindung zur Datenbank..............................................18
Abbildung 3.4 MVC Konzept (konkretisiert)......................................................19
Abbildung 3.5 JSP Beispiel ..............................................................................20
Abbildung 3.6 Beispiel einer Bean ...................................................................21
Abbildung 4.1 Entity Relationship Diagramm....................................................23
Abbildung 4.2 Ablauf "Suche"...........................................................................25
Abbildung 4.3 Ablauf "Inserieren"......................................................................26
Abbildung 4.4 Ablauf "Verwaltung"....................................................................26
Abbildung 4.5 Sicherheitsebenen......................................................................28
Abbildung 5.1 SQL Beispiel zum Einfügen (Methode in DB-Bean)...................31
Abbildung 5.2 SQL Beispiel zum Verändern (Methode in DB-Bean)................32
Abbildung 5.3 Auto-Commit Abschaltung..........................................................32
Abbildung 5.4 View - Beispiel............................................................................33
Abbildung 5.5 Controller - Beispiel....................................................................35
Abbildung 5.6 Suchprofile - Suchmethode........................................................38
Abbildung A.1 Einstiegsseite - KLinform ..........................................................43
Abbildung A.2 Relationenmodell ......................................................................44
Abbildung A.3 UML-Klassendiagramm.............................................................45
vi
1 Überblick
1 Überblick
Spätestens seit Mitte der Neunziger Jahre des letzten Jahrhunderts ist das Internet in
aller Munde. Für viele Menschen anfangs als Informationsquelle verstanden,
entwickelte sich das Internet zunehmend hin zu einem großen Angebot
verschiedenster Dienste. Ein Großteil des Erfolges des Internets beruht auf der
Möglichkeit, ortsungebunden Angebote wahrzunehmen. So kann der vernetzte
Nutzer von zu Hause aus ein webbasiertes Angebot wahrnehmen. In dem hier
betrachteten Fall handelt es sich um das Szenario eines Arbeitssuchenden. Er kann
ohne Zeitverzögerung nach Anzeigen suchen, ist nicht auf herkömmliche
Printmedien angewiesen und kann Zusatzmöglichkeiten ausschöpfen, die ihm das
Auffinden einer Arbeitsstelle erleichtern sollen. Dieses Angebot wird in einem Portal
zur Verfügung gestellt.
1.1 Das Portal KLinform
Ein Portal im Internet versucht, bestimmten Nutzergruppen und Informations- sowie
Angebotsbedarfen entgegenzukommen, indem es einen auf diese Gruppe
zugeschnittenen Internetauftritt realisiert.
KLinform realisiert als Portal für die Region Kaiserslautern einen großen Katalog an
Angeboten unter einem Dach. So finden sich Angebote aus den Bereichen Märkte,
Dienstleistung, Service, Information, Multimedia und Lebenslagen.
KLinform hat sich das Lebenslagenkonzept zu eigen gemacht. Es versucht anhand
von Lebenslagen ein speziell auf den Benutzer zugeschnittenes Angebot zu
präsentieren. So werden Informationen und Dienste zusammengestellt, die für einen
Menschen in einer bestimmten Lebenslage oder Situation von Belang sein könnten.
Der Betrachter spart sich somit den Aufwand, eine Vielzahl von Angeboten einzeln
zu suchen, anzusteuern und eventuell als nicht relevant erachten zu müssen. Diese
Vorauswahl wird von KLinform vorgenommen. Verflechtungen einzelner Lebenslagen
sind beabsichtigt und von KLinform zu berücksichtigen. So wird beispielhaft einem
Sportler eine Ansammlung von Informationen über Vereine, Clubs, Umgebung, und
gewerblichen Fitnesseinrichtungen präsentiert werden.
1
1 Überblick
Ein
weiteres
Augenmerk
von
KLinform
ist
das
Personalisierungskonzept.
Personalisierung bezeichnet für ein Internetportal den Vorgang, das Angebot den
Bedürfnissen eines Benutzers anzupassen, indem dessen Verhalten analysiert oder
explizite Angaben zu seinen Präferenzen eingeholt werden. Missbrauch ist leider
vielmals auf der Seite der automatisierten Analyse von Benutzerverhalten zu finden.
Durch Verfolgung eines Benutzers innerhalb eines oder mehrerer vernetzter
Angebote werden Rückschlüsse über dessen Bedürfnisse und Gewohnheiten
gezogen, um ihn zum Beispiel gezielt mit Informationen zu versorgen, die er nicht
explizit angefordert hat. Jeder Internetbenutzer, der Email zur Kommunikation mit
anderen Menschen benutzt, wird früher oder später feststellen, dass seine EmailAdresse Dritten zugänglich gemacht für deren Zwecke missbraucht wurde. Dem
Schutz der Benutzerdaten muß also ein hohes Maß an Aufmerksamkeit gewidmet
werden. In diesem Zusammenhang wird die explizite Aufforderung zu Angaben,
seitens des Benutzers von einem System, als die vom Konzept her bessere Form
angesehen.
Dem Benutzer, der auf KLinform zugreift, wird eine strukturierte Übersicht der
Angebote gezeigt, von der aus er dann zu den einzelnen Unterpunkten weiter
navigieren kann.3
Um eine verständliche Benutzerführung zu gewährleisten, wurde bei KLinform darauf
geachtet, alle Bedienelemente in Aussehen und Funktion gleich zu gestalten. Dies
erleichtert dem unerfahrenen Benutzer die Navigation und sollte eines der primären
Ziele eines jeden Internetauftritts sein. KLinform realisiert dies durch Stylesheets. Sie
sind Vorlagen für Elemente einer Internetseite. So wird zum Beispiel für eine Tabelle
das Aussehen von Rahmen, Hintergrund und Schriftausrichtung festgelegt. Diese
Festlegung ermöglicht es, das Aussehen des gesamten Portals an einer zentralen
Stelle zu verändern. Bei der Realisierung einzelner Seiten muss nur noch dieses
Stylesheet eingebunden werden. Das Aussehen von Tabellen bedarf so nicht in
jedem Fall einer neuen Festlegung, was den Erstellungsaufwand erheblich
vereinfacht und beschleunigt.
KLinform liegt eine relationale Datenbank (PostgreSQL) zugrunde, in der die
anfallenden Daten abgelegt und aus der sie wieder extrahiert werden können, sowohl
3 Abbildung A.1
2
1 Überblick
von Benutzern des Portals als auch dessen Administratoren.
1.2 Das Projekt Stellenmarkt
KLinform ist über einen längeren Zeitraum gewachsen und verfügt mittlerweile über
eine Vielzahl von Komponenten. Ziel der hier vorliegenden Projektarbeit ist es, einen
Stellenmarkt zu implementieren, der sich nahtlos in den Verbund der übrigen
Komponenten von KLinform einfügt. Benutzern soll das Auffinden von zuvor
geschalteten Anzeigen für einen Kontakt zwischen Arbeitgeber und Arbeitnehmer
ermöglicht werden. Dazu muss den Arbeitgebern die Möglichkeit gegeben werden
Stellen zu inserieren, die der Benutzer über eine Suchfunktion auffinden kann.
Im Folgenden wird eine Analyse der Anforderungen an eine Komponente
Stellenmarkt durchgeführt, um daraus die Rahmenbedingungen für Entwurf und
Implementierung des Systems festzulegen. Es soll weiter auf bestehende Angebote
eingegangen und eine Einschätzung der benötigten Funktionalität für einen
regionalen Stellenmarkt getroffen werden.
3
2 Analyse
2 Analyse
Beim Aufsuchen eines bestehenden Stellenmarkts im Internet ist es für den Benutzer
zuerst einmal wichtig, wie bekannt dieser ist. Ist ein Stellenmarkt wenig bekannt, so
kann er bei aller Funktionalität sein größtes Problem erst einmal nicht ablegen: Sein
vorhandener Datenbestand ist klein und zieht somit nicht viele Arbeitssuchende an.
Hier ist festzustellen, dass ein integriertes Portal wie KLinform möglicherweise den
Vorteil bietet, dass die Vielzahl von Angeboten auf Dauer eine größere Menge an
Interessierten anziehen wird als viele einzelne, unabhängige Angebote. Der
Benutzer, der erst einmal nur ein Angebot von KLinform aufgesucht hat und durch
die Einstiegsseite einen Überblick über die Vielfalt von Angeboten bekommen hat,
wird in Zukunft im Idealfall für andere Interessen wieder auf KLinform zurückgreifen.
Dennoch ist durch die regionale Ausrichtung des Portals auch die Begrenzung des
Stellenmarktes auf die Region gegeben.
2.1 Erste Anforderungsfeststellung
Grundsätzlich gibt es im Leben eines Menschen verschiedene Phasen, in denen er
Arbeit sucht.
Während seiner Schulzeit ist er nicht unbedingt bezüglich seines Berufswunsches
festgelegt und möchte eventuell ein Praktikum absolvieren, um einen Einblick in
einen Berufszweig zu bekommen. Gleiches kann für Studenten gelten, die
verpflichtend oder aus persönlichem Interesse ein Praktikum ablegen möchten. Im
Anschluss an die Schulzeit schließt sich für die meisten Menschen die Phase der
Ausbildung an, die ebenfalls als Arbeitsverhältnis für einen Stellenmarkt in Betracht
zu ziehen ist. Den größeren Anteil der Angebote werden Arbeitsstellen aller
Berufsfelder umfassen, die nach erfolgter Ausbildung aufgenommen werden.
Somit ist die erste Unterscheidung nach Jobtyp in Praktikumsplatz, Ausbildungsplatz
und Arbeitsstelle festzuhalten.
Gegeben durch die verschiedenen Berufsfelder und Aufgabengebiete ist eine
Unterteilung in Rubriken notwendig. Dies dient der Bündelung von Angeboten zu
Mengen gleich ausgerichteter Angebote.
In den einzelnen Berufsfeldern sind verschiedene Arbeitsstellen anzutreffen, die
weiter
nach
Stellentitel,
gewünschter
Ausbildung
und
Arbeitsverhältnis,zu
4
2 Analyse
unterscheiden sind.
Somit lässt sich zusammenfassend die Grundmenge der Merkmale eines Angebots
innerhalb eines Stellenmarktes festhalten:
–
Jobtyp (Praktikum, Ausbildungsplatz, Arbeitsstelle)
–
Rubriken (Berufsfelder)
–
Stellentitel (Bezeichnung der Stelle)
–
Ausbildung (Titel, Ausbildungsgrad eines potentiellen Bewerbers)
–
Arbeitsverhältnis ("Vollzeit", "Teilzeit", "Nebenjob" und "Freie Mitarbeit")
2.2 Bestehende Angebote
Anhand einiger Beispiele von bereits bestehenden Stellenmärkten sollen bestimmte
Aspekte aufgegriffen werden, die für das konkrete Projekt von Belang sind. Auch
eine allgemeine Analyse dieser Angebote folgt in dieser Arbeit. Mittels verschiedener
Suchmaschinen konnte eine Vielzahl bestehender Stellenmärkte aufgefunden
werden. Hierbei ist eine Unterteilung in verschiedene Kategorien von Angeboten
festzuhalten.
2.2.1 Allgemeine Stellenmärkte
Sie versuchen eine Universallösung für Arbeitgeber und Arbeitnehmer zu realisieren.
Sie sind landesweit, branchenunabhängig, für Arbeitgeber je nach Popularität des
Angebots kostenpflichtig und bieten Suchfunktionen, Anlegen von Angeboten,
Lebensläufen und Registrierung von Benutzern. Durch ihre universelle Auslegung
verfügen sie über eine Vielzahl von Angeboten, aus denen ein Benutzer auswählen
kann. Hier spielt sicherlich der Aspekt der Mobilität eines Arbeitssuchenden eine
große Rolle. Auf ortsgebundene Arbeitssuchende wird eingegangen, indem der
Suchbereich regional oder ortsspezifisch eingegrenzt werden kann. Als Beispiele
großer Stellenmärkte (definiert über die Anzahl der Einträge) seien Monster
[Monster.de], jobpilot [Jobpilot.de] und Stellenmarkt Online [Stellenmarkt Online]
genannt. Bei der Arbeitssuche wird dort meistens eine Einschränkung des Angebots
über
Berufsfeld,
verschiedene
Jobtypen,
Zeitraum,
Ort
und
Eingabe
von
Suchbegriffen vorgenommen. Einen Ausschnitt einer Suchmaske zeigt beispielhaft .
Je mehr einschränkende Suchmöglichkeiten über verschiedene Attribute eines
Angebots angeboten werden, desto größer sollte das bereits vorhandene Angebot
5
2 Analyse
sein, um eine ausreichende Treffermenge für typische Anfragen zu erhalten.
Abbildung 2.1 Suchmaske - www.stellenmarkt.de
2.2.2 Regionale Stellenmärkte
Regionen werden hier als Einzugsgebiet einer Großstadt, eines Landkreises oder gar
eines ganzen Bundeslandes verstanden. Diese Märkte beinhalten typischerweise
weniger Angebote als überregionale Angebote. So hat ein Berliner Stellenmarkt4 zum
Beispiel etwa 2000 Stellenangebote in seinen Datenbeständen. Die Suche gestaltet
sich einfach und unkompliziert. Eine Einschränkung der Suche über viele Attribute
bietet sich bei 2000 Angeboten nicht mehr an. Bei angenommener Gleichverteilung
einer Suche über einer Menge an Berufsfeldern, die für den Stellenmarkt angegeben
wurden, werden noch überschaubar viele Ergebnisse geliefert. Dennoch gibt es auch
dort eine Möglichkeit zur Volltextsuche, um speziellere Anfragen zuzulassen. (vgl. )
Da KLinform ebenfalls zu den regionalen Angeboten gehört, ist mit einem
Angebotsvolumen zu rechnen, das sich mit einer einfacher gestalteten Suche
ausreichend durchsuchen lässt.
4 http://www.berlin-job.de
6
2 Analyse
Abbildung 2.2 Suchmaske - www.berlin-job.de
2.2.3 Branchenspezifische Stellenmärkte
Ihre Spezialisierung liegt auf dem Gebiet der Berufsrubriken. So könnte sich zum
Beispiel im Raum Frankfurt ein Stellenmarkt für Fachkräfte aus der Finanzwirtschaft
anbieten. Für KLinform ist dieser Aspekt nicht interessant, da der Stellenmarkt zwar
nach verschiedenen Rubriken unterscheiden könnte, sich aber keinesfalls auf eine
Sparte festlegen darf. Ein Blick in eine Suchmaschine offenbart auf Anhieb einige
solcher Angebote.5
2.2.4 Informationsbereitstellung
Viele Unternehmen, Institutionen und Einrichtungen stellen Angebote für Stellen
direkt in ihre eigenen Webpräsenzen ein. Dies ist allerdings nicht mehr als
Stellenmarkt in dem hier zu betrachteten Fall zu verstehen. Die Suche nach solchen
Angeboten gestaltet sich aufwändig und führt meist nur bei gezielten Wünschen zum
Ziel.
2.2.5 Ausrichtung
Von nun an soll, wenn von einem Stellenmarkt gesprochen wird, der zu
5 http://www.jobperspektive.de/branchen.html
7
2 Analyse
implementierende Stellenmarkt in KLinform gemeint sein. KLinform als regional
ausgerichtetes Portal impliziert einen regionalen Stellenmarkt. Aus diesem Grund
kann eine Suchfunktion für den Stellensuchenden nur über wichtige Bereiche
gestaltet werden. Der Benutzer soll dennoch die Möglichkeit erhalten, alle wichtigen
Angaben zu einem Stellenangebot angeben zu können (Arbeitgeber), sowie auch
anzuschauen (Arbeitssuchender).
2.3 Attribute einer Anzeige
Eine grundlegende Orientierung für ein Internet-Stellenangebot im Portal bietet die
Analyse von Stellenanzeigen herkömmlicher Printmedien.
Ein solches Angebot kann in drei Bereiche aufgeteilt werden.
2.3.1 Stellenbeschreibung
Grundsätzlich ist der Typ des Angebots von Interesse. Hierbei handelt es sich um die
Angabe einer der drei Arten Praktikumsplatz, Ausbildungsplatz oder Arbeitsstelle
(s.2.1). Diese Angabe ist notwendig.
Das Berufsfeld und die Branche sind zusammen für die Mengenbildung von
Angeboten wichtig, da eine Vorauswahl aus den Angeboten vorgenommen werden
kann. Im Folgenden soll dies als Rubrik bezeichnet werden. Ihre Angabe ist
erforderlich. Für nicht einzuordnende Stellen ist eine Rubrik "Sonstige" vorzusehen.
Weiter charakterisierend ist eine Klassifizierung nach der Arbeitszeit, bzw. dem
Arbeitsverhältnis. Viele Menschen nehmen ihre Tätigkeit nicht mehr nur als
klassischen Vollzeitjob wahr, sondern oftmals bedingt durch familiäre Gründe nur als
Teilzeitarbeitende oder freie Mitarbeiter. Nebenjobs sind zahlreich vorzufinden und
können somit als eigenständige Gruppe angesehen werden.
Die Stellenbezeichnung ist von zentraler Bedeutung, da sie auf den ersten Blick eine
vorläufige Bewertung der Relevanz einer Stelle zulässt. Ihre Angabe ist ebenfalls
erforderlich.
Die Beschreibung der Aufgabengebiete des Arbeitnehmers ist von großem Interesse,
da es den Beruf in der Tätigkeit konkretisiert. Dies kann vom Benutzer frei
angegeben werden, da sehr differenzierte Angaben gemacht werden können. Ihre
Angabe sollte jedoch als zwingend erachtet werden, da eine Konkretisierung der
Stelle in den meisten Fällen sehr hilfreich für den Arbeitssuchenden ist.
8
2 Analyse
Weitergehende
Arbeitnehmer
Informationen
am
können
Arbeitsplatz
Weiterbildungsmöglichkeiten,
das
trifft
Umfeld
oder
Arbeitszeiten,
die
betreffen,
auf
Vergütung
Einsatzorte,
das
der
der
Arbeit,
Aufstiegschancen,
Vergünstigungen und Dauer der Arbeit. Kurzum alles, was der Arbeitgeber an
Beschreibungen
zur
Stelle
Ausgestaltungsmöglichkeiten
Zusammenfassung
all
dieser
angeben
möchte.
solcher
Informationen
Informationen
Aufgrund
als
der
wird
"Weitere
vielfältigen
hier
eine
Informationen"
vorgenommen. Diese Angaben sind optional.
2.3.2 Informationen zum Arbeitgeber
Sofern sie nicht den Tätigkeitsbereich des Arbeitnehmers umfassen, lassen sich hier
noch Ansprechpartner, die in großen Betrieben für bestimmte Personalbereiche
zuständig sind, die Identifikation des Arbeitgebers (Anschrift und Name der Firma),
Telefon, Telefax, E-Mail und Web-Adresse nennen, wovon lediglich die Identifikation
des Arbeitgebers zwingend für die Kontaktaufnahme erforderlich ist und die übrigen
Angaben als optional zu betrachten sind.
2.3.3 Angaben zum Arbeitnehmer
In erster Linie ist die Ausbildung oder der Schulabschluss von Interesse. Weitere
Angaben betreffen Anforderungen verschiedenster Art an den Kandidaten, die
soziale Fähigkeiten, fachbezogenes Spezialwissen, Motivation, Einsatzwillen und
weitere
Aspekte
umfassen,
die
der
Arbeitgeber
für
ein
reibungsloses
Zustandekommen und Vollziehen des Arbeitsverhältnisses als erforderlich erachtet.
Auch dieser Bereich wird zusammengefasst, da er viel Spielraum zu Ausgestaltung
durch den Inserenten zulässt.
Die Attribute eines Stellenangebotes, die teilweise sehr spezifisch, teilweise aber
auch
optional
oder
nicht
weiter
festgelegt
sind,
also
dem
Benutzer
Wahlmöglichkeiten hinsichtlich der Angaben lassen, sind somit festgelegt.
2.4 Funktionalität
Nun werden für das in 2.3 aufgespannte Feld von Attributen die operativen
Möglichkeiten angegeben werden. Es handelt sich um Aspekte der Benutzerführung
durch das Angebot, der Suchfunktion für die Angebote, Verwaltungsmöglichkeiten
9
2 Analyse
des Benutzers und Administrators, internen Datenmanagements und Funktionen, die
im Rahmen der Personalisierung möglich sind.
2.4.1 Vorgaben durch KLinform
Dem Benutzer ist durch Dateien, die in allen Seiten einzufügen sind, ein Rahmen
bezüglich umgebender Menüstruktur, Erscheinungsbild und benutzerspezifischer
Funktionalität gegeben. Unter Menüstruktur ist die Auswahlmöglichkeit des
Benutzers für die verschiedenen Bausteine von KLinform zu verstehen. Das
Erscheinungsbild ist zum Beispiel durch eine Kopfleiste und insbesondere den
Stylesheets geprägt. Hier muss erwähnt werden, dass KLinform Vorraussetzungen
an den Browser eines Besuchers der Seite stellt. Dies ist momentan Netscape in
Version 6 und, bezüglich des Standes der Implementierung von Web-Standards,
ähnliche Browser.
KLinform bietet bereits Funktionen, die für einen Stellenmarkt benötigt werden. Die
Registrierung von Benutzern, Verwaltung ihrer Daten und ein Schnellzugriffsmenü
sind bereits integriert, so dass der Stellenmarkt insbesondere auf die Login- und
Registrierungsfunktion zurückgreifen kann. Die Identifizierung eines Benutzers ist
nötig, damit ein Angebot einem Benutzer zugeordnet werden kann. Eine Firma, die
eine Stellenanzeige schalten möchte, muss sich vorher bei KLinform registrieren.
2.4.2 Benutzerführung
Der Stellenmarkt soll folgende Funktionen besitzen:
–
Inserieren von Angeboten
–
Verwaltung von Angeboten
–
Suche im Datenbestand
–
Personalisierung
–
Administration
2.4.3 Suchfunktion
Ausgehend von der These, dass es sich aufgrund der Regionalität um einen
Stellenmarkt
von
begrenztem
Angebotsaufkommen
handelt,
werden
dem
Arbeitssuchenden vier Möglichkeiten zur Einschränkung einer Suche angeboten. Er
grenzt das Gesamtangebot anhand von Jobtyp, Rubrik, Arbeitsverhältnis und einer
Suche mittels eingegebenem Begriff ein. Die Präsentation der Suchangabe erfolgt
10
2 Analyse
zweistufig. Es wird bei Treffern zuerst nur eine Übersicht anhand wichtiger Merkmale
angeboten. Über Verweise erfolgt dann die eigentliche Detailansicht aller Angaben
zu einem ausgewählten Eintrag.
2.4.4 Verwaltung
Ein Benutzer kann hier seine eigenen Einträge verwalten. Dazu gehört das
Verändern von Attributen, Löschen von Einträgen und eine Verlängerungsmöglichkeit
seitens des Inserenten, falls sich zum Beispiel kein geeigneter Kandidat für die Stelle
gefunden hat. Das Verändern der Attribute erfolgt innerhalb der gleichen
Eingabemaske wie bei einem Neueintrag, um die Bedienbarkeit zu erleichtern.
Löschen und Verlängern sind mittels zweier Icons zu realisieren, die beim Anklicken
die gewünschte Aktion starten.
2.4.5 Administration
Ein dem System als Administrator des Stellenmarktes angegebener Benutzer erhält
die Möglichkeit, einzelne Einträge direkt per Web-Interface zu löschen. Er soll hierbei
selektiv nach Rubrik und/oder Benutzer gefundene Einträge angezeigt bekommen.
Komplexere Möglichkeiten der Verwaltung werden nicht implementiert, das einfache
Löschen dient in erster Linie der Elimination von Einträgen, die ein Benutzer ohne
ernste Absichten eingefügt hat.
2.4.6 Datenmanagement
Alle Einträge sind mit einem Enddatum zu versehen, das vom System mittels einer
Systemvariablen, die in einer Konfigurationsdatei abgelegt ist, ermittelt wird. Das
System überprüft regelmäßig, ob ein Eintrag bald ausläuft und informiert den
Inserenten rechtzeitig per Email. Er erhält die Möglichkeit, den Eintrag um eine
gewisse Zeitspanne zu verlängern, die ebenfalls in einer Systemvariablen abgelegt
ist. Das System überprüft bei der Eingabe von Daten deren Plausibilität und
Korrektheit unter einigen Gesichtspunkten. Nicht-optionale Attribute müssen
angegeben werden. E-Mail Adressen und Webadressen werden auf syntaktische
Korrektheit
geprüft.
Nur
registrierte
Benutzer
erhalten
die
Möglichkeit,
Veränderungen jedweder Form an den Daten vorzunehmen. Dies stellt sicher, dass
kein Dritter die Einträge anderer ändern kann.
2.4.7 Personalisierung
Der Arbeitssuchende erhält die Möglichkeit, ein Stellenprofil anzugeben. Anhand
11
2 Analyse
dieses Stellenprofils wird zu fest gegebenen Zeitintervallen der Datenbestand
durchsucht. Suchtreffer werden dann dem Benutzer per Email zugesandt, woraufhin
er sich die betreffenden Angebote anschauen kann. Der Benutzer muss hierzu
registriert sein und eine Email-Adresse angegeben haben. Angebote, über die der
Benutzer bereits informiert wurde, werden ihm nicht erneut zugeschickt. Für die
Stellenprofile sind wie für die Stellenangebote Möglichkeiten zur Verlängerung,
Veränderung
und
Löschung
vorzusehen.
Ebenso
erfolgt
auch
hier
eine
Benachrichtigung über bald ablaufende Profile, die ebenfalls alle mit einem
Gültigkeitsstempel per Systemvariablen versehen werden.
2.5 Zusammenfassung
Nachdem ein grober Überblick über bestehende Stellenmärkte gewonnen werden
konnte,
sowohl
wichtige,
als
auch
optionale
Attribute
zu
einer
Anzeige
zusammengestellt und schließlich die Fähigkeiten des Stellenmarktes konkretisiert
wurden, wird nun auf die Konzepte, Techniken und Komponenten eingegangen, mit
denen der Stellenmarkt realisiert wird.
zeigt noch einmal die Komponenten des Stellenmarktes.
Suchfunktion
Angebot inserieren
Angebote verwalten
Arbeitgeber
Suchprofil angeben
Suchprofile Verwalten
Personalisierung
Arbeitssuchender
Administration
Administrator
Abbildung 2.3 Komponenten des Stellenmarktes
12
3 Komponenten und Techniken
3 Komponenten und Techniken
Sie bilden die Grundlage, um den Entwurf in die Praxis umzusetzen. Alle
verwendeten Techniken und Komponenten sind von KLinform vorgegeben und
werden nun in Vorbereitung der Entwurfsphase vorgestellt. Auf konkrete Entwürfe
und Implementierungen aus dem Stellenmarkt soll hier noch nicht eingegangen
werden.
3.1 Datenbanksysteme
Ein Datenbanksystem (DBS), gemeinhin als Datenbank bezeichnet, besteht aus der
Datenbank (DB) und dem Datenbankmanagementsystem (DBMS). Hierbei enthält
Erstere die eigentlichen Daten. Das DBMS realisiert die Verwaltung und den Zugriff
auf die Daten, die langfristig gespeichert werden sollen. [HÄRDER 1999] Das
Datenbanksystem soll einen hohen Grad der Datenunabhängigkeit aufweisen. Dies
bedeutet, dass unabhängig von der Art der Daten die Handhabung gleich ablaufen
soll. Ein DBS gewährleistet einen sicheren Mehrbenutzerbetrieb. Dies umfasst
sowohl die Kontrolle über die Zugriffsrechte auf Daten, wie auch die Absicherung
gegen mögliche Fehlerquellen wie gleichzeitiges Lesen und Schreiben eines
Datensatzes. Dies wird durch das Transaktionskonzept gewährleistet.
3.1.1 Transaktionsparadigma
Das Transaktionsparadigma definiert sich nach [HÄRDER 1999](7-2) wie folgt:
"Das Transaktionsparadigma befreit den DB-Anwendungsprogrammierer
von allen Aspekten des Fehlerfalls (failure transparency) und der
Nebenläufigkeit (concurrency transparency). Es erlaubt also eine
fehlerfreie Sicht auf die Datenbank im logischen Einbenutzerbetrieb."
Logischer Einbenutzerbetrieb heißt, dass keine nebenläufigen Transaktionen auf
gleichen Datensätzen konkurrierend operieren. Alle Aktionen, die als Transaktion
gekapselt sind, unterliegen weiterhin dem ACID-Prinzip. Es beschreibt die
Eigenschaften:
–
Atomicity: Eine Transaktion wird entweder ganz oder gar nicht durchgeführt;
niemals teilweise (selbst im Fehlerfall nicht)
13
3 Komponenten und Techniken
–
Consistency: Eine durchgeführte Transaktion beeinträchtigt nicht die Konsistenz
der
Datenbank.
(Konsistenz
bezeichnet
das
Einhalten
aller
definierten
Integritätsbedingungen)
–
Isolation: Ergebnisse einer Transaktion sind erst nach erfolgreicher Durchführung
sichtbar, keinesfalls aber Zwischenergebnisse.
–
Durability:
Nach
erfolgreich
durchgeführter
Transaktion
bleibt
diese
im
Datenbanksystem bestehen, unabhängig von dort auftretenden Fehlern.
Das Transaktionskonzept gewährleistet für Datenbanken, dass im vorliegenden Fall
des Stellenmarktes beim zu erwartenden Mehrbenutzerbetrieb stets eine korrekte
Sicht auf die Daten gewährleistet ist und keine inkonsistenten Zustände auftreten
können. Abgefangen wird auch der Fall, dass nebeläufige Transaktionen eines
Benutzers in Konflikt treten. Dies tritt durch die Anwendungslogik nur dann auf, wenn
ein Benutzer in zwei Sitzungen gleichzeitig DB-Operationen durchführt.
3.1.2 Relationales Datenmodell
Der Umsetzung von Daten in relationalen Datenbanksystemen liegt das relationale
Datenmodell zugrunde. Es basiert einzig auf der Datenstruktur der Relation. Sie wird
in Form einer Tabelle repräsentiert. Alle Informationen sind durch Werte dargestellt.
So sind zeilenweise die einzelnen Datensätze zu finden und spaltenweise die Werte
aller Datensätze zu einem Attribut. Um die Eindeutigkeit von Einträgen zu
gewährleisten, muss ein Primärschlüssel existieren. Er ist die kleinste Menge an
Attributen, die zusammen eine eindeutige Identifizierung eines Tupels (Datensatz)
gewährleisten. Gegebenenfalls muss ein künstlicher Schlüssel eingeführt werden. In
der Praxis sind dies sogenannte ID's, oft als fortlaufender Zähler realisiert. Soll eine
Beziehung zwischen mehreren Relationen realisiert sein, so wird ein Fremdschlüssel
in der Relation angegeben, der sich auf den Primärschlüssel einer anderen oder der
gleichen Relation bezieht.
zeigt
das
Beispiel
einer
Relation
mit
Primärschlüssel,
Attributen
und
Fremdschlüsseln.
14
3 Komponenten und Techniken
Firma
ID Name
Finanzamt
Amt ID
Ort
Name
1 Maurer Schmidt
1 München
1 München West
2 Maier Netzwerke
2 Augsburg
2 Augsburg
3 Maurer Schmidt
2 München
Primärschlüssel
Fremdschlüssel
Abbildung 3.1 Beispiel zu Relationen
3.1.3 SQL
Um mit Datenbanksystemen und den Daten in einer Datenbank arbeiten zu können,
bedarf es einer Datenmanipulations- und Datendefinitionssprache. Die weiteste
Verbreitung hat heute der in erster Version 1986 von ANSI akzeptierte
Sprachstandard SQL (Structured Query Language) für relationale Datenbanken. SQL
bietet umfangreiche Möglichkeiten zur Erstellung und Manipulation von Objekten.
Umfangreiche Dokumentationen lassen sich zum Beispiel auf den Internetseiten des
für die Projektarbeit verwendeten Datenbankmanagementsystems PostgreSQL
finden [POSTGRESQL]. Beispielhaft seien hier die Anweisungen für die Erstellung
zweier Tabellen mit Fremdschlüssel-Beziehung und einer Anfrage auf beide Tabellen
in SQL gegeben.
CREATE TABLE Student (
id INT NOT NULL,
name TEXT NOT NULL,
PRIMARY KEY (id) );
CREATE TABLE Projekt (
id INT NOT NULL,
kandidat INT NOT NULL,
betreuer INT NOT NULL,
projektname TEXT NOT NULL,
beschreibung TEXT NOT NULL,
bemerkungen TEXT,
beginn DATE NOT NULL,
guelt DATE,
PRIMARY KEY (id),
FOREIGN KEY (kandidat) REFERENCES Student(id),
FOREIGN KEY (betreuer) REFERENCES Student(id) );
SELECT Student.name
FROM Student, Projekt
WHERE Projekt.kandidat=Student.id;
Abbildung 3.2 SQL Beispiel
Die Tabelle
Student
speichert einen Namen, der später ausgegeben werden soll. Die
Ausgabe sucht den Namen aus
Student,
dessen zugehörige
id
gleich dem
15
3 Komponenten und Techniken
Fremdschlüssel (kandidat) von
die Datenbank, ob
kandidat
Projekt
als
id
ist. Beim Eintragen eines Tupels in
in
Student
überprüft
bereits vorhanden ist, sonst gibt sie eine
Fehlermeldung zurück. Alle Spalten, die als
Eintragen mit einem Wert belegt sein.
Projekt
NOT NULL
PRIMARY KEY
und
definiert sind, müssen beim
SECONDARY KEY
sind sogenannte
Constraints. Weitere Constraints können Einschränkungen von Definitionsbereichen
oder zum Beispiel Vergleiche zweier Spalten beinhalten.
3.1.4 Schnittstelle - JDBC, Poolmanager
Grundsätzlich besteht die Durchführung einer Datenbankoperation aus drei Schritten.
Es wird eine Verbindung zu einer lokalen oder entfernten Datenbank geöffnet, die
Befehle (in SQL) abgegeben und die Verbindung wieder geschlossen. Der Zugriff auf
die Datenbank kann über ein Kommandozeilentool geschehen, eine eigene
graphische Oberfläche oder Schnittstellen für verschiedenste Programmiersprachen.
Für Java ist dies das JDBC-API aus dem Paket
java.sql
(seit Version 1.1). Da Java
plattformunabhängig ist, ist dies auch JDBC. Um eine Verbindung per JDBC auf die
Datenbank zu erlauben, muss sie über einen entsprechenden JDBC-Treiber
verfügen.
KLinform setzt weiter einen sogenannten Poolmanager ein. Das Öffnen und
Schließen einer Verbindung für je eine Anfrage an die Datenbank erzeugt einen
erheblich größeren Aufwand als ständig je nach Bedarf einen "Pool" von
Verbindungen offen zu halten, die mehrfach benutzt werden können. Eine
Verbindung von einer Java-Applikation herunter bis zu einer Datenbank zeigt
in
Anlehnung an [Java pro 1999].
Ein Verbindungsaufbau zur Datenbank besteht schließlich aus dem schlichten Aufruf
getConnection();.
Die zu implementierende Klasse erweitert eine in KLinform bereits
bestehende Klasse AbstractDatabase, die diese Funktionalität gewährleistet.
16
3 Komponenten und Techniken
Java Applikation
mit Poolmanager
JDBC−API
DriverManager
Poolman JDBC−Driver
ohne Poolmanager
Connection Pool
JDBC−Treiber
DBMS
DB
JDBC−Treiber
DBMS
DB
DB
DB
Abbildung 3.3 JDBC Verbindung zur Datenbank
3.2 MVC-Konzept
Das Model-View-Controller Konzept (MVC) beschreibt eine Aufsplittung eines
Teilsystems in 3 Komponenten, die interagieren und wurde ursprünglich mit
Smalltalk80 eingeführt [Turau 2001]. Das Model-Objekt beinhaltet den internen
Zustand einer Komponente, sowie alle Informationen über die Anwendung und alle
darzustellenden Daten [Java pro 1999]. Die View ist für die Darstellung der Daten
aus dem Model-Objekt zuständig. Der Controller reagiert auf Eingaben des
Benutzers.
Er
leitet
Daten
an
das
Modelobjekt
und
informiert
es
über
vorzunehmende Änderungen. Somit sind Daten, Präsentation und Bearbeitung
voneinander getrennt. Durch die Trennung von Daten und Präsentation ist
gewährleistet, dass das Erscheinungsbild an nur einer Stelle verändert werden muß.
Gleiches gilt für den Controller, der zentral die Abläufe steuert. Änderungen am
Ablauf können an ihm vorgenommen werden. Sofern sich die Schnittstellen des
Model-Objektes nicht ändern, kann die interne Repräsentation der Daten verändert
werden, ohne dass View oder Controller verändert werden müssten. So lässt sich
zum Beispiel die Umstellung auf eine effizientere Datenstruktur oder schnellere
17
3 Komponenten und Techniken
Methode an einer Stelle realisieren. Dies ist bei der Verflechtung der drei
Komponenten oder einer Erweichung des Konzepts meist nicht mehr möglich.
Das MVC Konzept wird in KLinform auf Seiten des Models mittels Java-Beans
umgesetzt. Die Controller und View-Objekte sind mit Java Server Pages (JSP)
realisiert. Sie werden im Servlet Container Tomcat des Apache Jakarta Projects
eingesetzt. In der View werden HTML-Formulare benutzt, die Benutzereingaben
entgegennehmen. Sie sind als die Präsentation der Tastatureingabe anzusehen,
während die Bearbeitung der eingegebenen Daten dem Controller Objekt obliegen,
welches die Daten übermittelt bekommt. Auf diese Weise ist eine Trennung der
Objekte gewährleistet und das MVC Konzept realisiert. veranschaulicht noch einmal
das zugrunde liegende MVC Konzept.
View
JSP
Controller
JSP
Model
Java Bean
Abbildung 3.4 MVC Konzept (konkretisiert)
3.3 Java Server Pages
Sie sind, wie der Name schon sagt, auf Seiten des Webservers zu finden. Java
Server Pages (JSP) integrieren Java Beans als Komponenten in Webseiten und sind
syntaktisch Java-Code in Verbindung mit HTML.
Eine Seite hat die Struktur einer HTML Seite mit eingebetteten JSP Anweisungen,
wobei kein HTML-Code vorhanden sein muß. Diese Anweisungen kontrollieren oder
beeinflussen die Ausgabe, wie auch die ablaufenden Aktionen. Eine JSP Seite wird
übersetzt in den Bytecode eines Java-Servlets. Sie laufen als Service auf einem Web
Server ab; im vorliegenden Fall in Tomcat. Ihre Ausgabe wird an den Client
weitergeleitet. Eine JSP-Seite könnte beispielhaft so aussehen:
18
3 Komponenten und Techniken
<html>
<head>
<title>Hello World</title>
</head>
<body bgcolor="#FFFFFF">
<jsp:useBean id="mytestclass" scope="page" class="test.class">
<jsp:setProperty name="mytestclass" property="text" value="Hello World"/>
</jsp:useBean>
<% String myString = mytestclass.getText();
if (mystring.length() > 0)
out.print("<h1>"+mystring+"</h1>");
else out.print("Hello World not found!");
%>
</body>
</html>
Abbildung 3.5 JSP Beispiel
In diesem Beispiel wird die Verwendung einer Bean gezeigt, die über eine getMethode für die Property text verfügt. Eine Dokumentation zu JSP ist auf den
Dokumentationsseiten der Firma Sun Microsystems zu finden [JSP Docs]. Java
Server Pages sind portabel, insofern sich Entwickler an einen Standard halten und
die betroffenen JSP Server diesen Standard einhalten und implementieren.
3.4 Java - Beans
Java Beans ist die Realisierung einer Software-Komponententechnologie
für Java. ... definiert Sun Beans als wiederverwendbare Software-Einheiten,
die mit einem visuell arbeitenden Tool zu größeren Software-Paketen oder
Programmen zusammengesetzt werden können.
[Java pro 1999](S.799)
Es existieren lediglich Anforderungen an Java Beans, die als Anweisungen
verstanden werden, um mit visuellen Tools zusammenarbeiten zu können. Für die
vorliegenden Zwecke in Bezug auf die Verknüpfung von Beans mit JSP ist es primär
von Interesse, dass es zu jeder Property (Attribut) ein Paar von public-Methoden gibt.
Properties sind nach außen sichtbare Eigenschaften. Dies können primitive
Datentypen oder Klassen sein. Für jede solche Property gibt es eine get- und eine
set- Methode, über die die Properties abgefragt werden können. Die einfachste Form
einer Bean könnte so aussehen:
19
3 Komponenten und Techniken
package own.beans;
public class MyId {
int id=0;
public void setId(int x) {
this.id=x;
}
public int getId() {
return this.id;
}
public boolean validate() {
return true;
}
}
Abbildung 3.6 Beispiel einer Bean
In den Java Server Pages wird auf eben diese Methoden zurückgegriffen. Dies
geschieht nach der Einbindung mittels useBean über zwei äquivalente Konstrukte:
<jsp:useBean id="testbean" scope="page" class="own.beans.MyId.class" />
<jsp:getProperty name="testbean" property="id"/>
oder <%= testbean.getId() %>
Somit ist das Grundkonzept und die Verknüpfung von JSP und Java Beans in den
wichtigsten Zügen dargestellt.
3.5 Apache Jakarta Project - Tomcat
Tomcat ist der verwendete Servlet Container. Er steht unter der Apache Software
License [Apache License] und ist somit ein Open Source Projekt, an dem jeder
partizipieren kann. Er stellt die offizielle Referenzimplementierung der Java Servlet
und Java Server Pages Spezifikationen von Sun Microsystems dar [Jakarta-Tomcat].
Tomcat läuft als selbstständiger Webserver oder als Modul eines anderen
Webservers (Apache, IIS, Netscape Server). Als Modul liefert der Webserver die
statischen Seiten an den Client und leitet Servlet Requests an Tomcat weiter.
Tomcat liegt mittlerweile in Version 5 vor. KLinform setzt momentan Version 4 ein,
während die Entwicklung dieser Projektarbeit auf Tomcat-3.2.4 entstand.
3.6 Ablauf
Zusammenfassend sei noch einmal der Ablauf, der mit den vorgestellten
20
3 Komponenten und Techniken
Komponenten durchgeführt werden soll, dargestellt.
Die abzubildenden Daten werden mit dem Relationenmodell modelliert. Dieses wird
mit SQL-Anweisungen in die Datenbank übertragen. Die entstandenen Tabellen sind
evtl. noch mit festen Einträgen zu versehen. Die für den Benutzer zu bearbeitenden
Daten
sind
mit
Beans
über
JDBC
und
den
Poolmanager
für
den
anwendungsgerechten Zugriff aufzubereiten. Abgesehen von den get- und setMethoden sind je nach Anwendungszweck weitere Methoden zu implementieren, auf
die aus den JSP-Seiten heraus zugegriffen werden kann. Die Präsentation ist in View
Komponenten zu gestalten, die Anwendungslogik in Controller-Objekten. Es gibt
mehrere
Controller-Objekte,
die
für
jeweils
einen
Anwendungsfall
des
Gesamtsystems zuständig sind.
Im folgenden Kapitel wird nun der Entwurf des Stellenmarktes für KLinform
durchgeführt und anhand wichtiger Teile diskutiert.
21
4 Konzeptioneller Entwurf
4 Konzeptioneller Entwurf
In diesem Kapitel wird die Struktur auf den verschiedenen Ebenen festgelegt werden,
ohne auf Details der Implementierung einzugehen.
4.1 Datenbank Schema
Anhand eines Entity-Relationship Diagramms wird das Datenschema entworfen.
–
Entity "Rubrik": Enthält die Berufsfelder und -branchen
–
Entity "Jobtyp": Enthält die verschiedenen Jobtypen (s.S. 4)
–
Entity "Arbeitsverhältnis": Enthält die Beschäftigungsverhältnisse
–
Entity
"Angebot":
Enthält
ein
komplettes
Angebots-Objekt,
Relationships
(Beziehungen) zu den Personen zur Identifizierung des Inserenten, zur Rubrik für
das Berufsfeld und zum Jobtyp zur Charakterisierung
–
Entity "Suche": Enthält die Suchprofile zur Durchführung einer benutzerorientierten
Datenbestandsanalyse; Referenzen auf den zu informierenden Benutzer, sowie
den Jobtyp
–
Entity "Person": Bereits in KLinform vorhanden, Beziehungen von Angebot und
Suche auf Person vorhanden
KLinform
Stellenmarkt
inseriert
1
1
Person
inseriert
n
n
Suche
ist
n
Angebot
1
n
n
n
Rubrik
1
Arbeitsverhältnis
ist
1
Jobtyp
ist
1
ist
Abbildung 4.1 Entity Relationship Diagramm
Einem Angebot sind je genau ein Benutzer, eine Rubrik, ein Arbeitsverhältnis und ein
22
4 Konzeptioneller Entwurf
Jobtyp zugeordnet. Gleiches gilt für die Entity Suche, der nur je ein Benutzer und
Jobtyp zuzuordnen sind. Von Rubrik, Arbeitsverhältnis und Jobtyp können je 0..n
Beziehungen zu Angeboten oder Suchprofilen bestehen. Somit ergibt sich das ERDiagramm aus Abbildung 4.1.
4.2 Benutzerführung
Die Umsetzung des MVC Konzeptes gestaltet sich durch einen Ablauf von
Controllern und Views. Alle Beans, die für eine Sitzung benötigt werden können,
sollen per
<useBean...>
<...scope="session"...>
eingefügt werden. Die angeforderten Beans werden per
für die ganze Session eines Benutzers zur Verfügung gestellt.
Meldet sich der Benutzer ab, erlischt seine Session. Ausnahme bildet eine separate
Bean für alle Datenbankoperationen, sie wird mit dem Attribut
<...scope="application"...>
geladen und steht somit, einmal geladen, für alle JSP-Seiten des Stellenmarktes zur
Verfügung. Alle notwendigen Java Pakete werden per
in einer
include-Datei
<%@ page import="paket.*" %>
zur Verfügung gestellt, wie etwa im Header der Seite. Der
Einstieg in den Stellenmarkt geschieht mit der Präsentation der verschiedenen
Aufgabenbereiche "Profile inserieren und verwalten", "Suche", "Angebote inserieren
und verwalten", sowie der "Administration". In Abhängigkeit davon, ob der Benutzer
angemeldet ist, wird nur die Suche und Verweise auf die weiteren Möglichkeiten
angeboten. Hat der Benutzer bereits Einträge vorgenommen, erscheinen die
Verweise auf die Verwaltungsseiten seiner Einträge. Ist der Benutzer Administrator
des
Stellenmarktes,
erscheint
auch
der
Verweis
auf
die
entsprechende
Administrationskomponente. Dies kann als Aspekt der Personalisierung nach
Benutzerklassen betrachtet werden, da bestimmte Angebote nur nach Bedarf
beziehungsweise Autorisation eingeblendet werden. Die Hauptseite gestaltet das
Menü für den Umgang mit dem Stellenmarkt. Von jedem der Punkte wird ein
Wechsel von Controller und View-Seiten begonnen, die jeweils Möglichkeiten der
Benutzereingabe präsentieren (View) und diese bearbeiten bzw. auswerten
(Controller). Im Controller wird die eigentliche Logik eines Anwendungsteils
implementiert. Er verzweigt je nach Situation auf weitere Controller, eine
Erfolgsmeldung bei einer Datenbankänderung und zurück zum Hauptmenü. Sofern
der Benutzer Angaben in einer Maske machen muss, überprüft der Controller diese
nach Möglichkeit auf Plausibilität oder Vorhandensein bei Pflichtangaben.
23
4 Konzeptioneller Entwurf
Nun soll in einer Übersicht für jeden der Anwendungspunkte der Ablauf skizziert
werden.
4.2.1 Suche
Die Suche erfolgt mittels Eingabe von Jobtyp, Rubrik, Arbeitsverhältnis oder
Suchbegriff und ihrer Bearbeitung. In der View soll eine Übersicht mit Kurzeinträgen
präsentiert werden, sowie jeweils ein Verweis auf detailliertere Informationen:
Menü
Controller
Eingabe von
Typ/Rubrik/Begriff
View
detail
Controller
Abbildung 4.2 Ablauf "Suche"
4.2.2 Angebot, Suchprofil inserieren/verwalten
Der Controller gibt Rückmeldungen nach schon erfolgten Eingaben über falsche oder
fehlende Eingaben an die View zurück. Wurden Verbesserungen an ihnen
vorgenommen und der Eintrag validiert, kann der Datensatz in die Datenbank
übernommen werden. Daraufhin wird an eine "OK-Seite" verwiesen, die dem
Benutzer die erfolgreiche Datenaufnahme mitteilt. Von dort gelangt der Benutzer
wieder ins Hauptmenü.
24
4 Konzeptioneller Entwurf
Menü
Controller
OK−Seite
evtl. Rückmeldung
falscher Angaben
Eingabe der
Attribute
View
Abbildung 4.3 Ablauf "Inserieren"
4.2.3 Einträge verwalten
In der View werden alle Einträge des angemeldeten Benutzers angezeigt. Dies gilt
(getrennt) für Suchprofile, wie auch für Stellenangebote. Für jeden Eintrag erhält der
Benutzer die Möglichkeit, ihn zu löschen (der Controller ruft eine Methode aus dem
Datenbank-Bean auf), oder den Eintrag zu editieren (es wird auf die Inserieren-Seite
mit vordefinierten Werten verwiesen), oder den Eintrag zu verlängern, falls (und nur
dann) er innerhalb einer per Systemvariablen vorgegebenen Zeit abläuft. Zusätzlich
wird die Möglichkeit der Detailansicht der angezeigten Angebote, sowie auch eines
Neueintrags geboten, um den Komfort zu steigern.
Menü
Controller
(wieder) anzeigen
detail
Controller
Anweisung für
Löschen oder
Editieren
Link zu Details
View
inserieren
Controller
Link auf Inserieren−
Seite
Abbildung 4.4 Ablauf "Verwaltung"
25
4 Konzeptioneller Entwurf
4.2.4 Administration
Die Administration steht nur dem Administrator zur Verfügung. Er kann alle Angebote
nach Benutzer oder Rubrik sortiert auflisten. Diese Einträge stehen ihm dann zum
Löschen zur Verfügung. Der Ablauf ist der gleiche wie bei der Suche, da Einträge
nach Kriterien sortiert angezeigt werden, lediglich die Möglichkeit des Löschens
unterscheidet sich hier prinzipiell von der normalen Suche.
4.3 Beans, Cronjobs
Es existieren drei Arten von Beans für die Realisierung. Zum einen gibt es das
Applikations-Bean (scope="application") für alle Datenbankoperationen und Objekte.
Zum zweiten existiert für jeden Anwendungsteil eine Bean, die alle Attribute des
jeweiligen Teils in Form von Properties bereit hält.
Weiter soll eine Klasse existieren, die, täglich aufgerufen, die Benutzer über Treffer in
der Datenbank bezüglich ihrer Suchprofile informiert.
Alle Einträge sind mit einem Gültigkeitsdatum per Addition einer Systemvariablen
zum momentanen Datum zu versehen. Ablaufende Einträge sind wenige Tage vor
Ablaufen dem Inserenten mitzuteilen und im Falle der Nicht-Verlängerung seitens
des Benutzers aus der Datenbank zu entfernen. Hierauf wird nicht weiter
eingegangen, da diese Funktionalität bereits in KLinform vorhanden ist und somit
direkt genutzt werden kann.
4.4 Sicherheit
Sicherheit spielt bei der Entwicklung eines Portals eine große Rolle. Java Server
Pages an sich bilden eine erste Sicherheitsinstanz. Da alle dynamischen Teile des
Angebots serverseitig ausgeführt werden, hat der Benutzer keine Möglichkeit, in den
vorgegebenen Ablauf einzugreifen. Da der Ablauf zwischen den einzelnen JSPSeiten oftmals über URL-Rewriting erfolgt, müssen seitens der Datenbank-Bean
Sicherheitsmaßnahmen ergriffen werden, um unbefugtes Eintragen von Angeboten
oder Profilen zu verhindern. Eine Prüfung des Benutzers seitens des Controllers und
der Bean ist immer dann sinnvoll, wenn Daten manipuliert werden sollen. Der
Benutzer kann und darf nur dann Veränderungen an seinen eigenen Datensätzen
durchführen, wenn er sich dem System gegenüber durch die Login-Komponente
26
4 Konzeptioneller Entwurf
identifiziert hat. Gleiches gilt für die Aufbereitung von Daten auf der View-Seite. Es
dürfen bei der Verwaltung nur Daten präsentiert werden, die der Benutzer selbst
eingestellt hat. Weitere Sicherheitsmaßnahmen betreffen das Überschreiben
vorhandener Einträge, insofern es die Identifikation eines Eintrages betrifft. Realisiert
wird dies durch einen fortlaufenden Zähler auf Seiten der Datenbank, der neue IDs
für neue Einträge erzeugt (ID ist Primärschlüssel für Angebot und Suchprofil).
verdeutlicht die Schichten des Schutzkonzeptes noch einmal.
Wichtig ist die Benutzerprüfung seitens der Logik, die die Controller implementieren.
Es existiert im System implizit ein Objekt user, es wird verwendet, um die Identität
des per Client angebundenen Benutzers festzustellen.
evtl. Benutzerprüfung
Plausibilitäts und Benutzerprüfung
View X
Controller Y
DB−Bean
Benutzerprüfung
bei DB−Änderung
Abgleich mit
eingetragenen
Benutzern
DBS
Abbildung 4.5 Sicherheitsebenen
27
5 Implementierung
5 Implementierung
In diesem Kapitel sollen wichtige Implementierungsbereiche, teilweise anhand von
ausgesuchten Beispielen, erörtert werden.
5.1 Datenbank
Das Entity Relationship Diagramm wird in das Relationenmodell, welches als direkte
Grundlage für das Datenschema in der Datenbank zu benutzen ist, überführt. Die
von
der
Entität
Angebot
ausgehenden
Beziehungen
zu
Person,
Rubrik,
Arbeitsverhältnis und Jobtyp sind n:1 Beziehungen (ein Jobtyp kann in mehreren
Angeboten auftreten; ein Angebot hat genau einen Jobtyp). Sie werden als Attribut in
Angebot umgesetzt. In der Datenbank sind sie dann als Fremdschlüssel auf die
entsprechenden Attribute anderer Tabellen realisiert. Die übrigen Attribute sind
Kapitel 2.3 zu entnehmen. Als Datentyp wird meist TEXT verwendet, da dies die
Möglichkeiten der Datenaufnahme nicht mit einer fest vorgegebenen Länge für die
Eingabe einschränkt und im Zusammenhang mit mehrzeiligen Eingabefeldern diese
als einzelnes Attribut abgelegt werden können.
Die IDs bilden die Primärschlüssel zu den Relationen und werden mit der bereits in
KLinform vorhandenen Methode getNextID() generiert. Diese Realisierung gewährleistet,
dass eindeutige IDs für die einzutragenden Tupel vergeben werden.
Alle Suchprofile und Angebote sind mit einem Gültigkeitsstempel versehen. Dieser
wird nicht datenbankseitig überprüft, sondern von einer per Cronjob aufgerufenen
Methode. Dies ist erforderlich, da die Benutzer die Möglichkeit erhalten sollen,
Einträge zu verlängern und dies mit einer Java-Methode leichter durchzuführen ist.
Nicht zuletzt bietet KLinform bereits entsprechende Methoden, die nur für den
Stellenmarkt erweitert werden müssen.
Das Relationenmodell ist im Anhang in Abbildung A.2 detailliert aufgeführt.
Die Tabellen in der Datenbank sind mit dem Präfix "stma_" versehen, um Konflikte
mit anderen Bausteinen zu vermeiden und die Zuordnung unter allen Tabellen, die
die Datenbank für KLinform beinhaltet, zu erleichtern.
Die Tabellen Rubrik, Jobtyp und Arbeitszeit werden mit Werten gefüllt, die als feste
Parameter im System bestehen bleiben sollen. Eine spätere Veränderung z.B. der
Rubriken für eine Anpassung an aktuelle Bedürfnisse der Inserenten ist möglich,
erfordert jedoch eine Überführung der dann bestehenden Datensätze für Angebote
28
5 Implementierung
und Suchprofile in einen neuen konsistenten Zustand bezüglich Fremdschlüssel
seitens des Administrators.
Den Rubriken wurde eine Vereinbarung zugrunde gelegt, um Rubriken zu Kategorien
zusammenzufassen. Dies geschieht mittels Vergabe von speziellen IDs für
Kategorien (konkret: Teilbarkeit durch 100). In den Views, die Rubriken zur Auswahl
bringen, wird dies zur besseren Übersichtlichkeit verwendet, so dass der Benutzer
einfacher und schneller die gewünschte Rubrik finden kann.
Alle Fremdschlüsselbeziehungen wurden mit dem Attribut
"ON DELETE CASCADE"
versehen.
Dies gewährleistet, dass beispielsweise Einträge von nicht mehr dem System
bekannten Benutzern und Angebote, deren zugehörige Rubrik entfernt wurde, vom
DBMS entfernt werden. Wird ein Benutzer aus dem System KLinform entfernt, so
existiert in allen Tabellen des Stellenmarktes nach seiner Löschung automatisch
keiner seiner Einträge mehr.
In einer für alle KLinform-Bausteine angelegten DB-Tabelle wird der Administrator
des Bausteins Stellenmarkt festgelegt, um ihm per Browserzugriff unter Abprüfung
des Administratorstatus gesonderte Operationen zu ermöglichen.
Um den Zugriff auf die Daten später datenbankseitig zu beschleunigen, werden
Indizes eingeführt. Diese erlauben einen schnelleren Zugriff auf angegebene
Einträge. Das verwendete Datenbanksystem PostgreSQL führt solche Indizes jedoch
schon automatisch für die Primary- und Foreign Keys ein.
5.2 Realisierung des MVC Konzepts
Für
jede
der
Komponenten
Model,
View
und
Controller
sollen
wichtige
Gesichtspunkte betrachtet werden.
5.2.1 Model Objekte
Im Anhang zeigt Abbildung A.3 die erstellten Klassen.
Die zentrale Rolle spielt hier die Klasse
aus dem Paket
de.klinform.db.
StmaDB
StmaDB.
Sie erweitert die Klasse
AbstractDatabase
ist für alle Datenbankoperationen, die im
Stellenmarkt benötigt werden, zuständig. Sie beinhaltet Klassen für Einträge,
Jobtypen, Rubriken, Arbeitsverhältnissen und Suchprofile nebst Konstruktoren. Jede
dieser Klassen implementiert
Comparable.
Einmal, um Objekte mit anderen vergleichen
zu können, zum anderen wird intern häufig Gebrauch von
java.util.TreeSet
gemacht,
29
5 Implementierung
welches Datentypen voraussetzt, die
Comparable
Klassen hat der Bean-Konvention zufolge
get-
implementiert haben. Jede dieser
und
set-Methoden
für ihre nach außen
sichtbaren Properties.
Die Klasse
Eintrag
implementiert
KlinformSearchResult.Data
Implementierung umfasst die Methoden
getPrintRepresentation(), getRepresentationTitle()
aus dem Paket
de.klinform.bs.
Die
getShortRepresentationColumns(), getLongRepresentation(),
und , die bei der Suche für die Anzeige der
Übersicht, Detailansicht, Druckversion und Titel zur Verwendung kommen. Sie
werden von
de.klinform.bs.KLinformSearchResult
zur Darstellung benutzt. Hier ist lediglich die
Implementierung der Methoden nötig. Die Darstellung ist dann mit einer Zeile im
View-Objekt der Suche / Detailansicht und einem
<useBean...>
Eintrag in der global in
allen JSP-Seiten des Stellenmarktes eingelinkten "beans.jsp" (lädt alle nötigen Beans
für eine Session) realisiert.
Die Methoden zum Einfügen und Ändern von Einträgen benötigen zwei Parameter:
Beispiel:
public int einfuegen(FormularSuchProfil formular, Benutzer benutzer)
formular
ist eine Instanz der Klasse FormularSuchProfil. Sie ist eine Bean, die beim Eintragen
und Verändern eines Suchprofils als Model-Objekt für die Properties benutzt wird und
schließlich an
StmaDB.einfuegen
den Aufruf von
einfuegen
übergeben wird. Zusätzlich übergibt der Controller, der
tätigt, ein Objekt vom Typ
Benutzer.
Es wird benötigt, um die
Zuordnung (beim Einfügen) bzw. die Überprüfung (beim Verändern) in der SQLAnweisung zu gewährleisten. Das Einfüge-SQL-Statement sieht dann wie folgt aus:
statement.executeUpdate("INSERT INTO stma_suche VALUES ('"
+id+"','"+SQL(benutzer.getLogin())+"','"+formular.getJobtyp()+"','"
+SQL(formular.getStelle())+"','"+SQL(formular.getTitel())+"','"
+ablaufdatum+"')");
Abbildung 5.1 SQL Beispiel zum Einfügen (Methode in DB-Bean)
Hier wird die Methode getLogin() verwendet, um den Inserenten, der angemeldet das
Angebot eingetragen hat, zu identifizieren und ihn für dieses Suchprofil als
Inserenten einzutragen.
Das entsprechende SQL Beispiel aus der Bean für das Verändern eines Datensatzes
sieht folgendermaßen aus:
30
5 Implementierung
statement.executeUpdate("UPDATE stma_suche SET jobtyp='"
+formular.getJobtyp()+"', stelle='"+SQL(formular.getStelle())+"', titel='"
+SQL(formular.getTitel())+"' WHERE insid='"+benutzer.getLogin()+"' AND id='"+formular.getId()+"'");
Abbildung 5.2 SQL Beispiel zum Verändern (Methode in DB-Bean)
Hier wird überprüft, ob der Benutzer tatsächlich der ursprüngliche Inserent ist, der
das Suchprofil eingestellt hat.
Um Absicherung gegen Nebenläufigkeit zu gewährleisten, wurden alle DBOperationen in Transaktionen gekapselt. Hierzu wurde jeweils das Auto-Commit
ausgeschaltet, das jede DB-Operation einzeln ausführen lassen würde:
Connection conn = getConnection();
conn.setAutoCommit(false);
"SQL-Anweisung 1;"
"SQL-Anweisung 2;"
conn.commit();
Abbildung 5.3 Auto-Commit Abschaltung
Alle Textsuchen (Suche nach einem Begriff über Spalten einer DB-Tabelle) wurden
mit der in KLinform im Paket de.klinform.db realisierten Methode
findInTable(java.lang.String suchBegriff, java.sql.Statement statement,
java.lang.String tableName, java.lang.String[] tableColumns,
java.lang.String primaryKey, int schwellwert)
durchgeführt. Sie gibt ein Objekt vom Typ
de.klinform.db.AbstractDatabase.Suchergebnis
Suchergebnis []
zurück, welches durch
gegeben ist. Über den Schwellwert wird die
Genauigkeit der Suche angegeben.
Für die Aktionen Verlängern und Löschen sind Methoden implementiert, die ebenfalls
die Identität des per Parameter mit übergebenen Benutzers überprüfen.
Für verschiedene Views werden Methoden implementiert, die alle Rubriken,
Jobtypen, Arbeitszeiten oder alle Einträge eines Benutzers zurückgeben. Diese
können sodann je in einer Auswahl präsentiert werden. Für die Administration
existieren Methoden, um nach Benutzer (oder in Verbindung mit einer angegebenen
Rubrik) sortiert entsprechende Einträge anzuzeigen.
Für jede der Funktionalitäten Suchen, Inserieren, Administration und Verwaltung sind
Beans implementiert, die die Properties enthalten und für jeden Benutzer in
"beans.jsp" für die Gültigkeitsdauer einer Session geladen werden. Beim Inserieren
enthält so die zugehörige Instanz der Klasse
FormularInserieren
alle Attribute, die für eine
Stelle seitens des Benutzers angegeben werden, um einen mehrmaligen Durchlauf
31
5 Implementierung
Controller-View-Controller zu ermöglichen, falls Fehlangaben gemacht wurden. Die
Angaben werden mit einer
validate()-Methode
im Controller untersucht, so dass zum
Beispiel eine fehlende Angabe eines Pflichtfeldes als Fehlermeldung an die View
zurück übergeben wird.
5.2.2 View Objekte
Die Views stellen für einen Bereich Eingabefelder und/oder Ergebnisse dar
(Verwaltung und Suche). Stehen für den Benutzer Auswahlmöglichkeiten zur
Verfügung, so werden die Auswahlfelder am Anfang der JSP-Seite aus der
Datenbank abgefragt, um beispielsweise bei den Jobtypen in einer "select-Form"
präsentiert zu werden:
<% StmaDB.Jobtyp [] jobtypen = stma_db.getJobtypen(); %>
...
<select class="suchen_aktion" name="jobtyp" size="1">
<% for (int i=0; i< jobtypen.length;i++) { %>
<%if ((i+1)==stma_suchprofil.getJobtyp()) {%>
<option selected value="<%= jobtypen[i].getId() %>">
<%= jobtypen[i].getName() >
</option>
<% } else {%>
<option value="<%= jobtypen[i].getId() %>">
<%= jobtypen[i].getName() %>
</option>
<% } %>
<% } %>
</select>
Abbildung 5.4 View - Beispiel
Zu erkennen ist hier auch die Verzahnung von HTML-Fragmenten mit operativem
JSP-Code.
In der select-Anweisung wird mit name="..." die Variable festgelegt, die an die nächste
Seite übergeben wird (an den Controller) Dort erfolgt dann die Auswertung dieser
Werte und die Properties in den Beans werden gesetzt. class="..." legt die
Formatierung des select-Elementes fest und ist im KLinform-weiten Stylesheet
festgelegt. Dies kann zum Beispiel Hintergrundfarben, Schriftgrößen, Schriftarten und
-auszeichnungen umfassen oder bei Tabellen beispielsweise die Rahmendicke.
stma_suchprofil
ist der Name, der für die Bean beim Anlegen eines Suchprofiles
verwendet wird. stma_suchprofil.getJobtyp() holt aus der Bean den Wert der Variablen
Jobtyp.
32
5 Implementierung
Die Weitergabe der Variablen geschieht mittels <form action="folgeseite.jsp" method="POST">.
Diese HTML-Anweisung bewirkt, dass die zu übergebenden Werte über
Standardausgabe an die nächste Seite übermittelt werden. Der Vorteil gegenüber der
ebenfalls möglichen Methode "GET" liegt in der nicht vorhandenen
Längenbeschränkung der zu übergebenden Daten, die von Browser zu Browser
unterschiedlich sein kann.
Die Views verfügen über weiterführende Buttons, und solche, die eine Navigation zur
vorherigen Seite ermöglichen. Weiterführend meint zum Beispiel den Befehl zum
Abspeichern einer Eingabe.
In der Suche und den Verwaltungsseiten von Suchprofilen und Angeboten existieren
jeweils noch Verweise auf die Detailinformationen, die auf einer eigenen Seite mittels
einer Instanz der Klasse
de.klinform.bs.DetailInformation
präsentiert werden. Von dort ist
auch eine aufbereitete Druckansicht zu erhalten.
5.2.3 Controller
Die Controller legen die Anwendungslogik des Stellenmarktes fest. Sie steuern die
Abfolge
der
dem
Benutzer
zu
präsentierenden
Views,
stoßen
die
Datenbankoperationen an, belegen die Beans mit den von der View übergebenen
Daten und fragen ggf. validate()-Methoden ab.
Für das Eintragen eines Suchprofils soll der komplette Aufbau des betreffenden
Controllers erläutert werden:
<%@ include file="/klinform.inc" %>
<%@ include file="/bs/stellenmarkt/beans.jsp" %>
<% if ((request.getParameter("stelle") == null) ||
(request.getParameter("stelle").length() == 0)) stma_suchprofil.setStelle("");
if ((request.getParameter("titel") == null) ||
(request.getParameter("titel").length() == 0)) stma_suchprofil.setTitel("");%>
<jsp:setProperty name="stma_suchprofil" property="*" />
<% String nextpage = "/bs/stellenmarkt/suchprofil/formular.jsp";
if (user.getLoggedIn()) {
if (stma_suchprofil.getId() == 0) {
if (request.getParameter("speichern.x")!=null && stma_suchprofil.validate()) {
if (stma_db.einfuegen(stma_suchprofil, user) > 0)
nextpage = "/bs/stellenmarkt/suchprofil/ok.jsp";
else nextpage="/fehler.jsp?nextpage=/bs/stellenmarkt/index.jsp
&errortext=Angaben nicht übernommen!";
}
}
else {
33
5 Implementierung
if (request.getParameter("speichern.x")!=null && stma_suchprofil.validate()) {
if (stma_db.veraendern(stma_suchprofil, user) > 0)
nextpage = "/bs/stellenmarkt/suchprofil/ok.jsp";
else nextpage = "/fehler.jsp?nextpage=/bs/stellenmarkt/index.jsp
&errortext=Angaben nicht übernommen!";
}
}
}
else nextpage="/einloggen.jsp?nextpage=/bs/stellenmarkt/suchprofil/index.jsp"; %>
<jsp:forward page="<%= nextpage %>" />
Abbildung 5.5 Controller - Beispiel
Wie auf jeder JSP-Seite des Stellenmarktes werden zu Beginn die Beans geladen
(falls nicht schon geladen) und die systemweite include-Datei eingefügt. Sie enthält
Import-Anweisungen für andere Klassen und Pakete, sowie
useBean-Anweisungen
für
wichtige Beans (z.B. Benutzerverwaltung).
Mit
setProperty
werden die Properties aus dem zugehörigen Sitzungsobjekt
einmal initialisiert. Die Abfrage nach den Parametern
vorhandenen Objektes
request
stelle
und
titel
stma_suchprofil
des implizit
widmet sich der Eigenheit von HTML-Formularen,
Felder, deren Inhalt nicht belegt wurden, nicht in der URL an die nächste Seite als
leer gekennzeichnet zu übergeben, sondern schlicht nicht anzugeben. Dies ist für
den Spezialfall, dass ein Benutzer in einem Feld der View eine Angabe gemacht hat,
die Eingabe dem Controller übergibt, dieser Fehler mittels validate() feststellt und an die
View zurückverweist, von Bedeutung. Denn löscht der Benutzer dann dieses Feld
und lässt es leer, wird es nicht übergeben und das Sitzungsobjekt würde ohne obige
Abfrage den vorherigen Inhalt für dieses Feld bestehen lassen. Somit würde die erste
Eingabe übernommen. Der Controller überprüft also das Vorhandensein der
Variablen und setzt diese gegebenenfalls explizit im Sitzungsobjekt auf den
Leerstring.
Als nächstes wird der String
nextpage
als Link auf die View festgelegt. Er wird je nach
Anwendungsfall vom Controller umgesetzt auf eine Fehlerseite (Fehler bei der DBTransaktion), Erfolgsseite (Eintrag in DB eingefügt/verändert), oder die KLinformSeite zum Einloggen eines Benutzers, falls dieser nicht eingeloggt ist. Nur
angemeldete Benutzer dürfen Einträge in der Datenbank vornehmen. Der Controller
kann aus verschiedenen Szenarien heraus aufgerufen werden:
–
Von der Hauptseite des Stellenmarktes
34
5 Implementierung
Dann wurde ihm keine Variable übergeben und der Controller verzweigt, falls der
Benutzer angemeldet ist, auf die View zum Eintrag der Daten.
–
Von der View mit erstmals eingegebenen Daten
Der Controller verzweigt auf die Erfolgsmeldungsseite, falls die Eingaben korrekt
(validate()), der Parameter
speichern.x
werden konnten;
wird von der Form mit der x-Koordinate versehen, auf
speichern.x
gesetzt ist und die Daten sodann eingefügt
die der Benutzer innerhalb des Absendebuttons geklickt hat. Diese werden nicht
ausgewertet, sondern lediglich auf Vorhandensein überprüft, damit der Controller
als von der View aufgerufen abläuft. Die Einfügemethode übergibt einen Wert > 0,
falls sie die Daten einfügen konnte.
–
Von der Verwaltungsseite mit übergebener ID des zu editierenden Datensatzes
Der Vorgang ist der gleiche wie beim erstmaligen Einfügen, nur werden die Daten
schon mit der aufrufenden URL übergeben und sind somit im Sitzungsobjekt auf
Werte gesetzt, wenn die View zum Editieren aufgerufen wird.
–
Von der View mit zu verändernden Daten
Da die ID beim Aufruf aus der Verwaltungsseite mit übergeben wurde, wird jetzt
die Methode zum Verändern eines Datensatzes in der DB-Bean aufgerufen,
sofern die Daten den Vorgaben entsprechen.
Der Controller für das Inserieren von Angeboten unterscheidet sich von dem der
Suchprofileingabe prinzipiell nicht.
Der Controller der Suche leitet nur die Variablen aus der URL an die Instanz der
Klasse
de.klinform.bs.KLinformSearchResult
weiter, die in der View der Suche für die
Darstellung der Ergebnisse verantwortlich ist.
Die Controller der Verwaltungsseiten der Suchprofile und Angebote eines Benutzers
leiten je nur Lösch- und Verlängerungsoperationen in der DB-Bean ein und
verweisen wieder zurück auf die betreffende View.
5.3 Personalisierung
Die Eingabe von Suchprofilen, die dem Benutzer ermöglicht wird, bildet den Kern der
Personalisierung des Stellenmarktes. Die wichtigste Funktion des Bausteins ist für
den Arbeitssuchenden die Suche. Hat der Benutzer eines oder mehrere Suchprofile
angegeben, kann das System die Suche selbstständig regelmäßig durchführen.
35
5 Implementierung
Hierzu ist eine Java-Applikation vorgesehen, die eigenständig aufrufbar ist, oder in
die bereits systemweit vorhandene Klasse
de.klinform.cronjobs.Daily
eingebunden werden
kann, um zu festgelegten Zeitpunkten ausgeführt zu werden. Als eigenständige
Applikation kann sie auf einem separaten System ausgeführt werden, um eine hohe
Last auf dem eigentlichen KLinform-Server zu vermeiden. Die Datenbankoperationen
generieren in jedem Fall eine hohe Last. Dies könnte eventuell durch ein vorheriges
Kopieren der relevanten Datenbestände in eine Datenbank eines anderen Systems
verbessert werden, um die DB-Operationen auf eine Auslese-Operation zu
beschränken.
In der Suchprofileingabe ist dem Benutzer die Möglichkeit gegeben, die Bezeichnung
der Arbeitsstelle (Position) oder/und seinen Ausbildungstitel anzugeben. Anhand
dieser Information sucht die Klasse
findInTable(...)
StmaMailControl
in der Datenbank mit der Methode
Treffer. An dieser Stelle soll für den Fall der Angabe von Position und
Ausbildungstitel die entsprechende Methode, die in Teilen den anderen DBMethoden aus der Stellenmarkt-DB-Bean entsprechen, genauer betrachtet werden:
private Integer[] allcheck(String titel, String stelle) {
TreeSet mengeA = new TreeSet();
TreeSet mengeB = new TreeSet();
/* Die Verwendung von TreeSet ermöglicht mittels einfacher Mengenoperationen die
Aufnahme eines Datenbestandes, der automatisch sortiert ist.*/
try {
Connection conn = getConnection();
Statement statement1=conn.createStatement();
Statement statement2=conn.createStatement();
Suchergebnis[] ergebnisStellen = findInTable(stelle,statement1,
"stma_angebot","stelle", "id", 70);
Suchergebnis[] ergebnisTitel = findInTable(titel,statement2,
"stma_angebot","titel","id",70);
/* Auf zwei separaten Statements wird für die übergebenen Parameter stelle und
titel die Suche durchgeführt.*/
for (int i=0;i < ergebnisStellen.length; i++) {
Integer k = new Integer(ergebnisStellen[i].getKey());
mengeA.add(k);
}
for (int i=0;i < ergebnisTitel.length;i++) {
Integer j=new Integer(ergebnisTitel[i].getKey());
if (mengeA.contains(j)) mengeB.add(j);
}
/* mengeB enthält die IDs, die für beide Suchanfragen Treffer sind. Anschließend
wird diese Menge in ein Array vom Typ Integer umgewandelt und zurückgegeben.*/
conn.close();
}
catch (Exception oops) {
36
5 Implementierung
KLinform.perror(this,oops);
}
Object [] object = mengeB.toArray();
Integer[] rueckgabe = new Integer[object.length];
System.arraycopy(object,0,rueckgabe,0,object.length);
return rueckgabe;
}
Abbildung 5.6 Suchprofile - Suchmethode
Der Benutzer wird per E-Mail über alle IDs benachrichtigt, die Treffer anhand seines
Suchprofils darstellen. Dies geschieht durch Einbettung von HTML-Code in der EMail in Form eines HTML-Links, den die meisten grafische E-Mail Clients
interpretieren, sofern es der Benutzer zulässt, anderenfalls muß er den Link aus der
E-Mail in den Browser kopieren. Für jedes Suchprofil wird eine Mail generiert, die aus
Textbausteinen zusammengesetzt wird, die in systemweiten Variablen abgelegt sind.
Da die Suche täglich abläuft, werden die bereits per Mail versendeten Treffer in einer
separaten Tabelle der Datenbank vermerkt, die vor dem Verschicken überprüft wird,
um zu vermeiden, einem Benutzer Treffer erneut zu präsentieren.
5.4 Gültigkeitsüberprüfung
Alle Angebote und Suchprofile sind mit einem automatisch per Systemvariablen
berechneten Gültigkeitsstempel versehen. Um dem Eintragenden die Möglichkeit zu
bieten, Einträge zu verlängern und nicht alle Gültigkeiten merken zu müssen, nimmt
der Stellenmarkt ihm diese Aufgabe ab, indem er auf die in KLinform bereits
vorhandene
Klasse
de.klinform.cronjobs.OutdateControl
zurückgreift.
Ergänzt
um
die
entsprechenden Einträge für den Stellenmarkt, führt diese Klasse, ebenfalls
regelmäßig ausgeführt, Checks auf den Tabellen des Stellenmarktes über die
Gültigkeitsstempel durch. Per Parameter wird vorgegeben, wie viele Tage vor
Ablaufen der für den Eintrag verantwortliche Benutzer darauf aufmerksam gemacht
werden soll, dass sein Datensatz in wenigen Tagen aus der Datenbank entfernt wird.
Dies geschieht auch per Mail, in der ein HTML-Link auf die entsprechende
Verwaltungsseite führt. Benutzt er diesen Link, wird durch einen übergebenen
Parameter automatisch der Eintrag (Suchprofil oder Angebot) verlängert. Ist nach
Ablauf dieser Frist der betreffende Datensatz nicht verlängert worden, löscht
KLinform diesen schlussendlich.
37
6 Zusammenfassung
6 Zusammenfassung
Diese Projektarbeit hat sich mit der Analyse, Vorstellung der Techniken, Entwurf und
Betrachtung von wichtigen Aspekten der Implementierung des Stellenmarktes für das
Portal KLinform beschäftigt.
Einige Punkte sollen noch einmal hervorgehoben und gesondert betrachtet werden.
–
MVC Konzept
Als bemerkenswert hervorzuheben sei das Model-View-Controller Konzept, das
eine saubere Trennung von Präsentation, Logik und Schnittstelle zu den Daten
gewährleistet. Es erleichtert durch die generelle Trennung der Aufgaben die
Erstellung und Wartung der Komponenten. Dies ist in einem größeren Projekt, wie
es KLinform darstellt, von zentraler Bedeutung, da kleinere Veränderungen am
System keine allzu großen Nachwirkungen mit sich bringen.
–
Erweiterungen
Der Baustein Stellenmarkt ist in der jetzigen Form mit ausreichender Funktionalität
versehen, die aber gegebenenfalls noch erweitert werden könnte. Besonders auf
Seiten des Administrators ergibt sich mit steigendem Angebotsaufkommen ein
erhöhter Bedarf an Werkzeugen zur Datenverwaltung. Dies ist einerseits für den
Stellenmarkt zutreffend, jedoch auch für weitere Bausteine zutreffend, da große
Datenmengen
effiziente
Verwaltung
erfordern.
Ein
zentrales
Tool
zur
Datenverwaltung bietet sich hier gegebenenfalls eher an.
–
Ausblick
Umfang der Suchfunktion, Änderung von voreingetragenen Rubriken, Jobtypen
und Arbeitsverhältnissen und möglichen Attributen der Angebote können sich im
Betrieb eines solchen Portals ständig ändern. Eine sorgfältige Analyse des
aufkommenden Datenbestandes ist somit auch immer entscheidend für die
Akzeptanz eines solchen Angebots. Hier müssen Aspekte des Datenschutzes
immer berücksichtigt bleiben.
–
Zukunftsfähigkeit
38
6 Zusammenfassung
JSP und Java als plattformunabhängige Technologien tragen zur Wartbarkeit des
Systems bei, da sie offen zugängliche Standards darstellen und keine
angepassten Speziallösungen darstellen. Auch eine Portierung der Daten auf ein
anderes Datenbanksystem stellt eine lösbare Aufgabe dar, da nur wenige
Speziallösungen
eingesetzt
werden
durchschaubaren
Beziehungen
Zukunftsfähigkeit
von
und
zueinander
solchermaßen
die
Daten
stehen.
angelegten
in
Dies
einfachen
spricht
Systemen,
und
für
die
wobei
die
Schnelllebigkeit des Internet und die Vielfältigkeit der Angebote immer wieder
neue Ansätze entwickelt und auch die Vorlieben des Anwenders einem steten
Wandel unterliegen.
39
Quellenverzeichnis
[Monster.de]: Monster, http://www.monster.de, 2002,
[Jobpilot.de]: Jobpilot, http://www.jobpilot.de, 2002,
[Stellenmarkt Online]: Stellenmarkt Online, http://www.stellenmarkt.de, 2002,
[Härder 1999]: Theo Härder, Vorlesung Datenbanksysteme I, 1999
[PostgreSQL]: , http://www.de.postgresql.org/users-lounge/docs, 2002,
[Java pro 1999]: Gerhard Wilhelms, Markus Kopp, Java professionell, 1999
[Turau 2001]: Volker Turau, Java Server Pages: dynamische Generierung von WebDokumenten, 2001
[JSP Docs]: , http://java.sun.com/products/jsp/docs.html, 2002,
[Apache License]: , http://www.apache.org/licenses, 2002,
[Jakarta-Tomcat]: , http://jakarta.apache.org/tomcat, 2002,
Anhang
A Anhang
Abbildung A.1 Einstiegsseite - KLinform
Relation
Attribute
Typ
Zusatz
41
Anhang
Rubrik
Jobtyp
Arbeitszeit
Suche
Angebot
id
int not null
primary key
name
text not null
id
int not null
name
text not null
id
int not null
name
text not null
id
int not null
primary key
insid
text not null
foreign key, references Benutzer(id)
jobtyp
int not null
foreign key, references Jobtyp(id)
stelle
text
titel
text
guelt
date not null
primary key
primary key
id
int not null
primary key
insid
text not null
foreign key, references Benutzer(id)
jobtypid
int not null
foreign key, references Jobtyp(id)
rubrikid
int not null
foreign key, references Rubrik(id)
arbeitszeitid
int not null
foreign key references Arbeitszeit(id)
stelle
text not null
titel
text
anf
text not null
aufg
text not null
insinf
text not null
allg
text
datum
date not null
guelt
date not null
anspr
text
tel
text
fax
text
mail
text
url
text
Abbildung A.2 Relationenmodell
42
+compareTo(object:Object) : int
+Rubrik(in id:int, name:String) : Rubrik
+getId() : int
+getName() : String
+setId(in x:int)
+setName(x:String)
~rubrik : int
~jobtyp : int
~arbeitszeit : int
~stelle : String
~titel : String
~anf : String
FormularInserieren
~url : String = ""
+getRubrik() : int
+getJobtyp() : int
+getArbeitszeit() : int
+Arbeitszeit(in id:int, name:String) : Arbeitszeit
+getId() : int
+getName() : String
+setId(in x:int)
+setName(x:String)
~tel : String
~fax : String
~mail : String
~url : String
+zuVerlaengern() : boolean
+getShortRepresentationColumns() : String[]
+getRepresentationTitle() : String
+getPrintRepresentation()
+getLongRepresentation()
+setUrl(x:String)
+setMail(x:String)
+setFax(x:String)
+setTel(x:String)
+setAnspr(x:String)
+setGuelt(x:Date)
+setDatum(x:Date)
+setAllg(x:String)
+setInsinf(x:String)
+setAufg(x:String)
+setAnf(x:String)
+setTitel(x:String)
+setStelle(x:String)
+setArbeitszeit(in x:int)
+setRubrik(in x:int)
+setJobtyp(in x:int)
+setInsid(x:String)
+setId(in x:int)
+getUrl() : String
+getMail() : String
+getFax() : String
+getTel() : String
+getAnspr() : String
Profil
+setGuelt(x:Date)
+getGuelt() : String
+setInsid(x:String)
+getInsid() : String
+setTitel(x:String)
+getTitel() : String
+setStelle(x:String)
+setJobtyp(in x:int)
+setId(in x:int)
+getStelle() : String
+getJobtyp() : int
+getId() : int
+Profil(rs:ResultSet) : Profil
+zuVerlaengern() : boolean
+compareTo(o:Object) : int
~guelt : Date
~stelle : String
~titel : String
~insid : String
~jobtyp : int
~id : int
+validate() : boolean
+getId() : int
+setId(in x:int)
~id : int = 0
FormularDetail
+validate() : boolean
+setUrl(x:String)
+setMail(x:String)
+setFax(x:String)
+setTel(x:String)
+setAnspr(x:String)
+setAllg(x:String)
+setInsinf(x:String)
+setAufg(x:String)
+setAnf(x:String)
+setTitel(x:String)
+setStelle(x:String)
+setArbeitszeit(in x:int)
+setRubrik(in x:int)
+setJobtyp(in x:int)
+getGuelt() : String
+getDatum() : String
+getAllg() : String
+getUrl() : String
+getMail() : String
+getFax() : String
+getTel() : String
+getAnspr() : String
+getAllg() : String
+getInsinf() : String
+setId(in x:int)
+setName(x:String)
+setId(in x:int)
+getName() : String
+getId() : int
+Jobtyp(in id:int, name:String) : Jobtyp
+compareTo(object:Object) : int
~name : String
+getAufg() : String
+getInsinf() : String
+getAufg() : String
+getAnf() : String
+getTitel() : String
+getStelle() : String
+getArbeitszeit() : int
+getRubrik() : int
+getJobtyp() : int
+getInsid() : String
+getAnf() : String
+getTitel() : String
+Eintrag(rs:ResultSet) : Eintrag
+getId() : int
+getStelle() : String
+compareTo(o:Object) : int
Jobtyp
~mail : String = ""
+compareTo(object:Object) : int
~anspr : String
~id : int
~fax : String = ""
~name : String
~guelt : Date
+getId() : int
~tel : String = ""
~id : int
~datum : Date
~anspr : String = ""
~allg : String = ""
~insinf : String
~allg : String
~insinf : String = ""
~aufg : String = ""
~anf : String = ""
~titel : String = ""
~stelle : String = ""
~arbeitszeit : int = 1
~rubrik : int = 1001
~jobtyp : int = 1
~id : int = 0
~aufg : String
Arbeitszeit
~name : String
Rubrik
~id : int
~insid : String
Eintrag
~id : int
FormularAdminVerwalten
+validate() : boolean
+setPage(in x:int)
+setSuchBegriff(x:String)
+getPage() : int
+getSuchBegriff() : String
+setArbeitszeit(in x:int)
+getArbeitszeit() : int
+setRubrik(in x:int)
+getRubrik() : int
+setJobtyp(in x:int)
+getJobtyp() : int
~arbeitszeit : int = 1
~jobtyp : int = 0
~rubrik : int = 0
~page : int = 0
~suchBegriff : String = ""
FormularSuchen
+validate() : boolean
+setTitel(x:String)
+setStelle(x:String)
+setJobtyp(in x:int)
+setJobTyp(in x:int)
+getTitel() : String
+getStelle() : String
+getJobtyp() : int
+setId(in x:int)
+getId() : int
~titel : String = ""
~stelle : String = ""
~id : int = 0
~jobtyp : int = 1
FormularSuchProfil
+validate() : boolean
+getId() : int
+setId(in x:int)
~id : int = 0
FormularProfilVerwalten
+validate() : boolean
+getId() : int
+setId(in x:int)
~id : int
FormularUserVerwalten
+validate() : boolean
+getId() : int
+setId(in x:int)
+getRubrik() : int
+setRubrik(in x:int)
+getBenutzer() : String
+setBenutzer(x:String)
~benutzer : String = "ALLE"
~rubrik : int = 0
~id : int = 0
StmaDB
+main(args:String[])
+check()
-allcheck(titel:String, stelle:String) : Integer[]
-stellencheck(stelle:String) : Integer[]
-titelcheck(titel:String) : Integer[]
+StmaMailControl() : StmaMailControl
StmaMailControl
+verlaengernAngebot(tabelle:String, in id:int, beanUser:)
+countBenutzerEintraege(benutzer:) : int
+getJobtypen() : Jobtyp[]
+getArbeitszeiten() : Arbeitszeit[]
+getRubriken() : Rubrik[]
+getBenutzerRubrikEintraege(benutzer:String, in ruid:int) : Eintrag[]
+getEingetrageneBenutzer() : String[]
+getProfile(benutzer:) : Profil[]
+getEintraege(benutzer:) : Eintrag[]
+loescheProfil(in id:int, benutzer:)
+loescheEintrag(in id:int, benutzer:)
+getEintrag(in id:int) : Eintrag
+suchen(in jobid:int, in ruid:int, in arbeitszeitid:int, suchBegriff:String) : Suchergebnis[]
+veraendern(formular:FormularSuchProfil, benutzer:) : int
+veraendern(formular:FormularInserieren, benutzer:) : int
+einfuegen(formular:FormularSuchProfil, benutzer:) : int
+einfuegen(formular:FormularInserieren, benutzer:) : int
+StmaDB() : StmaDB
-ANGEBOTROWS : int = 17
Anhang
Abbildung A.3 UML-Klassendiagramm
43
Herunterladen