Post on 17-Dec-2014
description
N.O.R.D.Nederlandse Overledene Registratie Donoren
"The making of"
Tjerk ValentijnET ICT27-10-2009
NORD techniek 2
Het project
• Registreren van overledenen in NL ziekenhuizen aan de hand van medische status en donatieformulier• In de jaren 90 een diskette-applicatie (zoals vroeger bij de belastingaangifte), sinds 2001 een web-applicatie• ~100 ziekenhuislocaties• ~130 gebruikers (3 tot 5 concurrent)• 40.000 records per jaar (110 - 150 p.dag)• Gemiddelde gebruiker heeft nauwelijks computervaardigheden
NORD techniek 3
Problemen met de huidige applicatie
• De oorspronkelijk opzet past niet bij de actuele wensen• Er is geen consistente GUI• Het datamodel is niet flexibel• De gebruikers en de NTS zitten niet op 1 lijn wat definities betreft• Er bestaat (in DWH) een complexe, niet transparante laag met PL/SQL "filters" die conclusies trekken over de ingevoerde gegevens
NORD techniek 4
De oplossing
• Client-server (4e generatie), we maken geen gebruik meer van de omweg van de 3e generatie web-applicaties. De server handelt geen GUI events af
• Hoeven dus ook geen HTML op de server samen te stellen
• Door client-side eventafhandeling kunnen we een snelle en gebruiksvriendelijke GUI maken zodat de gebruikers zoveel mogelijk geholpen worden bij het invoeren. Dit is vergelijkbaar met DPA
NORD techniek 5
Waaraan moet een deeloplossing voldoen?
• Een grote 'community' (veel en goede documentatie, google, forums etc.)
• Voor ontwikkelaars door ontwikkelaars• Goede testbaarheid• Vanuit oogpunt van de Java programmeur• Productiviteit, minder werk zonder flexibiliteit en
transparantie op te geven• Eenvoud (dingen zijn waar je ze verwacht)• Modulariteit (verwisselbaarheid)
NORD techniek 6
NORD techniek 7
Kenmerken van een REST architectuur
• Alternatief voor SOAP en andere RPC (Remote Procedure Call) methoden
• Maak gegevens beschikbaar via unieke URLs• Gebruik de vier werkwoorden van het web (GET, PUT,
POST, DELETE) om de gegevens achter de URLs te manipuleren
• Werkt client-server waarbij de server geen informatie over de client bijhoudt tussen requests
• Gelaagdheid, caching, ontkoppeling, schaalbaarheid
NORD techniek 8
Spring
Wat krijg je?• Goede testbaarheid, Spring regelt de koppeling tussen
objecten en de applicatie kan buiten de server werken en getest worden
• Gebruikte frameworks (Hibernate) worden eenvoudiger, Spring regelt de noodzakelijke "loodgieterij"
Welke onderdelen?• Spring IOC (Inversion Of Control) container om
declaratief objecten te koppelen• Spring MVC om eenvoudig REST webservices te
maken• Spring testframework om persistence te testen in
geisoleerde transacties
NORD techniek 9
Spring MCV
NORD techniek 10
Alternatieven voor Spring MVC als web-controller
• Handgeschreven servlets (veel programmeren)• Een JAX-RS implementatie (instabiel, onvolwassen)• Het Restlet framework (degelijk, maar te veel
mogelijkheden)• Grails (te exotisch, gebruikt Groovy ipv Java)
NORD techniek 11
Integration tests met Spring
NORD techniek 12
Hibernate: Java <--> DB
* Is gericht op de Java ontwikkelaar, maar niet bedoeld om de database te negeren of te verwaarlozen
NORD techniek 13
Hibernate: wat heb je er aan?
• Declaratieve manier om Java objecten en een database te koppelen. In combinatie met Spring wordt Hibernate nog eenvoudiger
• Declaratieve manier om caching van objecten toe te passen om de database te ontlasten
• Hibernate update alleen de database als object(en) daadwerkelijk aangepast zijn
• Zeer configurabel, maar dat is optioneel• Eenvoudig ontwikkelen en testen tegen een 'in-
memory' database in plaats van een zware Oracle database via het netwerk
NORD techniek 14
Hibernate: een voorbeeld
NORD techniek 15
JQuery
is voornamelijk een DSL (Domain Specific Language) voor webpagina's zoals SQL is voor Relationele databases
Wat levert dit op?
• Biedt ontwikkelaars een API bovenop JavaScript om snel en crossbrowser te kunnen werken met de DOM (Document Object Model)
• De ontwikkelaar kan DOM objecten eenvoudig selecteren, groeperen, filteren en bewerken
• Biedt ontwikkelaars een manier om componenten binnen een GUI los te koppelen door middel van 'custom events'
• Biedt veel plugins en een eenvoudige manier om plugins te schrijven
NORD techniek 16
Testen
Automatisch testen staat centraal in dit project. Middelen?
Client• Unit tests met Qunit (van de makers van JQuery)• Functionele tests (use cases) met Selenium
Server• Unit tests van Java code met JUnit• Integration tests met Spring, afhankelijkheden zijn tijdens
tests te vervangen door 'test doubles'
NORD techniek 17
Bean validation (JSR 303)• Standaard, declaratief validatieframework voor de
bussinesslaag van applicaties• Mogelijkheden om de validaties naar meerdere lagen
(database of GUI) te exporteren• Voorbeeld:
@NotNull(message="is verplicht") @Pastprivate Date overlijdenDatum;
@Min(value = -1, message="mimimaal 0") @Max(value = 150, message="maximaal 150")private int leeftijd;
@NotNull(message="is verplicht") @Pattern(regexp = VALID_PATNUM, message="mag alleen uit cijfers en letters bestaan")private String patientNummer;
NORD techniek 18
Tools
• Iedere ontwikkelomgeving kan unit tests uitvoeren• Iedere ontwikkelomgeving biedt hulp om het werken met
Spring en Hibernate te vereenvoudigen• Iedere ontwikkelomgeving biedt hulp met syntax
highlighting voor Java, JavaScript, CSS, HTML etc.• Iedere ontwikkelomgeving biedt hulp met refactoring
Verder nog:• Firefox developer plugins:• Firebug• Live HTTP Headers• Online tools zoals JSLint en:• http://tools.mozilla.com/
NORD techniek 19
NORD techniek 20
Samenvattend: wat werkt?
• REST als communicatie-architectuur• JSON als communicatieformaat• GSON om JSON Strings naar Java objecten te vertalen en
weer terug• Spring MVC om webservices te bouwen• Spring integration tests en Junit unit tests• Hibernate om de applicatie aan de database te koppelen• JQuery selectors, plugins en event-binding• Bean validation voor declaratieve validaties• Caching verminderd communicatie tussen lagen,
bijvoorbeeld ETags en Hibernate object cache• JavaScript als volwaardige programmeertaal
NORD techniek 21
Toepasbaarheid op de afdeling
• Hoe snel kan iemand met alleen basale Java kennis hiermee productief worden?
• Wat is het beste opleidingstraject voor mensen met alleen basale Java kennis?
NORD techniek 22
Einde