Feeds:
Articoli
Commenti

Archive for the ‘GlassFish’ Category

Per cluster di application servers si intende una serie di istanze del server su cui girano le stesse risorse (le stesse Java web applications). Generalmente istanze diverse girano su Java Virtual Machine differenti e su macchine fisiche separate (sebbene appattenenti alla stessa sottorete) e questo introduce tutta una serie di problematiche peculiari al clustering. Il motivo per cui si ricorre a questa architettura è che in applicazioni di un certo peso la disponibilità del servizio (e le sue prestazioni) devono essere per quanto possibile garantite. In maniera molto semplice (e anche non del tutto precisa), un cluster di tre istanze è sempre in grado di svolgere il suo lavoro (garantire la disponibilità del sito all’utente finale) anche se una o due istanze dovessero incepparsi o crashare. Non solo, se mi accorgo che il sito e molto trafficato, posso sempre aggiungere un’istanza al cluster per ripartire il lavoro (scalabilità). Tutto questo inoltre avviene in maniera trasparente per l’utente finale che, anche se loggato ad un sito, non perderà la sessione, né si accorgerà di nessun cambiamento qualora alcune istanze del cluster dovessero avere dei problemi perché quelle rimaneni si faranno carico del lavoro.

Proseguendo il precedente post, vediamo come installare un architettura cluster su più server Linux fisicamente distinti. Suppongo si siano eseguite le istruzioni per installare Glassfish su un singolo server con supporto cluster abilitato come spiegato nel precedente articolo.

Se avete seguito le istruzioni, l’installazione di Glassfish che ne risulterà, sarà il nostro DAS (Domain Administration Server) vale a dire il nodo centrale di amministrazione delle varie istanze che comporranno il cluster.

È possibile installare una o più istanze all’interno di uno stesso cluster e residenti sulla stessa macchina fisica semplicemente leggendo la documentazione ufficiale e con qualche semplice e intuitiva operazione dalla interfaccia web di amministrazione. Caso più interessante è invece l’installazione di istanze su macchine fisiche separate. Partiamo col dire che le macchine devono appartenere alla stessa sottorete e nessun firewall deve impedire la comunicazione tra le varie istanze del cluster ospitate. Detto questo pensiamo di avere due macchine diciamo:

test1.acme.com

e

test2.acme.com

e supponiamo anche di aver già installato Glassfish con supporto cluster su test1.acme.com così come descritto nel precedente post. Logghiamoci a test1.acme.com con l’utente glassfish e avviamo il server:

asadmin start-domain domain1

Avviato il server, la console di amministrazione sarà disponibile all’indirizzo:

http://test1.acme.com:4848

ora dobbiamo creare un node agent per test1.acme.com

asadmin create-node-agent --host localhost --port 4848 <node-name>>

dove “nodename” è il nome da noi scelto per il nodo (per esempio test1-node). Senza scendere nei dettagli, dobbiamo avere un agent node su ogni singola macchian fisica che entrerà a far parte del cluster. Dalla console di amministrazione possiamo proseguire creando un nuovo cluster e una nuova istanza che assegneremo al cluster (e che avrà come node agent il nodo appena creato e per ora l’unico disponibile). Ora avviamo il node-agent appena creato:

asadmin start-node-agent --syncinstances=true <node-name>

Ora ci dobbiamo loggare sulla seconda macchina che ospiterà una o più istanze del nostro cluster: test2.acme.com. Su questo server dobbiamo installare Glassfish per cui rimando al post precedente alle sezioni “installare il JDK” e “installare ANT”. In questo caso però non abbiamo bisogno di un’installazione completa che creerebbe un secondo DAS ridondante, per cui invece di eseguire il comando

lib/ant/bin/ant -f setup-cluster.xml

useremo questo di seguito:

lib/ant/bin/ant -f setup-cluster.xml create-node-agent --nodeagent <node-agent-name> -Ddas.host="test1.acme.com"

Dove “host” è l’host su cui è installato il DAS (nel nostro caso test1.acme.com) e <node-agent-name> è il nome del nuovo nodo che stiamo per creare (per esempio test2-node). Ci deve essere un node agent per ogni macchina fisica distinta destinata ad ospitare istanze del cluster e ovviamente il nome del nodo deve essere unico entro un cluster.
Avviamo il nuovo node agent creato su test2:

asadmin start-node-agent --syncinstances=true <node-agent-name>

