wk voetbalpool webapp: dag 5

 
08 april 2010

Nadat we gisteren de eerste messages het domein in hebben geschoten wordt het nu tijd om eens wat harder na te denken over de REST interface. Welke berichten willen we accepteren en hoe zien de bijbehorende REST-queries eruit? Daarbij is het nuttig om alvast een prototype website te bouwen die dus REST-calls accepteert en een standaard response geeft, zodat Anatoly vanuit GWT iets heeft om tegenaan te praten en te testen.

Verder is het nuttig om de debugger van Netbeans ook aan de praat te krijgen. Nu is het steeds: builden, autodeploy, en dan testen en kijken in de logs en de UI of er iets misgaat. Maar nu het project al ietsjes groter lijkt te worden zou het wel erg handig zijn om ook breakpoints te kunnen zetten en door de code te kunnen stappen, enzovoort. Al is het maar om beter te kunnen begrijpen wat Scala en Lift nou eigenlijk doen.

Vandaag zal ook een groot deel van de dag opgaan aan zijdelings geneuzel: er is een nieuwe deelnemer, Rikkert, die ingewerkt moet worden in Scala, Lift, en GWT, en bijv een kopie van de VM moet krijgen e.d. Verder moeten we zien te zorgen dat Anatoly’s front-end in hetzelfde svn-project terecht komt. Hier gaat Jan-Willem vandaag vooral mee bezig. Hij meldt bij de stand-up meeting dat hij in elk geval jetty al kan stoppen en starten vanuit Netbeans, nu het automatisch koppelen van de debugger nog…

Anatoly heeft gisteren overlegd met Simon welke componenten er allemaal in de webapplicatie moeten komen. Hij heeft voor de meeste al een skelet-panel in GWT klaar, en hij gaat vandaag bezig met het verder invullen ervan. Zelf ga ik tenslotte uitzoeken welke messages er allemaal in het domein zullen gaan komen, en welke daarvan ook naar buiten gaan. Hoe we dat naar REST/JSON/Comet gaan mappen laten we nog even in het midden, het gaat er eerst om om een API op te zetten.

Verder zou het nog een probleem kunnen worden om de GWT-pagina’s aan de Lift/Comet-componenten te koppelen. GWT genereert dynamisch JavaScript om de pagina’s mee op te bouwen, maar Lift doet met Comet hetzelfde. Hopelijk bijt dat elkaar niet, maar dat zal moeten blijken. Misschien kunnen we deze componentjes direct in GWT inbedden, als een soort ‘statisch’ element.

Ralf werkt vandaag thuis, en het blijkt dat tijdens onze stand-up meeting hij een mailtje heeft gestuurd met een eerste aanzet voor de API. Dat maakt mijn taak weer makkelijker, wat wel okee is omdat ik het grootste deel van de middag weg ben. Rick lijkt sowieso inmiddels buiten beeld, en Christa is al een aantal dagen ziek; hopelijk is ze snel beter. Dan komt ze niet op een al te grote achterstand; hoewel zij aan de andere kant als enige een iPhone heeft, zodat het haar taak lijkt te moeten worden om zich op de iPhone-applicatie te richten.

Omdat Ralf al een begin van een API heeft gemaakt veroorloof ik het me om eerst nog verder te werken aan dat Comet-componentje. Ik probeer de voorbeeld-code werkend te krijgen, en ik merk nu waarom Java’s ‘import static’-constructie niet zo’n goed idee is: er worden in de voorbeeld-code methoden aangeroepen zonder klasse of object waarop het wordt aangeroepen. De Scala-plugin is niet zo goed dat Netbeans je dat automatisch vertelt als je bijv. met je muis over de methodenaam hangt; en als je dan bijv. de Scaladocs wilt bekijken om te zien wat de verschillende argumenten doen, dan zoek je je te schompes omdat niet duidelijk is waar je moet beginnen met zoeken.

Als ik me ervan vergewist heb dat alles goed zou moeten zijn (en de compiler ook niet meer klaagt), is het resultaat nog steeds: een XML parse error in mijn browser. Wat doe ik toch fout? Het comet-componentje lijkt helemaal niets te doen. Als ik uiteindelijk eens de pagina source bekijk staat er een melding in de trant van: <!--FIXME - comet type: Full(CometLabel) name: Empty Not Found-->. FIXME?! Zit er dan misschien een stuk code in deze versie van Lift die nog niet helemaal is aangepast aan zijn eigen nieuwe API? Maar nee, een hoop gepuzzel verder blijkt het ook hier weer om een niet-gedocumenteerde conventie te gaan: Comet-componenten worden in package x.y.z.comet ipv x.y.z.snippet gezocht, als je package x.y.z registreert.

Maar als je dat eenmaal weet is de rest makkelijk. Niet veel later heb ik een Mijlpaal bereikt: een webpagina met een tekstinvoerveld en een knopje, en als je die indrukt verschijnt de tekst uit dat invoerveld ook in een labeltje eronder. Woehoe! Wat ben ik goed! Dit is duidelijk Hello World voor gevorderden! De echte schoonheid van het geheel zit er natuurlijk in dat het proof-of-concept werkt: de knop schiet een RegisterUserMessage asynchroon de messagebus in, waarna die ook weer asynchroon een UserRegisteredMessage naar alle actoren stuurt, waaronder de CometActor die achter dat labeltje zit, die die tekst dan weer in de browser plant.

Helaas blijft het wat mij betreft daarbij vandaag. Lunch, nog wat afrondend werk, een coachingsgesprek en dan moet ik ervandoor, maar niet voordat ik te horen krijg dat ik misschien per bijna direct een externe opdracht moet gaan doen. Hopelijk gaat dat niet door, want hoe frustrerend soms ook, dit project is veel te leuk!

En daarmee werd het half zes, en alles was wel.


Werken met ?
Kijk dan bij onze mogelijkheden voor zowel starters als ervaren engineers.


Categorieën: Development


Reactie

  • “Rick lijkt sowieso inmiddels buiten beeld” – ho ho! Je bent even een paar dagen geld aan het verdienen voor Sogyo en je wordt meteen afgeschreven.. ;)

    Normaal gesproken ben ik er twee dagen per week, maar tweede paasdag snoepte er daar nog 1 vanaf. En via mail (of blog!) ben ik de andere dagen ook wel bereikbaar.

    Geplaatst op 09 april 2010 om 8:52 Permalink