Systemintegration-Yrgo-2018

From Juneday education
Jump to: navigation, search

Contents

Systemintegration för klassen Java 17, vårterminen 2018

Välkomna till kurssidan för Systemintegration!

Nedan kommer ett schema. Det är viktigt att ni tittar i schemat och förbereder er inför lektionerna.

Kursen har ingen tenta, utan en laboration som skall lämnas in. Ni får lektioner som hjälper er att klara laborationen men detta bygger också på att ni gör "läxor" enligt vad som anges i schemat. Laborationen är ett system med databas och Java-servlet som publicerar JSON och slutligen en Android-app som kopplar upp sig mot er Java-servlet och hämtar JSON. Vi bygger systemet stegvis, så det är viktigt att ni har varje steg klart då stegen bygger vidare på varandra.

I slutet av kursen tar vi fram Android-appen. Det är ingen Android-kurs, utan en workshop/tutorial i två dagar (två tillfällen), så en lärare visar er alla steg för att ta fram appen (men ni skriver själva av det läraren visar).

Vecka 10, torsdag 8/3 - intro, bash

Mål för dagen

  • Alla har bash (antingen på Mac eller Cygwin)
  • alla har programmen och en editor
  • alla kan cd, mkdir osv (grundläggande bash - arbeta i terminalen)
  • Alla är medvetna om att lektionerna är 09:00 - 12:00 och inte det som står i Yrgos fantastiska schema

Tema

Introduktion till kursen, installation bash, introduktion bash: cd, pwd, mkdir, cp, mv, wget -O

Installera program: wget, editor (notepad++, sublime, eller annat)

Tider för dagen

Installationsinstruktioner

Börja med att installera programmen curl och unzip (på Mac respektive i Cygwin). Kör sedan skriptet nedan från en terminal:

  • Du har väl curl och unzip installerat nu? I så fall, kör följande kommando: curl https://raw.githubusercontent.com/progund/utils/master/bin/jd-bootstrap.sh | bash
  • om kommandot ovan inte fungerar och du får en utskrift som ser ut ungefär så här curl: (77) error setting certificate verify locations:", kör följande kommando istället:
     curl --insecure https://raw.githubusercontent.com/progund/utils/master/bin/jd-bootstrap.sh | bash
    
  • Klicka här för mer information om scriptet.
  • Skriptet hämtar och installerar programvara som är bra att ha under kursen

Se till att er editor går att starta från terminalen via bash

  • Fixa PATH till er editor. Exempel: Notepad++ på windows:

Lägg till följande i .bashrc i er hemkatalog:

export PATH=$PATH:/cygdrive/c/Program\ Files/Notepad++/

Det finns anvisningar för Atom på sidan Editor - ni väljer vilken editor ni använder. Läraren ger inte support på IDE:er såsom Netbeans, Eclipse, IntelliJ - ni sköter sånt själva - våra instruktioner utgår från en vanlig text-editor (emacs, atom, notepad++, sublime osv som startas från bash).

Läxa till nästa dag

Vecka 11 torsdag 15/3 Repetition Interface, Exceptions

Mål för dagen

Alla har fräschat upp interface och exceptions. Alla vet att de ska se filmer i läxa.

Tema

Repetition Java (interface, exceptions)

Tider för dagen

Läxa

Se filmer om HTTP och servlet-workshop, och response codes

Vecka 12, tisdag 20/3 - Intro HTTP, Servlets, Response codes

Mål för dagen

  • Alla vet vad HTTP är
  • alla har skapat en enkel servlet i workshopen och anslutit till den via browser etc(lwp-request)
  • Alla vet vad Response codes (200, 404, 500 osv) är
  • Alla har i förväg sett:
  • Om ni vill kan ni utgå från servleten ni skapar i workshopen för er laboration och bygga vidare på den

Tema

  • Vad är HTTP och Servlets

Tider för dagen

Läxa