Logghiamoci alla admin console (o facciamo un refresh se siamo già loggati) e nella sezione dedicata ai nodi dovremmo poter essere in grado di vedere il nuovo nodo appena creato su test2.acme.com. Sempre attraverso l’interfaccia web di amministrazione possiamo creare nuove istanze appartenenti al cluster e assegnarle il nodo su test2. Questo vuol dire che l’istanza verrà creata e girerà su test2.acme.com.
Le istanze del cluster girano su porte particolari. Se, per esempio, creiamo due istanze su test2.acme.com e una su test1.acme.com avremo le varie istanze del server in ascolto su queste porte:

A questo punto di solito si prosegue creando un load balancer e integrando Glassfish con un web server tipo Apache. Avremo quindi un unico URL con cui invocare la nostra applicazione java e dietro le quinte il load balancer deciderà concretamente (e in maniera trasparente per l’utente) a quale istanza del cluster indirizzare la richiesta.

Un ultima nota dedicata più agli sviluppatori Java. Le librerie (file .jar) che dovrebbero essere condivise tra le farie applicazioni java deployate su uno stesso cluster (per esempio un driver jdbc per un database) dovrebbero essere piazzate qui:

<glassfish-home>/domains/domain1/config/<cluster-name>-config/lib

La documentazione completa sul clustering su Glassfish (e argomenti correlati) è disponibile qui:


http://glassfish.dev.java.net/nonav/javaee5/docs/SJSASEEHAAG.pdf

Read Full Post »

Glassfish e un application server che stà riscuotendo una crescente popolarità ed è giunto ad una fase di maturità tale da farne un ottimo candidato per applicazioni professionali in campo aziendale. Glassfish è free ed open source ed è sfornato dalla Sun (casa madre di Java). La versione 2 è un container pienamente conforme alle specifiche JEE 5, questo significa in altre parole che potete deployare EJB (anche la versione 3.0), JMS, ecc. e lo distingue da servlet container come Tomcat o Jetty. Un servlet container, anche conforme alle specifice Java, come suggerisce il nome, può essere di default solo utilizzato per deployare Servlet, JSP, ecc. ma non EJB appunto perché Tomcat non è e non è pensato per essere, un EJB container. Come corollario, mentre su Glassfish potete installare tutte le applicazioni Java che girano su Tomcat, non vale il viceversa: applicazioni Java che fanno uso di tecnologie quali EJB o JMS non possono essere deployate su Tomcat. Glassfish appartiene in sostanza alla stessa famiglia di JBoss e Geronimo (progetto Apache), con cui condivide la caratteristica di essere free e open source, ma anche, sul lato commerciale, di Weblogic (Bea) e WebSphere (IBM).
Ho installato Glassfish V2 sotto un server Linux RedHat e sul mio portatile su cui gira Ubuntu 7.10. La procedura è simile ma c’è qualche piccola differenza principalmente dovuta al fatto che mentre è normale disporre di un ambinete grafico su un sistema Linux per utente finale (caso di Ubuntu installato sul portatile) questo non è normalmente il caso su un server Linux su cui spesso ci si connette da remoto e si opera attraverso una shell.
In questa prima quida prenderò in considerazione l’installazione su un server Linux (nella fattispece RedHat) dove si possono presentare anche esigenze di clustering (argomento a mio avviso non del tutto chiaro nella documentazione ufficiale). L’installazione di Glassfish sul Ubuntu 7.10 sarà lasciata ad un prossimo post.

Per installare e configurare Glassfish V2 abbiamo bisogno di un JDK5 o un JDK6 presente sul server. Accertatevi di aver installato un JDK e non un semplice JRE (per la differenza vedi qui). Potete sempre verificare la versione di Java eventualmente già installata sul server con questo comando:

java –version

Ora creiamo un nuovo user (diciamo “glassfish”):

adduser glassfish

Se sul vostro server è già installato un JDK (e se combacia con una delle due versioni di cui abbiamo bisogno per Glassfish) allora potete saltare la prossima sezione.

Come installare il JDK

Fate il download del JDK (1.6) da qui (ovviamente per Linux):

http://java.sun.com/javase/downloads/index.jsp

o del JDK (1.5) da qui

http://java.sun.com/javase/downloads/index_jdk5.jsp

copiate il file scaricato (un .bin) in una directory di vostra scelta, diciamo

/opt

spostatevi nella directory

cd /opt

ed eseguite il file per installare il JDK

