parancoe

parancoe

Parancoe: i controller

Posted by gtrev on Lun, 01/10/2007 - 22:47 in

Scrivo qui un breve tutorial su come definire un controller per Parancoe. A breve una versione in inglese sul sito del progetto (Lucio te lo prometto ;) )

Update 2007-10-02 12:55:00: If you want the English version of this tutorial follow this link

Definizione

Per definire un controller in Parancoe i passi da compiere sono due:

  1. scrivere la classe del controller
  2. definire in parancoe-servlet qual è il package nel quale il controller si trova.

Supponiamo di dover creare un controller che gestisca le chiamate alle url del tipo "/admin/*.html". Definiamo la classe AdminController in questo modo:

package org.parancoe.basicWebApp.controllers;

public abstract class AdminController extends BaseMultiActionController {
    ...
}

BaseMultiActionController è una classe di Parancoe che estende MultiActionController aggiungendo utilità per il logging e la gestione degli errori.

Una volta definito il controller, per agganciarlo al corretto url è sufficiente mettere l'annotazione @UrlMapping("mia_url") in questo modo:

package org.parancoe.basicWebApp.controllers;

@UrlMapping("/admin/*.html")
public abstract class AdminController extends BaseMultiActionController {
    ...
}

Autodiscovery

A questo punto è sufficiente inserire la seguente riga nel file parancoe-servlet.xml:

<define-controllers
basePackage="org.parancoe.basicWebApp.controllers"
parent="abstractController" />

Parancoe si occuperà di andare ad analizzare i controller definiti in basePackage e a caricarli nel contesto di Spring. Inoltre registrerà il mapping definito dall'annotazione.

Le annotazioni

Le annotazioni che si possono utilizzare per definire il mapping sono tre:

  1. @UrlMapping: riceve una stringa che contiene la definizione di un'url;
  2. @MultiUrlMapping: premette di definire più mapping per lo stesso controller
  3. @DefaultUrlMapping: questa annotazione non prevede alcun parametro e serve ad indicare a Parancoe di usare il metodo di default per la definizione del mapping.

Per quanto riguarda l'ultima annotazione, il metodo di default definisce il mapping a partire dal nome del controller: così AdminController mapperà su /admin/*.html, mentre MioFantasticoController su /mio/fantastico/*.html.

(e adesso forse è più chiaro a cosa servisse il metodo uncamelize che avevo descritto qualche tempo fa).

Alcune note finali

E' ancora possibile definire i propri controller all'interno del file parancoe-servlet.xml.

Si deve però avere l'accortezza di usare come id il nome completamente qualificato del controller, così da sovrascrivere la definizione costruita dall'autodiscovery.

Happy parancoing!

Accidenti, doppio triplo accidenti!

Posted by gtrev on Mar, 25/09/2007 - 16:26 in


Allora è un pezzo che non aggiorno il blog, ma abbiate pietà sono scavalcato dal lavoro da fare.

Poi ci si mettono anche i programmatori buontemponi ad intasarmi la posta come vedete nella figura.

Per fortuna gmail supporta i filtri e sono così riuscito a far tornare il tutto ad una situazione normale.

Per il resto la parancoizzazione(TM) del globo continua instancabile.

Segnalo jugevents sito che tiene traccia degli eventi che riguardano i Jug sparsi per il mondo, fatto con Parancoe.

Io sto lavorando all'autodiscovery dei controller e devo sbrigarmi a finire: sembra che dovrò sacrificare i sabato da qui a Natale all'altare della Contabilità, quindi il tempo libero degraderà esponenzialmente!

Spezzare una parola in CamelCase

Posted by gtrev on Ven, 14/09/2007 - 14:13 in

Il camelcase come ci ricorda wikipedia:

[...] è la pratica di scrivere parole composte o frasi unendo tutte le parole tra loro, ma lasciando le loro iniziali maiuscole. Il nome (letteralmente "carattere a cammello") deriva dai "salti" all'interno di una parola, che fanno venire in mente le gobbe di un cammello. [...]

Il camel case è molto usato dai programmatori Java perché è la convenzione ufficiale di Sun per la scrittura dei nomi di classe e di variabile.

Detto questo, può capitare di voler prendere una parola in camel case e separarla nelle sue componenti. Confesso di aver cercato un po' su internet ma di non aver trovato del codice già pronto, quindi ecco di seguito il metodo che mi sono
scritto.

L'idea è semplice:

prendo gli indici di dove sono le lettere maiuscole e spezzo le parole secondo questi indici.

Per fare questo mi viene in aiuto il pattern matching e precisamente il pattern che rappresenta le lettere maiuscole nel character set unicode, cioè \p{Lu}.

Il codice è qua di seguito:

List<Integer> idxList = new ArrayList<Integer>();      


