Tags: Frameworks | JEE | Java | Spring

Het Spring Framework in de praktijk bij Ilse Media

Afgelopen zomer is het nieuwste boek van Bram Smeets uitgegeven, getiteld “Building Spring 2 Enterprise Applications” (Apress, 2007). Dit boek is opnieuw een bevestiging dat lightweight Java development een volwassen en geaccepteerde methodiek is geworden in de markt. Het boek richt zich vooral op professionele Java ontwikkelaars voor wie de wereld van Enterprise Java relatief nieuw is.

Spring met een Hollands tintje

2001 was het jaar waarin Alef Arendsen, Nederlandse ICT ondernemer en software architect met wereldwijde reputatie, zocht naar een nieuwe uitdaging. Samen met een vriend richtte hij JTeam op, een software bedrijf dat gespecialiseerd is in het leveren van maatwerkoplossingen gebaseerd op JEE. Gezien het feit dat JTeam ook grote voorstander is van het Agile principe, duurde het niet lang totdat wij in aanraking kwamen met het Spring Framework. Nadat wij als eerste Nederlands bedrijf al enkele projecten hadden gerealiseerd met dit framework en de grote toegevoegde waarde hiervan zagen, besloten wij al snel dit product verder te omarmen door actief mee te werken aan doorontwikkeling.
Het Spring Framework in de praktijk bij Ilse Media

Ongeveer een half jaar later richtten wij samen met enkele andere internationale Java guru’s, inclusief Rod Johnson, Interface21 op, het multinationale bedrijf dat commerciële support levert op het Spring Framework. Tegenwoordig wordt JTeam geleid door Algemeen Directeur Leonard Wolters en Technisch Directeur Bram Smeets. Met klanten als Het Concertgebouw, Tiscali, Zenggi, TU Delft, Westbury en i-Local is JTeam succesvol in diverse branches zoals ICT, Telecom, Cultuur en Onderwijs, maar JTeam heeft haar wortels vooral in Nieuwe Media. Een van JTeam’s klanten van het eerste uur is Ilse Media. Dit artikel beschrijft in detail hoe JTeam agile software ontwikkeling met het Spring Framework heeft toegepast bij een aantal projecten van Ilse Media.

Voorbereidingen tot groei bij Ilse

Toen Nils Rooijmans in 2001 startte als Product Manager bij Ilse.nl (hij is inmiddels gepromoveerd tot Head of esearch), was hij al tot de volgende belangrijke conclusie gekomen: “succes in de online mediawereld wordt bepaald door snelle (re)actie tegen de laagst mogelijke kosten. In de steeds veranderende wereld van online media, draait het bij Ilse’s bedrijfsplan om het spotten, overnemen en uitbreiden van opbrengst genererende online platforms. Door een scala aan sites aan te bieden die gericht zijn op specifi eke gebruikers, (bijv. schoolbank.nl, nu.nl, autoweek.nl, newrulez.nl) creëert Ilse een kant-en-klaar ‘high traffi c’ publiek dat zeer aantrekkelijk is voor specifi eke adverteerders. Deze adverteerders betalen Ilse om hun campagnes te uit te zetten op de platforms”. Naast het creëren van verticale platforms heeft Ilse ook ingenieuze applicaties laten ontwikkelen voor de planning, uitvoering en facturering van verkoopcampagnes. Collega Jochem Prins, Technical Project Lead bij Ilse.nl springt hem bij: “Wij willen het Nederlandse web zo compleet mogelijk indexeren en verticale zoekdiensten aan de consument bieden. Dat daarbij een individuele zoekdienst niet winstgevend is maakt voor ons niet zoveel uit. Wij streven ernaar om de aggregatie van onze zoekdiensten echt als een complete service aan de Nederlandse consument aan te bieden.”

