lunedì, luglio 28, 2008

Java networking properties: UrlConnection timeout

La stabilita' di un sistema non deve dipendere dalle performance dei servizi invocati.
E' buona norma tutelarsi affinche' un servizio, invocato in modo sincrono, che risponde lentamente, non blocchi per un tempo indefinito le nostre applicazioni.
Per mezzo delle api del package java.net e' possibile impostare in modo programmatico il timeout sull'apertura e sulla lettura da una socket, per mezzo dei metodi setConnectTimeout(int timeout) e setReadTimeout(int timeout) della classe java.net.URLConnection, dove timeout e' il numero di millisecondi dopo il quale, se l'operazione non si e' conclusa, verra' lanciata un'eccezione.
Quando non e' possibile intervenire sul codice, o quando si vuole intervenire a livello di jvm per alterarne il comportamento di default (non escludendo poi l'intervento programmatico), e' possibile specificare, nel caso la jvm utilizzata sia quella di Sun, le seguenti system properties:

sun.net.client.defaultConnectTimeout
sun.net.client.defaultReadTimeout

La documentazione e' ovviamente disponibile sul sito di Sun.

mercoledì, luglio 02, 2008

Ajax img slideshow

Questo plugin per mootools mi ha davvero colpito!
Da vedere assolutamente:

http://www.electricprism.com/aeron/slideshow/

mercoledì, giugno 25, 2008

javascript download

L'inclusione di file javascript per mezzo del tag 'script' all'interno del tag 'head' di una pagina html scatena da parte dei browser Firefox ed Internet Explorer una serie di download (tanti quanti sono i file da includere) di tipo sequenziale.
Infatti ogni download di un singolo file blocca il download successivo.
Questo, per pagine html che fanno uso di framework come JQuery e dei relativi plugin puo' essere un problema per le performance di un'applicazione 'Web 2.0'.
Qualche ottimo consiglio viene dato da Kristoffer Henriksson sul suo blog.

venerdì, marzo 21, 2008

UML sequence diagrams

Microsoft Visio?
No grazie.
Non sempre, come unix insegna, la strada piu' veloce e comoda passa per le GUI ed il mouse; spesso un lavoro ripetitivo lo si sbriga meglio pigiando un po' di lettere sulla tastiera.
Questo e' un generatore web di sequence diagrams, davvero spettacolare, che esprime molto bene il concetto sopra riportato: www.websequencediagrams.com.

mercoledì, marzo 12, 2008

Client side charts - part IV

Finalmente ho trovato la libreria (Flash) 'definitiva' per renderizzare grafici:

Open Flash Chart.

Ed e' anche opensource ;)

sabato, febbraio 23, 2008

Glassfish PreparedStatement Caching

Glassfish 2 delega al driver JDBC la cache del PreparedStatement.
Se quindi il database e' Oracle, e' possibile settare due property nella configurazione del relativo driver JDBC:

ImplicitCachingEnabled=true
MaxStatements=xxx

Maggiori informazioni a questo link.

sabato, febbraio 16, 2008

XML Web Utilities

Ho trovato un comodissimo tool online per creare un xml schema partendo da un file xml.

martedì, febbraio 05, 2008

Java Garbage Collector tuning

Scegliere l'algoritmo di garbage collection piu' adatto per la propria applicazione non e' sempre facile.
Devo dire che questi due link aiutano molto:

Memory Management
JVM Options

domenica, gennaio 20, 2008

Software Technical Event @ Grenoble

Deciso all'ultimo minuto, ma e' filato tutto liscio: sono riuscito a partecipare ai due giorni non riservati ai partner Sun dell'evento tenutosi a Grenoble dal 15 al 18 gennaio 2008, presso il primo centro di ricerca Sun europeo, nella "Silicon Valley d'oltralpe".
Le sessioni sono state decisamente interessanti, ed hanno riguardato diversi prodotti su cui Sun sta investendo, tra i quali:

GlassFish
Netbeans
OpenDS
OpenESB
OpenSSO
Solaris

