wk voetbalpool webapp: dag 10

 
15 april 2010

Ik ben soms lui, maar dat pakt niet altijd even goed uit. Het wachten op het ‘klaar-voor-gebruik’-signaal van de verschillende aan de gebruiker gelieerde viewactoren (zie gisteren) had ik gedacht om in eerste instantie gewoon ‘quick-and-dirty’ te doen. De UserFactory zou wachten totdat de UserViewFactory de gelieerde views had aangemaakt en gestart, en dan pas een definitief RegistratieSucces-event uitsturen. Maar dat zorgde voor een hoop lelijke code omdat de UserFactory nu moest gaan luisteren of er actoren gestart werden, dan uitzoeken of ze van het juiste type waren, vervolgens de actor typecasten naar het juiste type, de username eruitvissen en checken of hij bij ‘deze’ gebruiker past, en zo ja, in een lijst zetten, dan controleren of er al vier zijn aangemaakt, en zo ja, dan het RegisterSucces-event opgooien.

Zoals je begrijpt nogal een byzantijnse constructie waarbij het ook nog eens per ongeluk zou kunnen gebeuren dat dezelfde actor twee keer langskomt en de teller dus eerder op 4 staat dan dat alle relevante viewactoren opgestart zijn. Uiteindelijk heb ik de UserFactory en de UserViewFactory in elkaar geschoven, wat de scheiding tussen domein en reporting-gedeelte eigenlijk wat doorbreekt, maar wat wel als voordeel heeft dat je een stuk makkelijker kan controleren dat je precies alle relevante viewactoren hebt zien langskomen.

Daarbij hadden de vier verschillende viewactoren geen gemeenschappelijke superklasse of trait waar de gebruikersnaam in genoemd werd. Dus toen de stand-up meeting begon stond er bij het afhandelen in feite vier keer dezelfde code waarin elke binnenkomende viewactor eerst nog dynamisch getypecheckt en vervolgens gecast naar het juiste type, om daarna de gebruikersnaam eruit te kunnen vissen. Nee, quick-and-dirty en lui gaat niet goed samen. Quick is het zeker niet, zo blijkt; dirty – dat dan weer wel… Met de invoering van een UserView-trait die een username-variabele stipuleert wordt de code ineens een stuk schoner en korter. Had ik dat maar eerder gedaan!

Rikkert meldt dat de persistentie-util-klasse eraan zit te komen. Wegschrijven naar CouchDB gaat nu helemaal goed, alleen de opgehaalde objecten zitten nog verpakt in een soort wrappertje. Naar verwachting is het echter niet zo’n probleem om de relevante data er snel uit te vissen. Hij verwacht het componentje vandaag klaar te krijgen zodat we het morgen in de backend kunnen hangen. Nog voor de lunch heeft hij zijn componentje klaar, nu is het nog een kwestie van documenteren en voorzien van unit tests.

Voor de rest is het een kwestie van verdergaan met waar we mee bezig zijn. Anatoly en Christa zijn ondertussen bezig met het invoeren van voorspellingen en wedstrijduitslagen. Hierna gaan ze de rest van de nog op de back-end aan te sluiten panelen onderverdelen en voorzien van de juiste functionaliteit. Werk in uitvoering dat gestaag vordert dus. Ikzelf moet mijn code nog even opschonen, een paar verdere views definieren, en later op de dag zijn we zover met zowel de functionaliteit en als het persistentie-componentje dat we de verschillende (maven-)projecten kunnen gaan samenvoegen, zodat we ons in de backend ook op persistentie kunnen richten, wat nu de eerstvolgende belangrijke klus wordt. Ik heb alleen nog nooit met maven gewerkt, Jan-Willem heeft wel eens een maven-project gedownload, en Rikkert is onze maven-expert omdat hij ooit eens een klein dingetje met maven-configuratie heeft gedaan.

We zitten dus gedrieën achter mijn computer, vingers gekruist, en proberen de verschillende POMs te integreren. Om te beginnen leggen Rikkert en Jan-Willem me de basis van Maven uit. Dan begint het aanpassen van de POMs, het heen en weer schuiven van bestanden en directories, projecten herladen, netbeans voor de zekerheid opnieuw opstarten, gepiel met subversion-commando’s, eerst vanuit netbeans en later ook vanaf de command prompt… Anderhalf uur later is onze maven-structuur ernstig ontregeld, snapt netbeans het allemaal niet meer, is de persistence-component uit de nieuwste svn-revisie verdwenen, en zijn we een hoop frustratie verder. Het is inmiddels vijf uur en we besluiten om morgen verder te gaan; Jan-Willem moet er sowieso vandoor en Rikkert is het ook wel zat en gaat ook.

Maar ik kan het niet uitstaan. In een laatste wanhoopspoging gooi ik de hele source weg en doe een nieuwe checkout van de voorvoorlaatste revisie om met een frisse lei te kunnen beginnen. Subversion, redder in nood. Met mijn nieuw verworven kennis probeer ik zo goed en zo kwaad als het gaat de persistentie en de backend in een enkel maven-project te schuiven. En warempel, het lijkt nog te lukken ook! Jan-Willem, Rikkert, dank voor jullie uitleg! Zelfs het builden van het project lijkt zonder fouten te slagen, en ik kan de zaak committen. We hebben nu, eindelijk eindelijk, een project met zowel backend- als persistentie-code. Morgen maar eens proberen om de twee componentjes ook met elkaar te laten communiceren.

En daarmee wordt het half zes, en alles is (tegen alle verwachting in) wel.


Werken met ?
Kijk dan bij onze mogelijkheden voor starters en/of ervaren IT'ers.


Categorieën: Development