Rooijmans: “Om een dergelijk pakket van merknamen te laten uitgroeien tot zijn volle potentie, werd het mij snel duidelijk dat het gebaseerd moest op een technologie die zowel in snelheid als in lage kosten kon voorzien, terwijl het robuust genoeg moest zijn om het groeiende aantal transacties – waarvan ik zeker was dat Ilse deze op korte termijn zou genereren - aan te kunnen. Ilse, als innovatief bedrijf pur sang, wilde een implementatiepartner die een flexibele maar betrouwbare oplossing kon bouwen, en ons een innovatieve technologie kon leveren met lage onderhoudskosten”.

Rooijmans: “Ilse deed wel een paar dingetjes met PHP en had een interne webserver opgezet maar dit was verre van toereikend voor wat er gedaan moest worden. Ik was al overtuigd van de voordelen van Open Source en JEE als de meest solide basis voor bedrijfkritische applicaties. De belangrijkste uitdaging was nu om een echt betrouwbare, professionele partij te vinden die tegelijkertijd flexibel kon zijn ten aanzien van Ilse’s behoeften en budget. Bij JTeam werd niet alleen de urgentie direct begrepen, maar ook het belang van een ontwerp dat ruimte laat voor groei en een praktische uitvoering in fasen.”

Wolters herinnert zich de eerste afspraak met Ilse: ”Er was een berg aan vereisten, een enorme hoeveelheid databronnen en de dringende behoefte om alles snel te realiseren. Maar wat vooral opviel was het patroon dat bij veel sites van Ilse voorkwam. Elke SERP (Search Engine Results Page) is gebaseerd op hetzelfde principe, met dezelfde vereisten voor data-integratie en functionaliteit, maar met telkens een andere inhoud. Wat we dus moesten bouwen voor Ilse was een ‘template engine’, met gemeenschappelijke functionaliteit en naadloze integratie met de verschillende databronnen. Met deze engine moest het vervolgens mogelijk zijn om eenvoudig en binnen afzienbare tijd een geheel nieuwe zoekportaal te creëren en te configureren.”

JTeam’s flexibele aanpak snijdt hout

JTeam heeft daarom voor Ilse een modulair platform ontwikkeld dat steeds opnieuw te gebruiken is, het zogenaamde ‘XML syndication platform’. Voor JTeam, waarvan het kernteam al meer dan acht jaar actief is in de wereld van Enterprise Java software ontwikkeling, lag de oplossing ter realisatie van deze componenten voor de hand. Als voorstander van light weight Java gelooft JTeam sterk in het "keep it simple" principe. Maar net zo belangrijk hierbij is het om technologie in de juiste mate toe te passen. ‘Simplicity’, ‘light weight’ en ‘Open Source’ zijn dan ook concepten die JTeam graag toepast op verschillende niveaus. Dit uit zich in een verhoging van de productiviteit en een kostenbesparing. Tevens helpt onze pragmatische YAGNI benadering (You Ain’t Gonna Need It) ten aanzien van gebruikerseisen, door de klant te stimuleren om te kiezen voor functionaliteit die voor het bedrijf goed te verantwoorden is en het meeste bijdraagt aan het eindresultaat.

Om de Ilse XML syndication engine te bouwen, die de basis vormt voor alle SERP toepassingen, heeft JTeam de volgende 100% Open Source technologieën gebruikt:

• Frontend: JSP 1.x & 2.x, Velocity, Webframework (eigen framework)
• Middleware: Spring 1.2, iBatis, J2EE 1.5, piccolo
• Application Servers: Resin 3.x, MySQL 4.1.x, Apache 2.x, Linux, JRockit JVM

Spring biedt de juiste mix van vrijheid en beperking tijdens de ontwikkeling


Het Spring Framework in de praktijk bij Ilse Media “Het gebruik van JEE out of the box is geen aanlokkelijke optie” aldus Johnson, een uitspraak waarmee JTeam architecten het grotendeels mee eens zijn. Ondanks het feit dat JEE een goede abstractie biedt op een aantal low-level infrastructuren en API’s, forceert het gebruik van JEE de ontwikkelaar in een foutief ontwikkelmodel. Een framework als Spring biedt de ontwikkelaar een abstractie die veel verder gaat dan JEE en biedt daarnaast nog een grote verzameling best practices en zeer veel integratie met bestaande enterprise oplossingen. Daarmee vult het Spring Framework de ontbrekende stukjes van de puzzel in, en biedt het dus de juiste mix van vrijheid en beperking tijdens software ontwikkeling.