Da notare come, per la sessione riguardante Netbeans, per dimostare le petenzialita' della piattaforma Netbeans, intesa come framework per applicazioni Java Swing (su cui Netbeans IDE e' costruito), sia stato preso ad esempio l'italianissimo BlueMarine.

Per chi volesse vedere in che paesaggio meraviglioso e' immerso il centro di ricerca Sun di Grenoble, ho scattato qualche foto :)

domenica, gennaio 13, 2008

Client side charts - parte III

Simile Project mette a disposizione della comunita' due ottimi widget Ajax:

Timeline, un grafico scrollabile per la visualizzazione di eventi basati sul tempo
Timeplot, un linechart per serie di dati ordinati temporalmente

Meglio guardare gli esempi disponibili online ;)
Entrambi i widget (client side) sono in grado di recuperare i dati da risorse HTTP (come puo' essere la GET di un file XML, per esempio).

martedì, dicembre 18, 2007

GlassFish e driver JDBC

Dove mettere i driver JDBC per le applicazioni che girano sotto GlassFish?

$GLASSFISH_HOME/domains/$DOMAIN/lib/ext/

sabato, dicembre 15, 2007

Windows Vista: deframmentazione

Si sa: Winzozz non e' un sistema operativo, e' un virus, che si replica e nel tempo abbatte le performance del tuo nuovo e fiammante pc.
Ai tempi, quando ancora usavo il mio fido Amiga 1200 (cresciuto nel tempo fino a diventare un 68030 + ppc603) si diceva che Amiga andava bene solo per giocare (l'ignoranza accompagna l'umanita da sempre).
Ora posso finalmente dire la stessa cosa: Windows e' solo un insieme di api e librerie per far girare i giochi... perche' quindi sradicarlo completamente dal mio nuovo Core 2 Duo?
E' semplicemente, parafrasando Trip Hawkins, una tassa da pagare per videogiocare.
Quindi, meglio metterlo in quarantena, chiuderlo in una partizione ad hoc, dove non potra' piu' nuocere a nessuno, e lasciare il rimanente spazio dell'hard disk a chi, in questi ultimi anni, se l'e' guadagnato: GNU/Linux Ubuntu.
Per prima cosa, ho bisogno di una bella deframmentazione.
Ho provato ad usare il tool adatto allo scopo incluso in Windows Vista, ma, dopo ore passate davanti ad una barra di avanzamento, senza una minima indicazione di quanto tempo ancora fosse necessario per completare l'operazione, ho deciso di provare Auslogics Disk Defrag, un programma free, che nell'ordine dei minuti ha portato a casa il risultato.

giovedì, dicembre 13, 2007

Software Technical Event - Sun

Sun ha un centro di ricerca e sviluppo in Francia... sarebbe proprio da vedere, magari in occasione del seguente evento:
http://fr.sun.com/sunnews/events/2007/nov/grenoble/index.jsp

GlassFish e dintorni: slide/presentazioni

Sul wiki di GlassFish sono raccolte un buon numero di presentazioni, da tenere sempre in considerazione per un'infarinatura delle tecnologie che ruotano intorno all'application server di Sun.

venerdì, dicembre 07, 2007

Client side charts - parte II

Le possibilita' per creare qualcosa di accattivante senza ricorrere a Flash (e per me accattivante significa Google Chart API) ci sono tutte:

PlotKit
Plotr
Flot

Devo solo valutare quale sia la libreria' piu' matura che offra la roadmap piu' interessante...

giovedì, novembre 29, 2007

JSP: spazi bianchi e linee vuote

L'output dell'esecuzione di una pagina JSP e' spesso pieno di linee vuote e di spazi inutili... una vera rottura, soprattutto quando e' necessario produrre una pagina XHTML e la dichiarazione XML dev'essere per forza di cose la primissima riga!

Finalmente tutto cio', con JEE 5.0 e le JSP 2.1 e' stato risolto per mezzo di un semplice parametro di configurazione: trimDirectiveWhitespaces.

Per saperne di piu' basta leggere questo articolo.

Client side charts

Soltanto un link, per non perderlo di vista:

css + php + flash + ajax charts

mercoledì, ottobre 24, 2007

Glassfish 2.0: installazione

La roadmap di Glassfish e' decisamente interessante... Glassfish 3 starta in mezzo secondo!!!

E' ora di iniziare a prendere confidenza con questo promettente (e maturo) application server... installiamo la versione 2 su un bel dev redhat ;)

> mkdir glassfish
> cd glassfish
> java -jar glassfish-installer-v2-b58g.jar
> mv glassfish glassfish-2.0


mhmh e' preconfigurato per ascoltare di default sulle porte 8080 (http), 8181 (https), 4848 (web console), 3700 (corba), 7676 (jms)... ho gia' la 8080 occupata da resin, riassegno le porte a glassfish...

> vi setup.xml
> :1,$s/8080/7070/g
> :1,$s/8181/7171/g
> :1,$s/4848/7878/g
> :1,$s/3700/7700/g
> :1,$s/7676/7600/g
> :wq!


> chmod u+x lib/ant/bin/ant
> lib/ant/bin/ant -f setup.xml


ant mi comunica che e' andato tutto bene:

create.domain:
[exec] Using port 7878 for Admin.
[exec] Using port 7070 for HTTP Instance.
[exec] Using port 7600 for JMS.
[exec] Using port 7700 for IIOP.
[exec] Using port 7171 for HTTP_SSL.
[exec] Using default port 3820 for IIOP_SSL.
[exec] Using default port 3920 for IIOP_MUTUALAUTH.
[exec] Using default port 8686 for JMX_ADMIN.
[exec] Domain being created with profile:developer, as specified by variable AS_ADMIN_PROFILE in configuration file.
[exec] Security Store uses: JKS
[exec] Domain domain1 created.
[exec] Login information relevant to admin user name [admin] for this domain [domain1] stored at [/home/httpd/.asadminpass] successfully.
[exec] Make sure that this file remains protected. Information stored in this file will be used by asadmin commands to manage this domain.
[delete] Deleting: /store2/sw/as/glassfish/glassfish-2.0/passfile

BUILD SUCCESSFUL
Total time: 18 seconds



posso startare l'as:

> bin/asadmin start-domain domain1

che parte correttamente:

Starting Domain domain1, please wait.
Log redirected to /store2/sw/as/glassfish/glassfish-2.0/domains/domain1/logs/server.log.
Redirecting output to /store2/sw/as/glassfish/glassfish-2.0/domains/domain1/logs/server.log
Domain domain1 is ready to receive client requests. Additional services are being started in background.
Domain [domain1] is running [Sun Java System Application Server 9.1 (build b58g-fcs)] with its configuration and logs at: [/store2/sw/as/glassfish/glassfish-2.0/domains].
Admin Console is available at [http://localhost:7878].
Use the same port [7878] for "asadmin" commands.
User web applications are available at these URLs:
[http://localhost:7070 https://localhost:7171 ].
Following web-contexts are available:
[/web1 /__wstx-services ].
Standard JMX Clients (like JConsole) can connect to JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://XXXXXXXXXXXXXXXXX:8686/jmxrmi] for domain management purposes.
Domain listens on at least following ports for connections:
[7070 7171 7878 7700 3820 3920 8686 ].
Domain does not support application server clusters and other standalone instances.

martedì, maggio 22, 2007

Apache Resin request dispatch

Per fare in modo che il webserver Apache sappia quali richieste debba servire e quali invece debba passare a Resin, esistono due possibili configurazioni:

1) Resin, tramite il ResinConfigServer, comunica ad Apache quali risorse e' suo compito servire
2) Apache sa esattamente quali risorse deve servire Resin

Io preferisco di gran lunga la seconda :)

<Location "/webapp/jsp/">
CauchoHost localhost 6802
SetHandler caucho-request
</Location>