Java in un Espresso, Parte III: April

Nei precedenti articoli abbiamo visto come creare un applicazione Java agile, evitando il blasone delle specifiche J2EE. Dopo aver valutato (scartandola) una soluzione 2-tier molto simile a quelle fattibili in PHP, ci siamo focalizzati su una soluzione basata su Spring.

Come test, abbiamo sviluppato a Gioorgi.com una applicazione didattica che abbiamo chiamato “April”.

April si serve di Spring e AspectWerz per mettere in pista un semplice monitor di file, che gira all’interno di una webapp. Le performance del file monitor sono misurate tramite un bean chiamato PerformanceMonitor, che è istrumentato tramite Aspetc Oriented Programming.

Il risultato è che il sistema crea un numero di thread variabili a runtime, finché i tempi di risposta del FileMonitor non si avvicinano a quelli richiesti dalla configurazione di Spring.

Il Performance Monitor ha dei limiti sul numero di thread che può creare, per evitare di sovraccaricare il sistema.

Inoltre pochissimo codice (circa cinque classi su una trentina) hanno riferimeni a interfacce Spring (per lo più per supportare la creazione di oggetti che siano gestibili con l’AOP di Spring).

April è un buon esempio di una applicazione strutturalmente semplice, che fa una cosa abbastanza complicata. Non sarebbe stato facile sviluppare April in un linguaggio di scripting, né sarebbe stato facile ottenere le performance che ha, come vedremo.

Autowiring

April sfrutta l’autowiring in modo semplice, per istanziare (e monitorare) degli startup task.

Contrariamente alle servlet, i task non devono essere servlet: è sufficiente che implementino una maker interface chiamata StartupTask.

Nel file di configurazione di Spring, vengono dichiarati i task di startup, che Spring provvederà ad istanziare per conto nostro. Inoltre Spring “inietterà” tutte queste istanze in una particolare collezione tipizzata che si trova in una classe chiamata “Startup”.

Al boot, viene creata una sola istanza di Startup da parte di Spring, e questa classe si occupa di creare un thread per ogni istanza che implementa l’interfaccia StartupTask.

Potete scaricare April da questo link: [download id=”2″] … e restate in ascolto!

Performance

April è stato proavto sia sul jdk 1.5 che sul jdk 1.6. Come si sa, cambiando versione di JDK le performance migliorano in modo apprezzabile. In particolare il JDK 1.6 si è dimostrato molto più veloce nella gestione dei file (è quasi dieci volte più veloce nella scansione degli oggetti file). Rispetto al vecchio jdk 1.4, la concorrenza è gestita in modo molto più efficace, ed è stato possibile raggiungere livelli di parallelismo dei thread molto spinti, semplicemente con un uso accorto delle zone di sincronizzazazione

Java Espresso, parte II

A Gioorgi.com abbiamo una sezione di ricerca e sviluppo, dove abbiamo la necessità di provare diversi tipi di ambienti in situazioni live: prova e ti riprova, abbiamo consolidato una certa esperienza in soluzioni Java Enterprise a “consumo ridotto”.

In questa serie di articoli (di cui state leggendo la seconda puntata) vediamo come ottenere un’ambiente Java leggero, LAMP-like che gira in una manciata di Megabytes…

Continue reading “Java Espresso, parte II”

Java in un Espresso, Parte I

Introduzione

Quando Java nacque nel 1995, aveva parecchie frecce al suo arco, ma anche molta incertezza. Ricordo che in università fu accolto con favore dall’ambiente accademico, per le sue spiccate doti didattiche.

Java era più semplice da insegnare del C++, e aveva una libreria di base molto ben organizzata. Era già previsto l’uso della proto-annotazione “@deprecated” perché Sun sapeva che avrebbe dovuto far evolvere l’API, e questo evidenziava la cura e l’attenzione per l’organizzazione del lavoro del project management.
Ai tempi Sun puntava sulle Java Applet e sugli aspetti di sicurezza, in cui Java eccelleva. Benché la vocazione di Sun fosse enterprise, ancora le specifiche EJB erano al di là da venire.

L’osservazione dei miei colleghi più scafati, che usavano PHP e Perl er ache Java era troppo pesante (in termini di memoria consumata) e lento (essendo interpretato) per i piccoli microcomputer da 12Mb che affollavano le nostre case.

Nel 2009, quattordici anni dopo, le cose sono cambiate e ora anche i pc di casa hanno sistemi a due processori e 4GB di RAM. Java è ancora lento e pesante ?

Vediamo come sviluppare applicazioni leggere e compatte in Java…

Continue reading “Java in un Espresso, Parte I”

Software Trends1

The trends of this october are about some upcoming products.
A clear analisys of QuarkXPress failure si sketched in roughlydrafted site.
I do not think the same consideration can be applied to Vista.

As Joel said, M$ can throw away much money before only starting to see its market reduced.

This lead me to the (hoped?) big fear of M$ for open source.
It is a dream, baby.

Open Source in Italy has success because of high costs of developement library.
When I tried to look for a commercial application to delivery some web graphic stuff, the prices was crazy.
The Open Source solution needed us only to buy a book(!).
Open source deliver a sufficient quality at low mantenance costs.
A smart developer in a 3-people team can set it up and deliver a small project.

If really M$, Sun, IBM’d start fear open source, they can cut their prices of 70% and all the drama will end quickly.

But the truth is Linux is not evloving: it is growing in the SysAdmin area only, popping out old dinosaurs like Sun Servers, replaced by cheap PC.
Sun Servers needs custom monitor and mouse (!) and their price is high compared to equally fast high-end pc.

The server segment is so over-priced that even Apple has succesfully proposed its over-priced servers (this is very fun!).

In the last five years I have seen no new on operating systems, or strong standard evolution.
EJB specs seems quite dead, hibernate is old, and the only “new” ideas are RubyOnRails and… PHP5.

On programming languages python seems growing well.

By the way there is much hypo on Ruby, but its base class library is very small compared to python or perl.

Ruby community is very well organized and can eventually bring Ruby to success, but for the meantime I see more success on PHP if you need a rock solid road.

Finally I have started to work on Squeak Smalltalk Weekly News, and I suggest you to look at it sometimes.