De belangrijkste waarden van Spring op een rij:

• Geen exclusiviteit; applicaties die geschreven zijn met Spring kunnen ook zonder Spring gebruikt worden. Tenzij er gebruik wordt gemaakt van bruikbare abstracties die door Spring aangeboden worden, zoals de JdbcTemplate, heeft de code geen afhankelijkheid op de Spring codebase. Naast het voorkomen van een afhankelijkheid op één framework of leverancier, zorgt deze loskoppeling ook voor een eenvoudige en risicoloze migratie. Ten slotte heeft Spring een goede reputatie op het gebied van achteren voorwaartse compatibiliteit, waardoor men zonder problemen kan up- of downgraden tussen versies.
• Consistent programmeermodel; Spring promoot het gebruik van interfaces en POJO’s (Plain Old Java Object). Hierdoor vervalt in de meeste gevallen de noodzaak voor dure en relatief zware applicatie servers. Uiteraard kan er afhankelijk van de projecteigenschappen gekozen worden voor het gebruik van een applicatie server, maar het is niet langer een vereiste voor het opschrijven van enterprise applicaties. Ook de interne opbouw van de Spring code en API’s is consistent wat erin resulteert dat kennis en begrip van een onderdeel van het Spring Framework automatisch leidt tot een voorsprong bij het leren en begrijpen van een ander deel.
• Minder infrastructurele code; denk hierbij aan deployment descriptors, iets waar het JEE programmeermodel juist veel nadruk op legt. Spring laat de ontwikkelaar zich focussen op het realiseren van bedrijfslogica, terwijl Spring zich ontfermt over de zogenaamde ‘plumbing code’. Dit is de code die eigenlijk geen toegevoegde waarde heeft, maar toch iedere keer geschreven dient te worden.
• A rchitecturale keuze; doordat Spring op verschillende lagen abstracties aanbrengt en het gebruik van interfaces promoot is het eenvoudiger om op een later tijdstip gedurende een project te switchen van implementatie. Dit geldt niet alleen voor eigen implementaties, maar ook voor bijvoorbeeld het gebruik van een JDBC implementatie naar implementatie met behulp van een Object Relational Mapping (ORM) oplossing. Zoals al gezegd is dus ook de keuze voor het wel of niet inzetten van een applicatie server uit te stellen tot een latere fase van het project, wanneer de eisen voor het platform wellicht beter bekend zijn.
• Testbaarheid; door het gebruik van interfaces en POJO’s is het eenvoudig om code te testen. Afhankelijkheden van de te testen code kunnen eenvoudig vervangen worden door zogenaamde mock implementaties.

Spring is in essentie een grote verzameling van modules die de eerder beschreven waarden in acht nemen en zich daarbij richten op het vereenvoudigen van minstens één deelaspect van software ontwikkeling. Er zijn momenteel vele boeken op de markt die een goed overzicht geven van de Spring modules die er zijn, waaronder de klassieker “Professional Java development with the Spring Framework” (Wrox, 2005), mede geschreven door Arendsen.

Een module van het Spring Framework die speciale aandacht vergt is de Inversion of Control (IoC) container. IoC, ook wel Dependency Injection genoemd hoewel die term niet volledig de lading dekt, is verreweg de meest bekende feature van Spring. De IoC container regelt automatisch de afhankelijkheden van een stuk broncode. De ontwikkelaar defi nieert slechts de afhankelijkheden en de IoC container injecteert deze automatisch tijdens de levensduur van de applicatie. Hiermee vervalt de expliciete relatie tussen de broncode en haar omgeving, wat ertoe leidt dat de omgeving onafhankelijk gewijzigd kan worden wanneer dit nodig mocht blijken. Let wel, de Spring ‘container’ is niet te vergelijken met een EJB container in termen van zwaarte; de Spring container is een lichtgewicht container, die zelfs als onderdeel van een test gedraaid kan worden. gedraaid kan worden.

