Lug 15 2010

Gestione date con la libreria JodaTime

Tag: Generale, Tecnologia, javaGiampiero Granatella @ 20:33

Java è abbastanza carente nella manipolazione delle date, le sue classi java.util.Date, java.sql.Date e Calendar non facilitano il confronto e la manipolazione delle date. In parallelo a queste è comodo utilizzare la libreria open source JodaTime.

Cosa offre?

  • La possibilità di effettuare confronti fra date, senza dover gestire quanti giorni ha un mese, se l’anno è bisestile,…
  • La gestione dei periodi fra date
  • Aggiungere/sottrarre un periodo (un anno, un mese, un giorno) ad una data e fare calcoli fra date

Continue reading “Gestione date con la libreria JodaTime”


Mar 04 2010

jdk 1.5 e Snow Leopard

Tag: GeneraleGiampiero Granatella @ 21:08

Questo post nasce dal problema trovato e dai suggerimenti in rete di Nagaoka e Juggernaut.

Per gli sviluppatori Java Mac OS X è da sempre un ambiente ostico… Nel nuovo MAC che ho in ufficio dovevo utilizzare la jdk 1.5 per compialre un particolare programma, ma con dispiacere ho scoperto che la jdk 1.5 non c’è… Anche se la trovate nel programma per impostare java nel mac “Java Preferences” questa versione non è altro che un link simbolico all’ultima versione di java. Potete verificarlo andando sul filesystem nella directory dove sono salvate le jdk:

cd /System/Library/Frameworks/JavaVM.framework/Versions/

Se volete aggiungerla cancellate il link simbolico della versione 1.5 e 1.5.0 e copiate le pari directory da un vecchio Leopard (che aveva tale versione).

Se non aveste un Leopard a portata di mano potete scaricarlo dal sito della Apple (http://support.apple.com/kb/DL924), ma non installatelo. Scompattate il pacchetto con “unpkg” o “Pacifist”, prendete solo la directory che vi serve e copiatela brutalmente nella posizione corretta.

Alla fine create i link simbolici alla versione installata

ln -s 1.5 1.5.0

Per renderla la vostra versione di default cambiate l’ordine (trascinando i nomi delle versioni) nella “Java Preferences”.

Il problema è che appena ci sarà un aggiornamento della jdk da parte di apple vi verranno rotti questi link simbolici e dovrete rifarli (successo pochi giorni fa…).


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>


Pagina Successiva »