giovedì 27 settembre 2007

Yeah, baby, yeah!


Ieri sera ci sono riuscito. Ho fatto funzionare il mio primo progetto Wicket.
Sembra quasi una esclamazione da principiante, ma non è davvero facile partire con questo aggeggio. Inoltre mi sono intestardito a lavorare da subito con la 1.3.0 beta3, che ha alcune modifiche radicali:
  • Il gestore di tutto non è più una servlet ma è un filtro. Rimane comunque la retrocompatibilità
  • Le Commons Logging vengono sostituite da un nuovo gestore di logger, SLF4J
Un ottimo aiuto è stato il post di Jess Sightler, praticamente nei miei stessi guai.

Ad un certo punto mi sono ritrovato anch'io con l'errore di Tomcat:

26-set-2007 18.13.22 org.apache.catalina.core.StandardContext start
GRAVE: Context [/wickettest] startup failed due to previous errors
26-set-2007 18.18.32 org.apache.catalina.startup.HostConfig checkResources
INFO: Undeploying context [/wickettest]

Stesso problema suo...
Dal suo post, ho dedotto che il problema riguarda una qualche libreria mancante. Dopo qualche tentativo ho capito che mi mancavano le librerie base di SLF4J, le ho aggiunte al mio project.xml e...

INFO: Deploying web application archive wickettest.war log4j:WARN No appenders could be found for logger (org.apache.wicket.protocol.http.pagestore.FileChannelPool). log4j:WARN Please initialize the log4j system properly. ******************************************************************** *** WARNING: Wicket is running in DEVELOPMENT mode. *** *** ^^^^^^^^^^^ *** *** Do NOT deploy to your live server(s) without changing this. *** *** See Application#getConfigurationType() for more information. *** ********************************************************************

Mai Warning fu più benvenuto. :-)
In realtà il sistema gira correttamente e l'avviso riguarda la modalità di esecuzione di Wicket. In Development mode, Wicket intercetta le modifiche alle pagine in maniera dinamica, a scapito delle performance.

Nei commenti del post, alcuni membri della comunità Wicket sono intervenuti, in verità un pò aggressivi, fornendo comunque un buon riferimento per una configurazione iniziale della 1.3.

Adesso ho quindi una base iniziale per proseguire lo studio di questo giocattolo, che gestisco con Maven 1.
Per chi fosse interessato, qui c'è uno zip con il progetto. Tenete presente che con maven eclipse vengono generati il .classpath e il .project per l'importazione dentro Eclipse, e con maven war viene generato il WAR da portare su Tomcat. Il progetto è molto embrionale, sia chiaro.

martedì 25 settembre 2007

Wicket mumbling

Da qualche giorno sto studiando Wicket, perchè mi farebbe comodo (e forse mi servirà a tutti gli effetti) un web framework a componenti (o component oriented).

Component oriented significa in soldoni che la pagina si ottiene aggregando blocchi ottenuti lato server attraverso il framework stesso. Un pò come si realizza un software con Delphi o Visual Basic, solo che su Internet è tutto più difficile :-)
Un approccio del genere è utile quando la pagina web è dinamica anche nella struttura e/o i suoi componenti hanno una complessità per cui è utile impacchettarli e rituilizzarli dove servono.

L'ho preferito a Click e ThinWire, perchè Click mi è sembrato portatore sano di cattive pratiche: in teoria si potrebbero scrivere pagine JSP, con blocchi Velocity e classi Java a miscelare il tutto. Sodoma e Gomorra... :-D
ThinWire mi sembra invece orientato ad applicazioni web definitivamente client, basta vedere le demo sul sito...

Wicket impone una scelta radicale. Mai più logica sulla pagina web, un banale foreach, un <%=%> sbarazzino, nulla...
Su questo possiamo essere tutti d'accordo senza troppa fatica, separazione di logica da presentazione pura e dura. Mi proccupa di più invece che ogni singolo intervento di manutenzione richieda la disponibilità di un ambiente Java, compilatore incluso.
Potrebbe anche essere positivo, uno stimolo a curare ogni rilascio nei minimi dettagli, e forse alla lunga questo approccio purista darà i suoi frutti anche in termini di organizzazione del lavoro.

Però, cari amici di Wicket, una mano datela anche voi :-)
Su sito non c'è un articolo introduttivo, la documentazione è un wiki molto poco strutturato e non rimane che cercare articoli in giro o scaricare gli esempi(*).

L'impostazione di default è quantomeno curiosa: la pagina HTML dovrebbe stare nello stesso package della classe che la mappa sul lato server.
Cioè se io realizzo una Login.html, dovrei salvarla nel package com.acme.businessenterpriseapplication assieme alla corrispondente Login.java.

E' vero che questo comportamento è configurabile ma, a parte il fatto che la configurazione cambia con la versione di Wicket, perchè non permettere di default (magari con un parametro nella servlet) di scegliere la posizione in cui tenere le pagine?

Non che stia bocciando Wicket, tutt'altro. Leggendo in giro viene fuori una notevole robustezza delle idee che ci stanno dietro, ma perchè non fornire un bel paragrafo Introduction in cui mettere da subito un codice minimale funzionante?

Sembra quasi un test d'ingresso... :-D

(*) Mi sono espresso male, non che manchino le informazioni. Io però non ho trovato il classico articolo di startup che spieghi, magari superficialmente, come mettere in piedi la prima semplice applicazione. C'è qualcosa, ma legato a Maven 2, ma io uso Maven 1 e poi non è obbligatorio usare Maven con Wicket.
Può darsi che abbia cercato male io, ma anche questo è indice di non perfetta organizzazione del sito. Io mi aspetto (e in genere è così) che nei primissimi link della homepage ci sia quello al classico articolo di Hello World.

mercoledì 5 settembre 2007

Umorismo involontario a RGS

Stamattina a Radio Giornale di Sicilia: "Incursione di hacker cinesi nei sistemi inglesi. Il ministero della Difesa non si pronuncia. Il giallo si infittisce."