Java: Inlämningsuppgift 2 - Klient/server ovanpå bildatabas

Allmänt

Det här dokumentet specificerar de övergripande kraven för projektuppgiften i kursen i Javaprogrammering.

Ett serverprogram ska utvecklas som ligger som ett gränssnitt mot en bildatabas. Ett klientprogram ska utvecklas som kommunicerar med servern och visar data ur bildatabasen. Båda programmen ska ha grafiska gränssnitt.

Programmen finns redan utvecklade men endast med användargränssnitt i textform. Dessutom har det mesta av källkoden försvunnit. Studera det som finns av det gamla systemet på katalogen inl2base, eller ladda ner som en ZIP-fil.

Uppgiften är här att utveckla motsvarande program med grafiska användargränssnitt. Den server som utvecklas ska kunna kommunicera med den gamla textklienten, och den klient som utvecklas ska kunna kommunicera med den gamla textservern. Som tur är finns kommunikationsprotokollet kvar (se nedan).

Referenser

  1. Jan Skansholm: Java direkt med Swing
  2. Läs också om Swing i Bruce Eckel: Thinking in Java, 3:e upplagan, kapitel 14: Creating Windows & Applets
  3. Mimer JDBC Overview (http://developer.mimer.com/features/feature_24.htm)
  4. Get Started with Mimer JDBC (http://developer.mimer.com/howto/howto_17.htm)
  5. JDBC (http://developer.mimer.com/interfaces/interface_6.htm)
  6. Mimer JDBC Driver Guide

Databasen

Ni har tillgång till en databas med bildata, som hanteras av en databashanterare av typen Mimer. Databasen körs på servern basen.oru.se, och heter bilbasen. Den är tillgänglig via JDBC. Vid uppkoppling med JDBC kan man använda URL:en "jdbc:mimer://användarnamn:lösenord@basen.oru.se/bilbasen". Användarnamn och lösenord får du av handledaren.

Använd JDBC-drivrutinen för Mimer: mimjdbc3.jar

Databasen innehåller två tabeller, Bil och Bilstatistik, skapade med SQL-kommandon enligt nedan:

create table Bil
  (Regnr char(6),
   Marke varchar(20),
   Ar integer,
   Nypris integer,
   primary key (Regnr));

create table Bilstatistik
  (Marke varchar(20),
  Ar integer,
  Antal integer,
  Summa integer,
  primary key (Marke, Ar));
(Databashanterare brukar, till skillnad från Java, inte hantera ÅÄÅ så bra.)

Exempel på data:

Bil

Regnr Marke Ar Nypris
RFN540 Renault 2000 171000
RPG701 Renault 2000 244000

Bilstatistik

Marke Ar ANTAL SUMMA
Renault 2000 2 415000

Gränssnitt för databasaccesser ska vara en javaklass bil_db_c. När den gamla textversionen av serverprogrammet utvecklades, var databasen ännu inte satt i drift, och därför fanns den klassen endast i form av en stubbe i filen bil_db_c.java. Denna gamla stubbe simulerar en databas genom att lagra data i vanliga Java-variabler. Den låtsas att man kopplar upp mot databasen med användarnamnet java och lösenordet inl2. Använd gärna den gamla stubben för testning, men skriv sen om den så den kopplar upp sig mot databasen med JDBC på riktigt.

Krav

Kommunikation

Klientprogram Serverprogram
Försöker koppla upp sig Accepterar, skickar OK
ELLER vid en 4:e klient:
Accepterar, Skickar NOK, Kopplar ner
Skickar ALLA Skickar tillbaka alla regnr i BIL, avslutar med OK
Skickar NOK vid fel
Skickar MV;REGNR Skickar tillbaka medelvärde för sålda bilar av den årsmodell och det märke som bilen med regnr har, avslutar med OK, d.v.s. endast ett medelvärde följt av OK. Skickar NOK vid fel
Skickar N;REGNR;MÄRKE;ÅR;NYPRIS Lägger in i DB, svarar OK då det gick bra, annars NOK
Skickar D;REGNR Försöker ta bort bilen med REGNR ur BIL
Svarar OK om det gick bra, annars NOK
Skickar A;REGNR Skickar tillbaka alla data om bilen med REGNR (utom regnr), avslutar med OK
Skickar NOK vid fel

Alla data mellan klient och server ska skickas som strängar. Från klienten ska data skickas m.h.a. ett PrintWriter-objekt, med println-metoden. Server och klient ska läsa data m.h.a BufferedReader-objekt, med readLine-metoden. Då servern skickar data i form av fler än ett värde ska de skickas m.h.a. ett println-anrop per värde.

Serverprogrammet

Skriv ett serverprogram som ansluter till Mimer-databasen för att komma åt bildata. Servern ska lyssna efter klienter via port 2747.

Programmet ska acceptera upp t.o.m. 3 klienter.

Det ska finnas möjlighet att monitorera serverprogrammets aktiviteter.

Klientprogrammet

Skriv ett klientprogram som kopplar upp sig mot ett serverprogram via port 2747 enligt ovan. Användaren ska informeras om hur uppkopplingen gick. I fallet att det inte gick bra ska klientprogrammet avslutas.

I fallet att uppkoppling gick bra ska klientprogrammet visa registreringsnummer för de bilar som finns i databasen på serversidan. Det ska sedan gå att på ett användarvänligt sätt ge kommandona:

Alla eventuella fel som uppstår ska rapporteras till användaren på ett begripligt sätt.

Redovisningskrav

Uppgiften ska redovisas genom att ni (1) demonstrerar programmet för labbhandledaren, och (2) lämnar in en skriftlig rapport.

Arbeta i grupper om två, eller (om det inte går att åstadkomma) tre.

Uppgiften går förstås att lösa genom att bygga användargränssnitten "för hand" i Java-kod, men om vill kan ni också använda något verktyg för layouten, till exempel Borland JBuilder. Den finns inte längre tillgänglig i datorsalarna, men man kan ladda hem den och installera hemma.

Inför demonstrationen ska ni förbereda systemet så det är enkelt att provköra, och ha källkoden tillgänglig. Var också beredda på att svara på frågor om programmet och hur ni skrev det. Vi rekommenderar starkt att ni gör demonstrationen på de inbokade labbtiderna, för om ni inte hinner måste ni avtala en tid med labbhandledaren.

Se till att ha provat GUI-server och GUI-klient mot text-klient respektive text-server.

Lämna rapporten till labbhandledaren. Om ni inte särskilt avtalat något annat ska den vara utskriven på papper. Följande ska finnas med i rapporten:

Rapporten måste förstås vara skriven på ett språk som labbhandledaren förstår.

Vi rekommenderar starkt att ni gör uppgiften, och redovisningen, före tentan. Mycket av det som övas i den här inlämningsuppgiften kan även finnas med på tentan. Det finns också ett absoult sista datum för redovisningar och inlämning av rapporten! Om ni vill göra redovisningar vid andra tillfällen än på de bokade laborationstillfällena, måste ni bestämma en tid. Ni kan dock inte räkna med att labbhandledaren alls är tillgänglig annat än på de bokade laborationstillfällena.


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 11 november 2007