Andere belangrijke modules die onderdeel uitmaken van het Spring Framework zijn:

• Aspect Oriented Programming (AOP) framework. Spring biedt een eigen AOP framework naast
integratie met het defacto AspectJ. • Data access abstracties. Naast een zeer goede abstractie over JDBC biedt Spring integratie met de meest voorkomende ORM oplossingen zoals Hibernate, iBatis en verscheidene JPA implementaties aan.
• Transactie management. Door het gebruik van Spring kan er eenvoudig en declaratief een volledig transactioneel systeem geconfi gureerd worden, zonder dat daarvoor een applicatie server benodigd is.
• Remoting. Daarnaast biedt Spring een eenvoudig te gebruiken module om remoting te implementeren als onderdeel van een systeem. Hierbij worden verschillende protocollen ondersteund met ieder hun eigen voor- en nadelen. Het wisselen tussen deze protocollen is slechts een kwestie van confi guratie aanpassen, terwijl de applicatie code geen enkele wijziging vereist.
• Spring MVC. Dit is een web framework dat gestoeld is op het principe van Model-View-Controller (MVC). Spring MVC is ontstaan als aanvulling en verbetering van de toenmalige defacto web framework, Struts genaamd.

Dennis de Boer, projectmanager bij JTeam voor Ilse Media, legt uit welke Spring componenten het belangrijkst waren bij de totstandkoming van het Ilse Media framework: “Alle SERP’s, zoals ilsesearch en nusearch zijn een combinatie van het Spring MVC model, gekoppeld aan het webframework (XML-Syndication). De bezoekers van een SERP vuren zoekopdrachten af welke door het webframework en het XML syndicatie platform vervolgens worden afgehandeld. Het XML syndicatie platform is verantwoordelijk voor het ophalen en integreren van gegevens van verschillende externe data services (zoals De Telefoongids, iLocal, en de eigen zoekmachine van Ilse Media). Al deze verschillende data bronnen worden daarna door het platform geünifi ceerd, klaargemaakt en aangeboden aan de SERP in de vorm van XML, zodat deze de opgehaalde data kan gebruiken om aan de gebruiker te tonen. Tot op heden zijn er al zeven SERPs op deze manier gerealiseerd.”

Dependency Injection zorgt voor testgemak en productiviteit

Zowel de SERP als het XML syndicatie platform zijn volledig met behulp van Spring ontwikkeld. Ongeveer tien content providers zijn momenteel ontsloten met behulp van de verschillende SERPs. Het voordeel dat Spring ons geeft is dat we deze content providers als een soort module in XML kunnen configureren. Het aansluiten van een nieuwe content provider is niets meer dan het configureren van deze provider in XML. Door Inversion of Control (dependency injection) kunnen we heel makkelijk switchen in implementatie van een content provider door alleen de XML configuratie aan te passen. Dit resulteert in een enorme productiviteits boost bij de ontwikkelaars. Het aansluiten van een hele nieuwe content provider kan daarom ook in veel minder tijd dan in een implementatie zonder Spring.

De introductie van het Dependency Injection model zorgt voor meer ‘loosely coupled’ objecten wat de code makkelijker maakt om te testen, gezien het feit dat de objecten minder afhankelijkheden hebben. De mogelijkheid om de code beter en eenvoudiger te testen, komt de stabiliteit en correctheid van de code van de SERPs alleen maar ten goede. Door de eenvoudige configuratie in XML die Spring ons biedt is het voor ons eenvoudig om te switchen tussen verschillende implementaties.

