PiumaLab

Idee, esperimenti, tentativi e molto altro

Jboss as 7 disegnato per essere flessibile

Jboss-AS7 La prima versione di Jboss 7 fu rilasciata nel novembre 2010, già da allora è possibile apprezzare il lavoro del team di RedHat e della comunità che ha lavorato alla realizzazione dell'Application Server.

La versione 7 segna un punto di svolta rispetto alle versioni precedenti, esso infatti ha subito un processo di restyling completo, distaccandosi molto dalle versioni precedenti come se fosse a tutti gli effetti un prodotto nuovo , che tuttavia può contare sulla grande esperienza accumulata negli anni dal gruppo di sviluppo.

Di seguito vengono riportate alcuni punti di forza del nuovo Jboss che forniscono notevoli vantaggi rispetto agli altri AS.

+ Velocità

All'avvio di AS7 i servizi sono lanciati in maniera concorrente. Questo elimina inutili attese e sfrutta maggiormente i processori con architetture multi-core. I servizi non indispensabili rimangono inattivi fino a quando non vengono effettivamente utilizzati. Queste modifiche hanno permesso di ridurre i tempi di avvio di ben 10 volte rispetto alle versioni precedenti.

+ Modularità

Il tempo del caricamento delle classi in modo gerarchico, e con lui il comportamento non convenzionale che ha provocato è stato surclassato; infatti AS7 vanta di un metodo di caricamento delle classi in grado di garantire l'isolamento dell'applicazione dalle classi del server. I moduli sono formati da un insieme di classi che restano isolate dagli altri moduli a meno che non si definisce espressamente la dipendenza da un altro modulo. Saranno caricati solo i moduli necessari e in maniera concorrente.

+ Leggerezza

AS7 ha migliorato la gestione della memoria con il Garbage Collector per ridurre al minimo le pause caricando solo i file JAR di cui ha realmente bisogno e indicizzando tutti i meta-dati. Tutto questo consente di ridurre l'occupazione della memoria con la diretta conseguenza di poter girare su dispositivi con meno risorse, inoltre lascia più spazio a disposizione delle applicazioni e supporta una maggiore scalabilità. I profili personalizzabili del server consentono di escludere le funzionalità non necessarie e rendere il server quanto più snello possibile.

+ Amministrazione

La configurazione di AS7 è centralizzata, semplice e orientata all'utente. Il file di configurazione si basa su un modello molto essenziale, completo ed elegante. A differenza delle versioni precedenti è stata unificata la configurazione su un solo file XML, non dovremo più andare alla ricerca dei file di configurazione per modificare un parametro. Quest'unificazione ha permesso anche la nascita di nuovi strumenti di amministrazione come la console, sia web che a linea di comando, e le api java e http. Con questi nuovi strumenti è inoltre possibile modificare la configurazione in run time, molto utile in ambienti di produzione.

+ Portabilità

Il team di Jboss è da sempre impegnato sulla portabilità delle applicazioni, ecco perché hanno reso AS7 certificata Java EE 6 web profile. Quest'attenzione consente di far girare applicazioni in AS7, purché rispecchino le linee guida Java EE.

+ Robustezza

AS7 è stato disegnato per facilitare il debugging delle applicazioni, tutto questo è dovuto alla scelta di utilizzare Arquillian che mette a disposizione un modello per i test di integrazione eseguiti all'interno dell'ambiente runtime reale. Viene fornita agli sviluppatori la possibilità di scrivere test per tutta la casistica che l'applicazione può incontrare durante il suo uso.

+ Scalabilità

Jboss AS7 può essere avviato in due modalità differenti, standalone e dominio. La prima gestisce una sola istanza mentre la seconda consente di gestire una tipologia multi server.

Struttura

