Glassfish upgrade 3.1.2, qualche rogna di troppo

Recentemente mi è capitato di aggiornare un paio di server dalla 3.1.1 a 3.1.2, il passaggio però non è stato dei più fluidi, oltretutto trattandosi di una minor release.

Il primo problema arriva da updatetool. Durante lo scaricamento dei pacchetti ci troviamo un bel timeout quando si arriva all’upgrade di metro. Dopo qualche ricerca su google il problema sembra essere al default timeout dell’updatetool che è poco coerente con la dimensione di alcuni pacchetti, la soluzione è impostare una variabile d’ambiente prima di lanciare updatetool:

> export PKG_CLIENT_LOWSPEED_TIMEOUT=300
> ./updatetool

Secondo problema, l’avvio del dominio non va a buon fine. Infatti dal log si legge:

[#|2012-04-04T10:39:06.145+0200|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadI
D=10;_ThreadName=Thread-2;|Startup service failed to start : com.sun.enterprise.security.admin.cli.SecureAdminStartupChe
ck|#]

[#|2012-04-04T10:39:06.166+0200|INFO|glassfish3.1.2|javax.enterprise.system.tools.admin.com.sun.enterprise.v3.admin|_Thr
eadID=15;_ThreadName=Thread-2;|Server shutdown initiated|#]

La soluzione non è proprio delle più semplici, è necessario ricreare i certficati, io mi sono limitato a creare un nuovo dominio e brutalmente copiare i file *.jks dal nuovo dominio al vecchio:

> asadmin create-domain domain2
> cd domain2/config
> copy *.jks ../../domain1/config
> asadmin delete-domain domain2

Ora non ci resta che aggiornare il domain

> asadmin start-domain --upgrade

Finalmente parte tutto, purtroppo non si riesce più ad entrare nella console di amministrazione, ci restituisce un bel “Secure login is not enabled”. Di nuovo tocca mettere mano nel server con asadmin.

> asadmin --host [host] --port [port] enable-secure-admin
> asadmin stop-domain
> asadmin start-domain

Ovviamente [host] e [port] vanno rimpiazzati con valori opportuni, ad esempio indirizzo IP e porta 4848 nel mio caso, il restart è necessario per leggere le nuove impostazioni.

Tutto sommato un upgrade non proprio dei più lisci.

EJB Schedulati su Glassfish

A volte si rende necessario avere un EJB che lavori su schedulazione, ad esempio un qualcosa che pulisca una serie di tabelle temporanee, oppure una pulizia di alcune tabelle di logging, il cleanup di un filesystem e via dicendo.

Su Glassfish tutto ciò è facilissimo, senza ricorrere a cron o task schedulati su windows con eventuali wrapper java.

Come prima cosa si esegue il deploy dell’applicazione:
/opt/glassfishv3/glassfish/lib/install/applications/ejb-timer-service-app.war

Continue reading EJB Schedulati su Glassfish

Impostare Glassfish come servizio di sistema non privilegiato

Una volta installato Glassfish ci sono ancora due cose da fare:

  • impostare il server come servizio di sistema
  • creare un utente, senza privilegi amministrativi, per far girare server e applicativi

Come prima cosa creiamo un utente, con una sua home:
$> sudo useradd -s /bin/bash -d /home/glassfish -m -g glassfish glassfish

Con questo stesso utente procediamo all’installazione del server, nel mio caso è installato su /opt (una partizione che lascio separata), si apre una shell e, nell’ordine:
$> su glassfish
$> cd
$> wget $glassfish
$> cd /opt
$> unzip glassfish.zip

Continue reading Impostare Glassfish come servizio di sistema non privilegiato

Glassfish ed SMTP, come ricevere exception via email

Una delle cose più comode che si possano pensare per ricevere delle exception è riceverle direttamente via email, con tanto di Stack Trace e nome della classe (o bean) che l’ha generata.

A tal fine mi sono scritto un piccolo session bean che viene poi chiamato dall’exception handler in altri componenti delle mie applicazioni.

La prima cosa da fare è configurare una risorsa JavaMail su Glassfish:

Continue reading Glassfish ed SMTP, come ricevere exception via email

Mandare messaggi con JMS tra sistemi eterogenei

Di recente mi sono trovato nella necessità di “far parlare” dei sistemi Windows XP con una serie di MDB (Message Driven Bean) Java residenti su un application server Glassfish. Fortunatamente Glassfish include il bellissimo OpenMQ (Open Message Queue) che a sua volta porta in grembo UMS, ovvero Universal Message System.
UMS, tra le sue tante funzionalità, può agire come broker tra sistemi eterogenei, fornendo una conettività a sistemi JMS non raggiungibili normalmente da tecnologie quali C#, VB, .NET e via dicendo.
Certo sarebbe più facile installare una JRE nei client remoti e sviluppare direttamente un piccolo client che accodi su JMS ma non sempre è possibile, o addirittura permesso, installare una JRE, ragion per cui può capitare di doversi arrangiare. UMS arriva proprio a soddisfare questa necessità, utilizzando una semplice applicazione, residente nel web-container. Uno schema preciso si trova qui. Per l’installazione e configurazione del servizio consiglio la lettura di questa eccellente guida (in inglese).

Supponiamo di avere un banale MDB che sta in ascolto su una coda JMS, ogni volta che arriva un messaggio si scatena una precisa elaborazione. Come prima specificato, un programma in C#, VB o simili su una macchina Windows non avrà modo di accordare un messaggio JMS, esistono soluzioni “esotiche” come JMS Courier di Codemesh, alternativamente si possono realizzare strutture CORBA, ma nel caso di messaggi asincroni, JMS rimane la scelta vincente. Ebbene con UMS ogni client in grado i mandare una richiesta HTTP può accodare un messaggio su una coda JMS, siano essi dei semplici messaggi di testo o anche dei SOAP.

Continue reading Mandare messaggi con JMS tra sistemi eterogenei