//\p{Lu} is the unicode pattern for capital letters
Pattern p = Pattern.compile("\\p{Lu}");
Matcher m = p.matcher(camelString);


//find all occurrences of an uppercase letter and
//put their position in a list
while(m.find()){
     idxList.add(m.start());
}
       
           

Una volta ottenute le posizioni è sufficiente usare il metodo substring sulla stringa considerata, avendo cura di usare gli indici appena ricavati.

Allego al post la classe completa.

Parancoe: Url Mapping

Posted by gtrev on Lun, 27/08/2007 - 20:55 in

Nell'ultima settimana ho cercato di capire come funziona il meccanismo di url mapping di Spring, ovvero la parte dello stack MVC che permette di mappare una richiesta HTTP verso l'opportuno controller.

La cosa ovvia è che del tutto si occupi la servlet che fa da front controller (DispatcherServlet), visto che a questa arriva la HttpRequest, meno ovvio è il modo con cui la servlet opera.

Analizzando il codice di Spring (viva l'open source!) ho capito che la servlet demanda la repsonsabilità di determinare il corretto controller ad una opportuna istanza di HandlerMapping.

Vi risparmio la dimostrazione di questa asserzione, fidatevi.

Quello che è importante è che per gestire il corretto instradamento dela richiesta HTTP al controller basta registrare un opportuno oggetto di tipo HandlerMapping.

HandlerMapping è un'interfaccia che contiene un unico metodo, getHandler, che ritorna sia l'handler che gli interceptors registrati per la richiesta HTTP.

Quindi la retta via da seguire adesso è quella di realizzare un HandlerMapping per Parancoe!

Parancoe is moving

Posted by gtrev on Sab, 28/07/2007 - 13:20 in

Parancoe, the open source project promoted by Jug Padova is moving.

All the code base is now on googlecode.

So if want to check it out you have to point your svn client to:

svn checkout http://parancoe.googlecode.com/svn/trunk/ parancoe

The main reason for this migration is that we didn't feel very comfortable with java.net services. Let me explain.

Java.net is a great site and there are many important projects hosted there, but it's too many times down for maintenance.

In addition to this we didn't get a lot of feedback when we asked if we can add additional services like continuum integration.

The general feeling is that java.net is lacking improvements. We hope that the new course of Sun will speed up the development on this site.

In the mean time we will use googlecode.

We bought (better to say that Lucio bought) a domain so if you want more information on the project point your browser to parancoe.org.

Maybe in parancoe.org we can host a sort of planet, like planet.debian.org, which aggregates the blogs of the team members (when they write about parancoe of course ;) ).

I have to ask to seesaw team which is hosting the site. Maybe saying to Paolo that he is not able to do it... ;)

Sabato JugMeeting #35

Posted by gtrev on Mar, 15/05/2007 - 14:06 in

Sabato prossimo si terrà il trentacinquesimo JugMeeting.

Io e Mariano saremo i due relatori principali.

Mariano proporrà un intervento su Automatic Acceptance Testing with FIT / FitNesse:

Si stima che l’85% dei difetti del software siano dovuti al fatto che i requisiti sono spesso ambigui, incompleti, silenti e, a volte, inconsistenti e contraddittori. Le metodologie agili prevedono che i requisiti siano espressivi e precisi. Alcuni extreemers si spingono ancora oltre, sostenendo che solo i casi di test possono chiarire i requisiti. La metodologia FIT/FITNESSE può essere usata sia per automatizzare i test di accettazione sia per chiarire requisiti inconsistenti e ambigui.

Io invece esporrò il funzionamento della validazione dati all'interno di Parancoe:

Parancoe permette di concentrare all’interno del persistent object tutto il codice necessario alla validazione tramite opportune annotazioni. In più non è necessario scrivere alcuna configurazione. Durante la presentazione vedremo come funziona il meccanismo di validazione di Spring MVC per poi passare a quello usato in Parancoe. Infine faremo un breve accenno all’integrazione della validazione di Parancoe con DWR.

I programmatori che bazzicano per il blog sono invitati a partecipare, l'ingresso è libero!

Ci si trova alle 9:15 nell'aula De del Dipartimento di Ingegneria dell'Informazione dell'Universita di Padova, in via Gradenigo 6.

[Parancoe] Validazione tramite DWR

Posted by gtrev on Lun, 02/04/2007 - 22:52 in


Continuo la serie dei post che riguardano i miei cotributi allo sviluppo di Parancoe.

Come ho già ricordato, Parancoe è una libreria pensata per lo sviluppo di applicazioni web che permetta allo sviluppatore di concentrarsi sul codice e lasciar stare la configurazione.

Se volete partecipare, andate a visitare il sito.

Quello di cui mi sto occupando in questo periodo è l'integrazione nel meccanismo DWR (Direct web remoting) nel processo di validazione dei dati.

Syndicate content