Capire la struttura delle directory dell'AS7 ci permette di trovare con facilità i file di configurazione, i file di log, i deploy delle applicazioni utente. Per familiarizzare con la struttura vedremo in dettaglio le le directory più importanti.
.
|-- bin
| |-- domain.conf
| |-- domain.sh
| |-- jboss-admin.sh
| |-- scripts
| |-- standalone.conf
| `-- standalone.sh
|-- bundles
|-- docs
| |-- licenses
| `-- schema
|-- domain
| |-- configuration
| |-- content
| |-- lib
| | `-- ext
| |-- log
| `-- servers
|-- modules
|-- standalone
| |-- configuration
| |-- data
| |-- deployments
| |-- lib
| | `-- ext
| |-- log
| `-- tmp
`-- welcome-content

bin: Script per avviare e fermare il server e script di configurazione per settare le variabili d'ambiente e le impostazioni della java virtual machine.
bundles: Posto per i bundles OSGi.
docs/schema: Definizioni in xsd dei file XML usati da jboss.
modules: I moduli usati dal server sono in questa directory. (AS 7 è basato su una architettura modulare per il caricamento delle classi).
welcome-content: Pagina di default di benvenuto.

standalone: File di configurazione, deploy, e aree scrivibili usate dal server quando avviato nella modalità standalone.
standalone/configuration: File di configurazione per il server standalone. Questo è il solo posto dove ci sono tutte le informazioni di configurazione per il server standalone.
standalone/data: Informazioni persistenti memorizzate dal server.
standalone/deployments: I deploy degli utenti verranno rilevati e caricati automaticamente da questa directory anche a runtime.
NOTA: Le API per l'amministrazione del server sono la strada consigliata per installare i contenuti dei deploy. La capacita di scansione del file system per i deploy resta una funzionalità consigliata per lo sviluppo.
standalone/lib/ext: Luogo per l'installazione di jars per le applicazioni utilizzando il meccanismo dell'Extension-list.
standalone/log: File di log per il server standalone.
standalone/tmp: Directory per i file temporanei scritti dal server.

domain: File di configurazione, deploy, e aree scrivibili usate dal server quando avviato nella modalità domain.
domain/configuration: File di configurazione per il server domain. Questo è il solo posto dove ci sono tutte le informazioni di configurazione per il server domain.
domain/content: Area interna di lavoro per l'Host Controller. Questo è il posto dove vengono memorizzati internamente i contenuti dei deploy; questo non significa che le informazioni possono essere manipolate dagli utenti e sviluppatori. Da notare che la modalità dominio non prevede i deploy automatici basati sulla scansione del file system.
domain/lib/ext: Luogo per l'installazione di jars per le applicazioni utilizzando il meccanismo dell'Extension-list.
domain/log: Directory dove il processo Host Controller scrive i log. Il Process Controller, un piccolo processo che genera gli altri processi Host Controller, ed ogni processo Application Server che a sua volta utilizza questo path.
domain/servers: Area scrivibile da ogni istanza di Application Server. Ogni istanza, ha la sua sotto directory creata al primo avvio del server. In ogni sotto directory, per ogni istanza troviamo: data, log e tmp che hanno la stessa funzione delle omonime utilizzate dal server standalone.

Creazione di un modulo

Uno dei punti di forza di AS7 è la gestione del caricamento delle classi; questa funzionalità è cambiata radicalmente rispetto alle versioni precedenti di Jboss. In AS7 è basata sui moduli che hanno sostituito la più familiare organizzazione gerarchica delle classi. Le dipendenze dei moduli sono definite esplicitamente nella configurazione. I moduli hanno permesso all'application server di ridurre i tempi di startup sfruttando l'hiperthtreading dei moderni processori e la separazione delle classi del web server con quelle delle applicazioni.
Il nuovo Jboss è retro compatibile con i metodi di deploy di archivi jar e war. È Sufficiente mettere il file nell'apposita directory e l'application server lo carica in automatico come nella vecchia versione. In questo modo, però, non si sfruttano le potenzialità introdotte con l'uso dei moduli.
Ecco dei semplici passi per la configurazione di un Datasource MySql con la creazione di un nuovo modulo per il driver.

Installare il driver

Una volta definito il datasource, abbiamo due modi per installare il driver JDBC. Come si è già specificato precedentemente la creazione di un nuovo modulo è la strada più pulita e performante da seguire anche se leggermente più lunga. Si dovrànno aggiungere 2 file: module.xml e il jar della libreria nel path $JBOSS_HOME/modules/com/mysql/main
Il file module.xml definisce il modulo in cui è semplicemente indicato il nome, la risorsa utilizzata e le sue dipendenze. Sarà fatto in questo modo:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.17-bin.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

Il secondo metodo per installare il driver JDBC nell'application server è quello di effettuare il deploy del jar. Questa opzione è particolarmente utile quando l'application server gira in modalità domain. In questo scenario il deploy del jar verrà automaticamente propagato a tutti i server del dominio.

Definizione datasource

Il file di configurazione $JBOSS_HOME/standalone/configuration/standalone.xml per la versione standalone è nel formato XML. Il seguente esempio mostra la configurazione del datasource:

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
 <datasources>
  <datasource jndi-name="MySqlDS" pool-name="MySqlDS_Pool" enabled="true"
                       jta="true" use-java-context="true" use-ccm="true">
   <connection-url>jdbc:mysql://localhost:3306/database</connection-url>
   <driver>mysql</driver>
   <pool>
    <min-pool-size>5</min-pool-size>
    <max-pool-size>10</max-pool-size>
   </pool>
   <security>
    <user-name>jboss</user-name>
    <password>jboss</password>
   </security>
  </datasource>
 
  <drivers>
   <driver name="mysql" module="com.mysql"/>
  </drivers>
 
 </datasources>
</subsystem>

La struttura dell'XML è definita nella specifica $JBOSS_HOME/docs/schema/jboss-as-datasources_1_0.xsd. Possiamo editare manualmente il file oppure utilizzare gli strumenti per l'amministrazione che mette a disposizione AS7, come la console web, raggiungibile all'indirizzo http://localhost:9990/console
Se tutto è andato a buon fine allo start di AS7 vediamo il caricamento del modulo:
JBoss Bootstrap Environment

JBOSS_HOME: /opt/jboss-as-web-7.0.1.Final

JAVA: /opt/java/bin/java

JAVA_OPTS: -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman

=========================================================================

19:09:28,300 INFO [org.jboss.modules] JBoss Modules version 1.0.1.GA
19:09:29,711 INFO [org.jboss.msc] JBoss MSC version 1.0.0.GA
19:09:29,917 INFO [org.jboss.as] JBoss AS 7.0.1.Final "Zap" starting
19:09:33,048 INFO [org.jboss.as.domain-management] Starting 'TestRealm' Security Realm Service
19:09:33,378 INFO [org.jboss.as] creating http management service using network interface (management) port (9990)
19:09:33,381 WARN [org.jboss.as] No security realm defined for http management service, all access will be unrestricted.
19:09:33,442 INFO [org.jboss.as.logging] Removing bootstrap log handlers
19:09:33,602 INFO [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying JDBC-compliant driver class org.h2.Driver (version 1.2)
19:09:33,751 INFO [org.jboss.as.connector.subsystems.datasources] (Controller Boot Thread) Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1)
19:09:33,836 INFO [org.jboss.as.clustering.infinispan.subsystem] (Controller Boot Thread) Activating Infinispan subsystem.
19:09:34,200 INFO [org.jboss.as.naming] (Controller Boot Thread) Activating Naming Subsystem
19:09:34,255 INFO [org.jboss.as.naming] (MSC service thread 1-1) Starting Naming Service
19:09:34,275 INFO [org.jboss.as.osgi] (Controller Boot Thread) Activating OSGi Subsystem
19:09:34,359 INFO [org.jboss.as.security] (Controller Boot Thread) Activating Security Subsystem
19:09:34,377 INFO [org.jboss.remoting] (MSC service thread 1-2) JBoss Remoting version 3.2.0.Beta2
19:09:34,492 INFO [org.xnio] (MSC service thread 1-2) XNIO Version 3.0.0.Beta3
19:09:34,578 INFO [org.xnio.nio] (MSC service thread 1-2) XNIO NIO Implementation Version 3.0.0.Beta3
19:09:35,291 INFO [org.apache.catalina.core.AprLifecycleListener] (MSC service thread 1-2) The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /opt/jdk1.6.0_18/jre/lib/amd64/server:/opt/jdk1.6.0_18/jre/lib/amd64:/opt/jdk1.6.0_18/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
19:09:35,385 INFO [org.jboss.as.ee] (Controller Boot Thread) Activating EE subsystem
19:09:35,442 INFO [org.jboss.as.remoting] (MSC service thread 1-2) Listening on /127.0.0.1:9999
19:09:35,693 INFO [org.jboss.as.jmx.JMXConnectorService] (MSC service thread 1-1) Starting remote JMX connector
19:09:35,756 INFO [org.apache.coyote.http11.Http11Protocol] (MSC service thread 1-2) Starting Coyote HTTP/1.1 on http--127.0.0.1-8080
19:09:36,619 INFO [org.jboss.as.connector] (MSC service thread 1-1) Starting JCA Subsystem (JBoss IronJacamar 1.0.3.Final)
19:09:36,946 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) Bound data source [java:jboss/datasources/MySqlDS]
19:09:38,014 INFO [org.jboss.as] (MSC service thread 1-2) JBoss AS 7.0.1.Final "Zap" started in 11360ms - Started 147 of 208 services (61 services are passive or on-demand)

Leave a Reply

Your email address will not be published. Required fields are marked *