Vanliga problem och dessas lösningar

  • Problem att ladda ned winstone med wget (på MacOS) - Se: Bash_FAQ#Certicate_errors_with_wget
  • Verifiera att du fått ned rätt fil: Kör kommandot file och ge JAR-filen som argument. Om file svarar "empty" eller "HTML" så gick det fel. Verifiera att länken till JAR-filen verkligen går till JAR-filen och inte till en HTML-sida med en länk till JAR-filen - korrekt svar från file ska vara winstone.jar: Zip archive data, at least v1.0 to extract
  • Kompilerings fel
    • Class not found javax.http... Du måste ha med JAR-filen i classpath (javac -cp winstone.jar .....)
  • Kör-fel
    • Kontrollera package-deklarationen och verifiera att filen ligger i en katalogstruktur som överensstämmer med paketnamnet (under www/WEB-INF/classes/

Vecka 12, torsdag 22/3 - Introduktion XML, JSON

Mål för dagen

  • Alla vet vad XML/JSON är
  • Alla har en servlet för sin labb som kan servera XML eller JSON (genom att titta på GET-parametrarna)

Tema

XML och JSON - introduktion.

Tider för dagen

  • 09:00 Lektion: Introduktion till XML och JSON
  • 10:00 Lektion: Servlet serving XML or JSON - Fokus är på GET-parametern format och if-satserna
  • 11:00 Lektion/workshop Läraren går igenom ett mycket liknande exempel på er labb här Ett schedule-system för vikarier (github) Fokus ligger på att förklara Servleten, inte JDBC/Databasen mm, och vad det är till för (publicera schema) Till och med "END PART ONE" fortsättning följer!
    • Manus: Walk-through - Schedule system for substitute teachers
    • Notera: Servleten i exemplet genererar HTML - er servlet i labben ska generera XML eller JSON i stället, beroende på format-parametern!
    • Ni kan utgå från det systemet och anpassa det till er labb eller influeras av källkoden när ni skriver egen i labben
    • Vill ni ha mer av en utmaning, utgå från servleten i servlet-workshopen! Den innehåller mindre kod från lärarna (rekommenderas!)
    • Igen: Er servlet ska kunna svara med XML eller JSON, inte HTML så som exemplets servlet!

Läxa

  • Jobba med servleten som ni skapade i första workshopen (introduction to servlets) så att den kan svara på format=xml respektive format=json
    • Låt doGet() läsa parametern format och kolla om det är xml eller json. Om det är något annat eller om parametern saknas (getParameter returnerar då null), så ska servleten skriva ett felmeddelande "Format missing" eller "Format not supported"
    • Ni kan hårdkoda en låtsas xml som svar repsektive en låstas JSON som svar och skriva det som response
    • Titta på labb-sidan för ett exempel på hur JSON kan se ut - vi går igenom JSON och XML senare i kursen!
    • Sätt rätt content-type på response: application/xml respektive application/json - titta i exemplet ovan för hur man sätter content-type (Ni kan googla content-type för json, xml och html eller få tips av läraren)
    • Testa att er servlet gör rätt genom att använda en browser - nästa gång kan vi visa hur man testar från bash!
  • Läs på JDBC: Introduction_to_JDBC (inklusive eventuella övningar och filmer) och se filmerna:
  • Läs wiki-sida: Introduction_to_layered_architectures och se filmerna:
  • Läs wiki-sida: Getting started with SQLite och se filmerna:
    • Kom igång med SQLite3 (Swe)
    • Kom igång med SQLite3 Live-kodning (Swe)

Checklista för hur ni ligger till i labben

Efter idag ska ni ha tillräckliga kunskaper för att lösa task 1 och 2 i labben. Se labbsidan för instruktioner:

  • Ni ska ha skapat en förenklad variant av en klass som kan formatera Assignment till JSON genom att ändra lite i en klass från exemplet idag (ändra HtmlFormatter till en JsonFormatter som skapar Json lite hårdkodat) (task 1)
  • Er servlet ska bry sig om GET-parametern format och om värdet är json, så ska doGet() anropa formattern och få lite fusk-JSON tillbaka som skrivs till response. Ni kan göra samma sak för XML om ni vill, skapa en fake-formatter för XML och låta doGet anropa den om format=xml... (task 2)

Denna checklista är för er som vill arbeta med labben redan nu och inte bli stressade i slutet av kursen men det kommer finnas gott om tid att bli klar ändå. Vi rekommenderar dock att ni följer våra checklistor eftersom vi hänvisar till task:ar som handlar om sådant vi precis gått igenom!

Vecka 13, torsdag 29/3 - JDBC, SQLite3, Skiktad arkitektur

Mål för dagen

  • Alla har i förväg sett filmerna om JDBC mm
  • Alla vet vad JDBC är och kan använda SQLite3 från Java
  • Alla kan skapa databas från dump-fil SQLite3

Tema

  • JDBC
  • Tiered architecture (no JDBC in servlet, use Java interfaces)
  • Servlet reading from DB

Tider för dagen

Läxa

  • Skapa en enkel databas i SQLite3 och få er servlet att läsa från den och skriva resultat som text eller html
    • Titta igen på Exemplet från SubstituteScheduleServlet:en från tidigare i kursen
    • Använd skiktad arkitektur - JDBC är förbjudet i servleten - använd hjälpklasser och dölj att det är en databas (se exemplen från dagens föreläsningar)
    • Ni måste lägga sqlite.jar (eller vad den heter hos er) i www/WEB-INF/lib/ för att servleten ska hitta sqlite.jar och JDBC-grejerna
  • Läs sidan Creating_JSON_from_Java och se filmerna:
  • Läs sidan Creating_XML_from_Java och se filmerna:
  • Repetera filmen Servlet serving XML or CSV or JSON (OBS! Ni kommer använda annan JSON-syntax än i filmen!)

Vecka 14, tisdag 3/4 JDBC i skiktad arkitektur, skapa JSON, Skapa XML

Mål för dagen

  • Alla kan använda JDBC från servlet med skiktad arkitektur,
  • alla kan skapa JSON med org.json
  • alla kan skapa XML från Java

Tema

Skapa en servlet som använder skiktad arkitektur och jdbc, svarar med HTML, Skapa JSON, Skapa XML från Java

Tider för dagen

Om ni inte hinner klart övningarna - gör dem i läxa och skriv upp eventuella frågor!

Läxa

  • Se till att ni är ikapp med tidigare läxor och övningsuppgifter viktigt!
  • Se till att ni gjort särskilt alla övningar om "creating JSON" och "creating XML" då ni ska lägga till sådan funktionalitet i er labb i nästa vecka om ni inte hann under dagen!
  • Läs kapitlen:

Vecka 14, torsdag 5/4 Labben - Databasen och Servleten

Mål för dagen

  • Alla har förstått vad labben går ut på
  • Ni ska vara ett steg närmare att ha löst labben.

Tema

Gör om LABB-servleten så den

  • läser data från databasen och
  • skapar JSON (samt svarar med application/json) som content-type

Tider för dagen

  • 09:00 Labbens databas gås igenom - Tabellernas schema, exempel-SELECT för alla lärare visst daturm!
  • 10:00 Labbens Webb API gås igenom - GET-parametrar och exempel-svar i JSON och XML - Webb-api är alltså svar på frågan "Hur hämtar jag viss data och hur ser svaret i så fall ut?"
    • Läraren visar igen koden från detta exempel: github.com/progund/web-misc/tree/master/nahid-sysint och förklarar anropen och vad de betyder
    • Vi gör del 2 av denna presentation: Manus: Walk-through - Schedule system for substitute teachers (OBS! Modellen här är en enkel Assignment-klass)
    • En strategi för er servlet tas fram
    • Ex: Följande typer av frågor till web api:et (servleten) finns:
      • alla schemapunkter (assignments) för alla lärare
      • alla schemapunkter (assignments) för en viss lärare
      • alla schemapunkter (assignments) för en viss tid
      • alla schemapunkter (assignments) för en viss lärare en viss tid
    • Skapa metoder för ovanstående fyra typer av frågor, och motsvarande SQL - metoderna kan anropas från doGet eller i en hjälpklass

OBS! Exemplelt använder en enkel klass Assignment som har tre String: teacher, date, school, men ni ska använda modellen från Creating JSON with org.json-exemplet med flera klasser: Schedule, School och Substitute! Se labbsidan, task 3, för instruktioner!

Om ni har gjort task 1 och 2 i labben, så har ni skrivit den enklare klassen Assignment, precis som i exemplet vi gått igenom. Men nu ska ni alltså ändra till att skriva tre klasser i stället enligt ovan! Detta gör ni i task 3. I task 4 skriver ni metoder för att hämta data från databasen - de fyra metoderna. Se nedan i checklist!

  • 11:00 Handledning

Checklista för hur ni ligger till med labben!

Efter idag, ska ni vara klara med tasks 1-4. Det betyder att ert system nu har:

  • Koll på format-parametern och bryr sig om JSON-formatet
  • Pratar med databasen och kan skapa en lista av Assignment som ni skrivit om (refactored)
    • En Assignment i nya versionen innehåller en Substitute-referens, en String med datum och en School-referens
  • Databasklassen Assignments är ansvarig för fyra metoder:
    • all() - returnerar en List<Assignment> med alla Assignment för alla lärare
    • forTeacher() - returnerar en List<Assignment> med alla Assignment för en viss lärare
    • at() - returnerar en List<Assignment> med alla Assignment för alla lärare, ett visst datum
    • forTeacherAt() - returnerar en List<Assignment> med alla Assignment för en viss lärare, ett visst datum

Se labbsidan för instruktioner för hur ni ska lösa task 1 - 4! Hinner ni inte under dagen, är det läxa att hinna med task 1-4!

Läxa

  • Ni ska ha en fungerade Databas-JSON-kedja i er Servlet till nästa gång
  • Repetera Creating XML (wiki, slide och filmerna från tidigare i schemat)

Om API:et och de anrop/queries som er servlet skall svara på

  • Inga parametrar - Alla Assignments skall ges som svar
  • format - värdet skall kunna vara json eller xml (bara json skall funka än så länge)
  • day - om endast denna parameter anges, skall alla lärares assignments den dagen listas
  • substitute_id - om endast denna parameter anges, skall denna vikaries assignments listas
  • substitute_id i kombination med day - denna vikaries assignment denna dag listas

Vecka 15, torsdag 12/4

Mål för dagen

  • Alla har stöd för XML och JDBC (databas) i sin labb-servlet
  • Alla vet vad en Factory är och vad den är till för

Tema

Gör om servleten så den läser data från databasen och skapar XML, svarar med application/xml. Till detta kan vi använda en så kallad Factory.

Tider för dagen

Tips för er Servlet i labben

Om ni tycker det är för krångligt att göra som i föreläsningen, är det helt OK om er Factory är lite "dummare" och har en switch - case eller till och med IF-sats i factoryn och "hårdkodar" vilken klass som skall returneras. Pseudo-kod:

// format factory...
public static Formatter getFormatter(String format) {
  // if format is "xml" 
  //   return new XmlFormatter()
  // else if format is "json"
  //   return new JsonFormatter()
  // end if
}

Men om ni vill använda dynamisk laddning, så är det också cool. Ni kan initialisera laddningen från servletens init()-metod och ni kan läsa från web.xml där (web.xml kan ha element som sätter namn på klasserna för XmlFormatter och JsonFormatter. Se denna servlet för ett liknande exempel:

// init() i servleten läser värde från web.xml första gången servleten körs och sätter värdet i System.properties:

  @Override
  public void init() throws ServletException {
    System.setProperty("ProductLine", getServletContext().getInitParameter("ProductLine"));
  }

I web.xml för servleten exemplet kommer från står följande:

  <context-param>
    <param-name>ProductLine</param-name>
    <param-value>Fake</param-value>
    <!-- <param-value>DB</param-value> -->
  </context-param>
  <servlet>
    <servlet-name>api</servlet-name>
    <servlet-class>servlets.SystemetWebAPI</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>api</servlet-name>
    <url-pattern>/search/*</url-pattern>
  </servlet-mapping>

Så en servlet kan läsa en "context-param" från web.xml och lagra i system.properties. Factoryn kan sedan läsa med System.getProperty("namn-på-property")

Men det är lite överkurs och som sagt är en if-sats eller switch-case helt OK!

Checklista för hur ni ligger till med labben

Ni borde nu kunna börja med

Läxa

Inför nästa lektion ska ni förbereda er på att "parse:a" (JSON) Läs:

Se filmerna, särskilt de om org.json-versionen av parsning:

Vecka 16, torsdag 19/4

Mål för dagen

Alla kan använda org.json för att parsea JSON från ett Java-program

Tema

Att från Java konsumera JSON (parse JSON to Java-objects)

Tider för dagen

Övrigt material

Om tid finns, här är en föreläsning om parsning med enbart org.json:

Källkod:

Org.json JAR-file:

Läxa

Vecka 17, torsdag 26/4 - Fetching JSON from Java

Mål för dagen

Alla har skrivit en klient som pratar med deras servlet

Tema

Skapa kommandorads- (text-based)Java-applikation som konsumerar JSON över HTTP

Tider för dagen

Checklista för labben

Den klient ni skriver idag ska hämta JSON från er labb-servlet. Det gör att ni kan testa och felsöka er labb med hjälp av det ni skriver idag. Ni får också förståelse för vad er labb-servlet är till för, dvs att erbjuda ett sätt att hämta ut viss data och skicka det i JSON.

Om någon vecka så ska vi göra samma sak med XML, dvs skriva en klent som hämtar XML från er servlet. När den är klar, så kan ni verifiera att er Servlet fungerar som den ska.

En annan fördel med att ni skriver applikationen idag som hämtar JSON, är att ni ska med Henrik i slutet av kursen skriva en Android-app som gör samma sak - pratar med er Servlet och hämtar data som JSON. Detta blir alltså en bra förberedelse för Android-workshoparna.

Läxa

  • Om ni inte han klart att skriva en egen applikation som pratar med er labb-serlvet, så blir det läxa att skriva en sådan till nästa vecka

Nästa vecka ska vi lära oss att "parsea" XML, så läs:

Se följande filmer (särskilt filmerna om att parsea XML i Java):

Vecka 18, torsdag 3/5

Mål för dagen

Tema

Tider för dagen

Läxa

Skriv en lista på saker ni behöver repetition på eller hjälp med för att klara labben. Nästa vecka kör vi repetition och handledning eller eventuellt om ni har något önskemål på annat.

Vecka 19, tisdag 8/5

Mål för dagen

Alla har skrivit en kommandoradsapplikation som hämtar XML från labb-serlveten och skriver ut schemainformation på Standard Out.

Alla har installerat Android Studio inför nästa vecka.

Tema

Vi skriver en applikation som hämtar XML från er labbservlet och presenterar informationen som text på standard out.

De som är klara i tid kan förbereda nästa vecka genom att installera Android Studio.

Tider för dagen

  • 09:00
    • Alternativ 1: Vi skriver en kommandoradsapplikation som hämtar XML från er servlet och parsear detta till text
    • Alternativ 2: Vi skriver en webb-front-end med JavaScript och grejer som hämtar JSON från er servlet - Web-Frontend:SubstituteTeacherScheduler
  • 10:00 installera Android Studio och kolla att det fungerar inför nästa vecka
  • 11:00 Handledning eller installera Android Studio enligt ovan

Tips om ni väljer Web-Frontend:SubstituteTeacherScheduler

Lägg HTML-filen i er Servlets webroot-katalog och besök sidan i er browser på http://localhost:8080 - annars är risken stor att er browser klagar på cross-site-scripting och säkerhetsproblem. En webbsida som kommer från samma server som JSON-anropet ligger på anses däremot säkert.

Läxa

  • Alla ska ha installerat och testat att Android Studio fungerar till nästa vecka då Henrik kommer och kör lite Android

Vecka 20, torsdag 17/5

Mål för dagen

Tema

Tider för dagen

  • 09:00
  • 10:00
  • 11:00

Läxa

Tema "Android-workshop/tutorial - Henrik kommer och håller Android walk-through för en Android-klient som konsumerar JSON från Servleten - bara följa-med-och-apa-efter, inga krav egentligen." Få Henrik att bekräfta tid och att han har material 9 10 11 Mål för dagen Läxa:

Vecka 21, torsdag 24/5

"Android-workshop/tutorial - Henrik kommer och håller Android walk-through för en Android-klient

Mål för dagen

Tema

Tider för dagen

  • 09:00
  • 10:00
  • 11:00

Läxa

som konsumerar JSON från Servleten - bara följa-med-och-apa-efter, inga krav egentligen." Få Henrik att bekräfta tid och att han har material Tema 9 10 11 Mål för dagen Läxa: "Skicka in er kod: Servlet med JDBC som svarar med XML eller JSON Klient (kommandoradsbaserad) som läser XML och en som läser JSON (eller samma som kan båda) Dokumentation över projektet" Planera in tid för rättning!