./jdk-1_5_0_14-linux-i586.bin

Ora dobbiamo settare la variabile d’ambiente JAVA_HOME e modificare la variabile d’ambiente PATH per includere gli eseguibili Java che abbiamo installato con il JDK. Se vogliamo rendere disponibili questi settaggi per tutti gli utenti del sistema dovremo editare il file

/etc/profile

Se invece vogliamo rendere disponibili questi nuovi settaggi solo per l’utente glassfish dovremmo solo editare il file:

/home/glassfish/.bash_profile

in entrambi i casi le linee extra che dobbiamo aggiungere al file sono le seguenti:

JAVA_HOME=/opt/jdk1.5.0_14
PATH=$JAVA_HOME/bin:$PATH
export PATH
export JAVA_HOME

Io consiglierei di modificare i settaggi per il singolo user glassfish che sembra essere un’approccio meno intrusivo e più prudente specie su un server su cui potrebbero girare altri applicativi di cui non siamo a conoscenza. Se decidete per queasta strategia loggatevi come glassfish e procedete con questo utente da ora in poi.

Installare ANT

ANT è un prerequisito per l’installazione di Glassfish. Lo script d’installazione controllera il filesystem alla ricerca del file:

/etc/ant.conf

Che nel vostro server sarà presente solo se ci dovesse essere una versione di ANT già installata. Il file in questione, se ci date una sbirciata dentro, non fa altro che settare la fariabile di ambiente ANT_HOME (per esempio qualcosa come ANT_HOME=/usr/share/ant) che Glassfish userà durante l’installazione. Tenete presente che Glassfish richiede una versione di ANT uguale o superiore alla 6.5. Se ANT non è già installato sul vostro sistema, potete scaricarlo da qua:

http://ant.apache.org/bindownload.cgi

Scompattate il file (per esempio in /opt) e la directory che otterrete sarà la vostra ANT_HOME. Non vi rimane che creare un file /etc/ant.conf che punti alla vostra ANT_HOME. Se un’installazione di ANT è già presente sul vostro sistema ma volete usare un’altra versione di ANT senza interferire con le applicazione già installate che potrebbero usare la versione installata, potete creare il vostro file ant.conf che punti alla vostra ANT_HOME e poi editare il file

/lib/ant/bin/ant

per farlo puntare al vostro ant.conf. Il file lib/ant/bin/ant non esiste ancora a questo punto perché dobbiamo ancora installare Glassfish, cosa che faremo nella prossima sezione. Il file ant.conf, in ogni caso, assomigliarà a qualcosa tipo:

# /etc/ant.conf
# Options for classic-ant
# ANT_HOME is the directory in which the jarfiles that are required by
# classic-ant are located.
ANT_HOME=/opt/ant

Installare Glassfish

Potete scaricare una copia di Glassfish (che si presente come un file .jar) da qua:

https://glassfish.dev.java.net/downloads/v2ur1-b09d.html

Una volta scaricato il file copiatelo nella directory

/opt

Spostatevi dentro questa directory:

cd /opt

ed eseguite il seguente comando:

java -Xmx256m -jar filename.jar

dove “filename” è il nome del file che avete scaricato (per esempio glassfish-installer-v2ur1-b09d-linux.jar). Spostatevi nella directory creata:

cd glassfish

e date i permessi di esecuzione agli script ANT inclusi in Glassfish:

chmod -R +x lib/ant/bin

Ora dobbiamo decidere se vogliamo installare un singolo server o un server con supporto per il clustering. Nel primo caso eseguiamo:

lib/ant/bin/ant -f setup.xml

nel secondo invece:

lib/ant/bin/ant -f setup-cluster.xml

Tenete presente che, se scegliete la prima via, è sempre possibile aggiungere il supporto cluster dalla console di amministrazione in modo semplice ed intuitivo. Spostatevi ora nella directory bin ed eseguite:

./asadmin start-domain domain1

Per far partire Glassfish mentre per arrestarlo potete usare:

./asadmin stop-domain domain1

Ora dovreste essere in grado di amministrare Glassfish da remoto attraverso una comoda ed elegante interfaccia web semplicemente collegandovi al seguente indirizzo:

http://host-name:4848

con username “admin” e password “adminadmin”. Trovate anche una nutrita documentazione (in inglese) sul sito a questo indirizzo:

https://glassfish.dev.java.net/javaee5/docs/DocsIndex.html

Read Full Post »