De SERPs maken nu allemaal gebruik van de Java Server Pages (JSP) technologie om de informatie te presenteren, maar Spring ondersteunt ook andere view technologieën zoals bv. Velocity en Freemarker. Slechts één regel XML zorgt voor een complete verandering in de gebruikte techniek om de presentatie aan de gebruiker te veranderen. Daarnaast biedt Spring ons een aantal handige abstractie classes die het werk voor ons makkelijker maken. Voornamelijk een connectie maken met de database wordt door het gebruik van de JdbcTemplate van Spring vele malen eenvoudiger, doordat onder andere foutafhandeling (exception handling) door Spring wordt afgehandeld.

Voordelen winnen het van een enkel nadeel

Zijn er dan wel nadelen van het lightweight Java platform zoals in gebruik bij Ilse? “Jawel”, zegt Prins. “Vooral de kleine aanpassingen hebben een relatief lange doorlooptijd, omdat je bij elke verandering ook een nieuwe WAR file moet maken. Maar gezien de voordelen waaronder de robuustheid die de architectuur met zich mee brengt en de stabiliteit die wordt bereikt ondanks het kleine aantal servers, is dit niet zo’n probleem. Omdat JTeam er op staat dat er zorgvuldig wordt gewerkt volgens goede ontwikkelstraat principes, zie je relatief weinig bugs terug in een nieuwe versie. Dat compenseert weer voor de doorlooptijd van kleine aanpassingen”.

“Ook loopt communicatie met JTeam heel soepel. Naast het feit dat het een prettige samenwerking is met de teamleden, gaat alle communicatie over de status van het project via JTeam’s issue management system Jira, waartoe wij ook toegang hebben. In Jira kun je een functionele wens vanaf ontwerp tot testfase volgen, en dat zorgt voor een enorm efficiënte communicatie, die anders een tijdrovende taak zou worden in zo’n jarenlang project.”

De cijfers spreken voor zich zelf

Deze implementatie heeft zich over de afgelopen jaren bewezen. Gemiddeld halen alle SERPs enkele miljoenen zoekopdrachten per dag. Ter verduidelijking, een zoekopdracht is niet hetzelfde als een pageview, maar is de gehele afhandeling van een zoekopdracht tot het presenteren van alle relaterende informatie. De combinatie van Enterprise Java en Spring zorgt voor een uitstekende performance op dit gebied en zorgt ervoor dat we slechts 3 servers nodig hebben om al deze opdrachten voor alle SERPs te verwerken. Spring is een dermate stabiele factor in de Ilse SERPs, dat deze verticale platforms al meer dan 5 jaar zonder problemen draaien. Rooijmans van Ilse Media onderstreept dit: “De software architectuur biedt stabiliteit en functionaliteit, met als bijkomend voordeel dat nieuwe developers er ook snel mee aan de slag kunnen. Zodra Ilse besluit om een nieuw portal te beginnen, kan een van onze developers het compleet geconfigureerd hebben in slechts een paar uurtjes.”

“Dit is het soort efficiency waaraan je kunt zien dat bepaalde technische beslissingen zichzelf echt terugbetalen” voegt Prins daar aan toe: “performance en schaalbaarheid van deze oplossingdaar zijn wij echt heel tevreden over. Als je ziet wat er allemaal op 3 servers draait, terwijl soortgelijke bedrijven tientallen, zo niet honderden servers in gebruik hebben, dan is deze technologie echt een goede keuze geweest, niet alleen in eerste instantie maar ook voor de komende jaren.”

Zowel de Ilse case-study als data waarop JTeam’s gratis, maandelijks “tech. talk” sessies plaatsvinden zijn te vinden op www.jteam.nl

Leeslijst:

Building Spring 2 Enterprise Applications by Interface 21,
by Seth Ladd and Bram Smeets
Better, Faster, lighter Java,
by Tate &Gehtland
Expert one-on-one J2EE Development without EJB
by Johnson and Hoeller
Professional Java Development with the Spring Framework
by Johnson, Hoeller, Arendsen, Risberg and Samplaneau.
Open Source for the Enterprise
by Woods and Guliani.
Lees meer over JTeam
Ga terug naar We Love IT uitgave #6 - 2007
Advertentie