Feb 07 2010

Un po’ di cose fatte

Tag: GeneraleGiampiero Granatella @ 20:00

Vi segnalo un po’ di cose fatte da me in giro…

  • Articolo su Open Office e java nel numero di DEV vol15 num 4
  • Presentazione al Jug di Genova sul webFramework elements all’interno di ManyDesigns Portofino
Ciao a tutti

Dic 10 2009

Isolare i tuoi test nascondendo l’ambiente con EasyMock

Tag: Generale, Modellazione, javaGiampiero Granatella @ 20:02

I test unitari sono problematici quando ti trovi in un ambiente dove il contesto è fondamentale per far funzionare il tuo programma. Prendiamo ad esempio una servlet che ha bisogno di un application server (come Tomcat) per poter girare, o una EJB, o un qualsiasi programma che gira all’interno di un framework.

Come isolare il tuo programma, nascondendo l’ambiente, per poterlo testare? La soluzione è usare degli oggetti Mock, ogetti fittizzi che nascondono e fanno da interfaccia verso il mondo esterno.

In questo esempio userò EasyMock per fare il testing di una servlet isolandola dall’application server.

Continue reading “Isolare i tuoi test nascondendo l’ambiente con EasyMock”


Dic 06 2009

Modifichiare request e response tramite i Filter

Tag: Web, javaGiampiero Granatella @ 09:30

I Filter nella programmazione web sono una importante feature introdotta dalle specifiche 2.3 delle Java Servlet. Attraverso i FIltri possiamo manipolare richiesta e risposta prima e dopo l’accesso ad una risorsa (jsp, servlet o statica). Questo offre un infinita serie di possibilità simili all’aggiunta di Aspects nell’AOP (Aspect Oriented Programming).

Ultimamente mi sono trovato nella necessità di parserizzare un XML tramite StAX in risposta a delle servelt e di dover modificare l’XML stesso. La cosa con XML è molto semplice, quale altro linguaggio permette così facilmente di essere parserizzato e di mutare la sua forma? Io non ho utilizzato xslt per cambiarlo, ma ho direttamente aggiunto nuovi eventi fra l’XML già composto.

L’articolo http://java.sun.com/products/servlet/Filters.html mi è stato utilissimo. In esso vengono spiegate tutte le caratteristiche dei filtri in Java e gli esempi coprono tutta la possibile panoramica di utilizzo. Di seguito riporto i punti salienti dell’articolo che ho utilizzato nel mio progetto.

Passo 1. Creazione del filtro

Creare un filtro è facilissimo, basta implementare l’interfaccia Filter e i suo metodi (che possono anche rimanere vuoti al di là del metodo doFilter).

public final class MyFilter implements Filter {
public void init(FilterConfig config){
}   
public void destroy() {
   
   }
   public void doFilter(ServletRequest request,
      ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
      //azioni pre passaggio alla risorsa

   chain.doFilter(request, response);
   //azioni post passaggio alla risorsa

   }
}

Il Filter è una vera e propria servlet. Avete accesso quindi e potete modificare tutto quanto è possibile modificare in una web application (Context, Session, Request e Response).

Passo 2. Creazione di un wrapper per salvare la response 

Per modificare la response, prendiamo il PrintWriter della response, creiamo una classe che implementa la risposta http e memorizza l’output offerta dalla risorsa chiamata (servelt, jsp) in un buffer e utilizziamo questo wrapper nel chain.do, scriviamo manualmente la risposta con il PrinWriter.

La classe wrapper sarà simile a quella mostrata nell’articolo della Sun (vedi sotto)

public class CharResponseWrapper extends
   HttpServletResponseWrapper {
   private CharArrayWriter output;
   public String toString() {
      return output.toString();
   }
   public CharResponseWrapper(HttpServletResponse response){
      super(response);
      output = new CharArrayWriter();
   }
   public PrintWriter getWriter(){
      return new PrintWriter(output);
   }
}

Mentre il nostro filtro viene modificato nel seguente modo

PrintWriter out = response.getWriter();
   CharResponseWrapper wrapper =
      new CharResponseWrapper(
         (HttpServletResponse)response);
   chain.doFilter(request, wrapper);
  out.write(…);

Come si vede abbiamo il wrapper in cui abbiamo la risposta originale e il PrintWriter su cui scrivere la nostra response (che andrà a modificare l’originale).

Create il vostro filtro a piacimento. l’ultimo passo è attivarlo nel web.xml

Passo 3. Attivazione del Filtro

Il filtro si attiva nel web.xml come una servlet, l’unica differenza è che sarà mappato su un url-pattern di risorse, che da quel momento subiranno le azioni del filtro o, in alternativa, può essere mappato sulle singole servlet. Con i seguenti pezzi tratti dal mio web.xml concludo questo mio post sui filtri.

<filter>
   <filter-name>My Filter</filter-name>
   <filter-class>MyFilter</filter-class>
   </filter>

<filter-mapping>
   <filter-name>Compression Filter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>


Ott 01 2009

Una utile classe per leggere e scrivere in Java

Tag: Tecnologia, javaGiampiero Granatella @ 20:30

Mi trovo spesso nella necessità di leggere file su filesystem in Java. Ho scoperto, ma c’è già dalla versione 1.5, la classe java.util.Scanner. Utilissima, quando si inizia ad usarla non se ne può fare a meno. Semplifica un insieme di operazioni comuni nella lettura di Stream.

Come dice il java doc è “Un semplice text scanner che può parsare tipi primitivi e stringhe utilizzando le espressioni regolari”.

Perché è utile:

  1. Per i costruttori che prendono InputStream, File o semplice Stringhe e le gestiscono tutte allo stesso modo
  2. Perché scompone in token, come lo StringTokenizer. Anche qui si può impostare il delimitatore del token, ma in più accetta espressioni regolari come delimitatori.
  3. Perché riesce a prelevare tipi primitivi direttamente dai token come ad esempio numeri formattati secondo il proprio “locale”.
  4. Per l’interessante funzione skip, che permette di ignorare token che corrispondono ad una particolare regular expression

Rimando al javadoc per degli esempi d’uso.


Ott 01 2009

E’ uscito Portofino 3.0 Beta 1

Tag: Modellazione, Tecnologia, Web, javaGiampiero Granatella @ 10:30

Segnalo l’uscita della nuova versione 3.0 di Portofino in beta. La novità principale è l’introduzione di Struts 2 nell’interfaccia e di un nuovo sistema di componenti (Elements).

Perché questo è così importante? Portofino era già un potente MDA, che permetteva di avere una completa applicazione Web a partire dalla definizione di un modello. Tramite Struts ed Elements è ora possibile personalizzare ancora di più la propria applicazione con operazioni/pagine custom e nuovi possibili percorsi di navigazione.

Per leggere tutte le novità clicca qui.Per provare la nuova versione di ManyDesigns Portofino scaricatelo da sourceforge


Pagina Successiva »