Dopo aver affrontato, anche da un punto di vista teorico, alcuni aspetti inerenti l‘integrazione tecnologica e funzionale dei moduli Java EE sugli ambienti server, in questo secondo articolo affrontiamo la creazione di un server standalone. Si tratta di approntare un ambiente server WebSphere nella sua configurazione più semplice.
Creare un ambiente server
Vediamo ora come creare un ambiente server WebSphere nella sua configurazione più semplice: un application server standalone, che nel provisioning form si posiziona come ambiente di pre-integrazione o di integrazione a livello di unità di distribuzione. Attraverso il Profile Management Tool andremo a creare un profilo WebSphere di questo tipo. Questo verrà creato sul file system al percorso /opt/IBM/WebSphere/AppServer/profiles/ (nel nostro caso “AppSrvStdAlone”).
Figura 1 – Selezione del profilo.
Il wizard propone l’assegnazione delle porte:
Figura 2 – Assegnazione delle porte.
Al termine, dopo aver lanciato il comando di verifica dell’installazione, otterremo:
Server name is:server1 Profile name is:AppSrvStdAlone Profile home is:/opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone Profile type is:default Cell name is:Node01Cell Node name is:NodeStdAlone Current encoding is:UTF-8 Server port number is:9082 IVTL0020I: The Installation Verification Tool cannot connect to WebSphere Application Server; waiting for the server to start. IVTL0010I: Connecting to the WebSphere Application Server on port: 9082 IVTL0020I: The Installation Verification Tool cannot connect to WebSphere Application Server; waiting for the server to start. Start running the following command: /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/bin/startServer.sh server1 -profileName AppSrvStdAlone >ADMU0116I: Tool information is being logged in file > /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1/startServer.log >ADMU0128I: Starting tool with the AppSrvStdAlone profile >ADMU3100I: Reading configuration for server: server1 >ADMU3200I: Server launched. Waiting for initialization status. >ADMU3000I: Server server1 open for e-business; process id is 11698 IVTL0015I: WebSphere Application Server is running on port: 9082 for profile AppSrvStdAlone Testing server using the following URL:http://:9082/ivt/ivtserver?parm2=ivtservlet IVTL0050I: Servlet engine verification status: Passed Testing server using the following URL: http://:9082/ivt/ivtserver?parm2=ivtAddition.jsp IVTL0055I: JavaServer Pages files verification status: Passed Testing server using the following URL:http://:9082/ivt/ivtserver?parm2=ivtejb IVTL0060I: Enterprise bean verification status: Passed IVTL0035I: The Installation Verification Tool is scanning the file /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1/SystemOut.log for errors and warnings. [4/15/09 11:50:46:843 CEST] 0000000a WSKeyStore W CWPKI0041W: One or more key stores are using the default password. [4/15/09 11:51:24:574 CEST] 0000000a ThreadPoolMgr W WSVR0626W: The ThreadPool setting on the ObjectRequestBroker service is deprecated. IVTL0040I: 2 errors/warnings are detected in the file /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1/SystemOut.log IVTL0070I: The Installation Verification Tool verification succeeded. IVTL0080I: The installation verification is complete.
Per avviare o fermare il server da linea di comando:
[root@ bin]# pwd /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/bin [root@ bin]# ./stopServer.sh server1 ADMU0116I: Tool information is being logged in file /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1/stopServer.log ADMU0128I: Starting tool with the AppSrvStdAlone profile ADMU3100I: Reading configuration for server: server1 ADMU3201I: Server stop request issued. Waiting for stop status. ADMU4000I: Server server1 stop completed. [root@ bin]# ./startServer.sh server1 ADMU0116I: Tool information is being logged in file /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1/startServer.log ADMU0128I: Starting tool with the AppSrvStdAlone profile ADMU3100I: Reading configuration for server: server1 ADMU3200I: Server launched. Waiting for initialization status. ADMU3000I: Server server1 open for e-business; process id is 14121
Console di amministrazione
Durante la creazione del profilo viene distribuita la console amministrativa raggiungibile alla url
https://:9047/ibm/console/logon.jsp
Figura 3 – Console amministrativa.
Applicazioni installate
I moduli Java EE dell’applicazione Java EE “IVTApplication” sono due: un modulo web (WAR) e un modulo EJB come riportato di seguito. Il contesto di deploy è dato dalla definizione di WebSphere: cella, nodo, server, come riportato.
Figura 4 – Applicazioni installate.
Figura 5 – Moduli Java EE associati ad una applicazione.
L’applicazione web è accedibile alla url
http://localhost:9082/ivt/ivtDate.jsp
Figura 6 – Accesso alla web application.
Deploy dell’applicazione
La console amministrativa mette a disposizione un wizard di deploy delle applicazioni Java EE. Va considerato che, soprattutto in presenza di molti EAR di cui effettuare il deploy, esiste la possibilità di distribuire attraverso scripting, con un comando
wsadmin.sh
collocato nella bin del profilo
Undeploy dell’EAR
Per effettuare un undeploy dell’archivio, occorre agire come segue:
uninstallEar.sh
/opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/bin/wsadmin.sh -user -password -f /root/deployCmd/unistallApp.jacl
unistallApp.jacl
$AdminApp uninstall IVTApplication $AdminConfig save
Si ottiene il seguente output della console:
[root@ deployCmd]# ./uninstallEar.sh WASX7209I: Connected to process "server1" on node NodeStdAlone using SOAP connector; The type of process is: UnManagedProcess ADMA5017I: Uninstallation of IVTApplication started. ADMA5104I: The server index entry for WebSphere_cell=Node01Cell, node=NodeStdAlone is updated successfully. ADMA5102I: The configuration data for IVTApplication from the configuration repository is deleted successfully. ADMA5011I: The cleanup of the temp directory for application IVTApplication is complete. ADMA5106I: Application IVTApplication uninstalled successfully.
Deploy dell’EAR
L’EAR deve preventivamente essere presente sul file system del server
/opt/IBM/WebSphere/AppServer/installableApps/ivtApp.ear
Come descritto nell’articolo su Cruise Control [3] sarà possibile inserire un opportuno task di Ant nel file di configurazione di Cruise Control che trasferisca automaticamente l’EAR sul file system del nostro application server.
installEar.sh
/opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/bin/wsadmin.sh -user wasadmin -password wasadmin -f /root/deployCmd/installApp.jacl
installApp.jacl
$AdminApp install /opt/IBM/WebSphere/AppServer/installableApps/ivtApp.ear {-appname IVTApplication -MapWebModToVH {{"IVT Application" ivt_app.war, WEB-INF/web.xml default_host}} -MapModulesToServers {{"IVT EJB Module" ivtEJB.jar, META-INF/ejb-jar.xml WebSphere_cell=Node01Cell, node=NodeStdAlone,server=server1} {"IVT Application" ivt_app.war, WEB-INF/web.xml WebSphere_cell=Node01Cell, node=NodeStdAlone,server=server1}}} $AdminConfig save
Mapping del modulo web sul virtual host
-MapWebModToVH
È l’istruzione che distribuisce sull’host(default_host) la web application (ivt_app.war) definita dal descrittore di deployment WEB-INF/web.xml.
Mapping dei moduli J2EE sull’application server
-MapModulesToServers
È l’istruzione che distribuisce i moduli J2EE relativi:
- alla web application (ivt_app.war) definita dal descrittore di deployment WEB-INF/web.xml
- al modulo EJB (ivtEJB.jar) definito dal descrittore di deployment META-INF/ejb-jar.xml
sull’application server definito dall’ambito:
cell=Node01Cell,node=NodeStdAlone,server=server1
Figura 7 – Descrittore di distribuzione del modulo EJB.
Figura 8 – Descrittore di distribuzione del modulo Web.
Output della console:
[root@ deployCmd]# ./installEar.sh WASX7209I: Connected to process "server1" on node NodeStdAlone using SOAP connector; The type of process is: UnManagedProcess ADMA0080W: A template policy file without any permission set is included in the 1.2.x enterprise application. You can modify the Java 2 Security policy for the enterprise application by editing the was.policy file that is located in the ${user.install.root}/config/cells/(yourCellName)/applications /(yourAppName).ear/deployments/(yourAppName)/META-INF directory after the application is installed. WASX7327I: Contents of was.policy file: // // Template policy file for enterprise application. // Extra permissions can be added if required by the enterprise application. // // NOTE: Syntax errors in the policy files will cause the enterprise application // FAIL to start. Extreme care should be taken when editing these policy files. // It is advised to use the policytool provided by the JDK for editing // the policy files (WAS_HOME/java/jre/bin/policytool). // grant codeBase "file:${application}" { }; grant codeBase "file:${jars}" { }; grant codeBase "file:${connectorComponent}" { }; grant codeBase "file:${webComponent}" { }; grant codeBase "file:${ejbComponent}" { }; ADMA5016I: Installation of IVTApplication started. ADMA5058I: Application and module versions are validated with versions of deployment targets. ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. ADMA5053I: The library references for the installed optional package are created. ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. ADMA5001I: The application binaries are saved in /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/wstemp /Script120a9a52a20/workspace/cells/Node01Cell /applications/IVTApplication.ear/IVTApplication.ear ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. SECJ0400I: Successfuly updated the application IVTApplication with the appContextIDForSecurity information. ADMA5011I: The cleanup of the temp directory for application IVTApplication is complete. ADMA5013I: Application IVTApplication installed successfully.
Dopo il suo deploy, l’applicazione è comunque ancora da avviare.
Figura 9 – Applicazione da avviare.
Nella cartella
/opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/logs/server1
saranno a disposizione i file di log di cui riportiamo qui sotto un fragment del systemOut.
************ Start Display Current Environment ************ WebSphere Platform 6.1 [ND 6.1.0.0 b0620.14] running with process name Node01CellNodeStdAloneserver1 and process id 11698 Host Operating System is Linux, version 2.6.9-42.EL Java version = J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20060504 (JIT enabled) J9VM - 20060501_06428_lHdSMR JIT - 20060428_1800_r8 GC - 20060501_AA, Java Compiler = j9jit23, Java VM name = IBM J9 VM was.install.root = /opt/IBM/WebSphere/AppServer user.install.root = /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone Java Home = /opt/IBM/WebSphere/AppServer/java/jre ws.ext.dirs = /opt/IBM/WebSphere/AppServer/java/lib:/opt/IBM/WebSphere/AppServer /profiles/AppSrvStdAlone/classes: /opt/IBM/WebSphere/AppServer/classes: /opt/IBM/WebSphere/AppServer/lib: /opt/IBM/WebSphere/AppServer/installedChannels: /opt/IBM/WebSphere/AppServer/lib/ext: /opt/IBM/WebSphere/AppServer/web/help: /opt/IBM/WebSphere/AppServer/deploytool/itp/plugins /com.ibm.etools.ejbdeploy/runtime Classpath = /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone/properties: /opt/IBM/WebSphere/AppServer/properties: /opt/IBM/WebSphere/AppServer/lib/startup.jar: /opt/IBM/WebSphere/AppServer/lib/bootstrap.jar: /opt/IBM/WebSphere/AppServer/lib/j2ee.jar: /opt/IBM/WebSphere/AppServer/lib/lmproxy.jar: /opt/IBM/WebSphere/AppServer/lib/urlprotocols.jar: /opt/IBM/WebSphere/AppServer/deploytool/itp/batchboot.jar: /opt/IBM/WebSphere/AppServer/deploytool/itp/batch2.jar: /opt/IBM/WebSphere/AppServer/java/lib/tools.jar Java Library path = /opt/IBM/WebSphere/AppServer/java/jre/bin: /opt/IBM/WebSphere/AppServer/java/jre/bin/j9vm: /opt/IBM/WebSphere/AppServer/java/jre/bin: /opt/IBM/WebSphere/AppServer/bin: /opt/IBM/WebSphere/AppServer/java/jre/bin: /opt/IBM/WebSphere/AppServer/java/jre/bin/j9vm: /opt/IBM/WebSphere/AppServer/java/jre/bin: /home/db2inst1/sqllib/lib:/usr/lib ************* End Display Current Environment ************* [4/15/09 14:13:38:211 CEST] 000000a8 ApplicationMg A WSVR0200I: Starting application: IVTApplication [4/15/09 14:13:38:215 CEST] 000000a8 ApplicationMg A WSVR0203I: Application: IVTApplication Application build level: WAS61.SERV1 [b0620.14] [4/15/09 14:13:38:628 CEST] 000000a8 EJBContainerI I WSVR0037I: Starting EJB jar: ivtEJB.jar [4/15/09 14:13:38:903 CEST] 000000a8 EJBContainerI I WSVR0057I: EJB jar started: ivtEJB.jar [4/15/09 14:13:39:114 CEST] 000000a8 WebGroup A SRVE0169I: Loading Web Module: IVT Application. [4/15/09 14:13:39:673 CEST] 000000a8 VirtualHost I SRVE0250I: Web Module IVT Application has been bound to default_host[*:9082,*:80,*:9445,*:5065,*:5064,*:443]. [4/15/09 14:13:39:897 CEST] 000000a8 ApplicationMg A WSVR0221I: Application started: IVTApplication
Deploy da remoto
Diamo ora una brevissima descrizione dei comandi ant di deploy delle applicazioni J2EE verso un server remoto. Individuiamo la porta SOAP in ascolto sul server1, indicata dalla variabile SOAP_CONNECTOR_ADDRESS.
Figura 10 – Lista delle porte di un application server.
Per la distribuzione da remoto occorre disporre di una workstation con un runtime WebSphere di versione omologa a quella del server remoto. Sarà quindi necessario aggiornare il key store locale, nel nostro caso:
untimes ase_v61profilesAppSrv01etc rust.p12
Di seguito riportiamo lo stack di esecuzione del comando wsadmin, durante il quale viene richiesta una utenza di WebSphere con privilegi amministrativi:
untimes ase_v61profilesAppSrv01 in>wsadmin.bat -co nntype SOAP -host was61host00 -port 8884 DN soggetto: CN=was61host00, O=IBM, C=US DN emittente: CN=was61host00, O=IBM, C=US Numero di serie: 1239702359 Scadenza: Wed Apr 14 11:45:59 CEST 2010 Digest SHA-1: 7F:C1:98:C1:97:55:2A:21:DF:10:21:DB:48:87:44:89:CA:04:88:90 Digest MD5: B6:68:D7:91:B6:DF:9C:20:42:91:75:ED:DE:F9:FE:0C [exec] Aggiungere ora il firmatario all'archivio trust? (s/n)
Da questo momento sarà possibile lanciare dalla workstation trustata il task di deploy da remoto che è disponibile come allegato nel menu in alto a sinistra (deployAnt.zip). Le direttive ant potranno essere anche integrate nell’orchestrazione di cruise control alla fine della compilazione e creazione dell’EAR. Chiaramente, considerato il protocollo di comunicazione SOAP, si tratta di un task piuttosto lento.
xBuildfile: build.xml ear.deploy: [echo] ----------------------------------------- [echoproperties] #Ant properties [echoproperties] #Thu Apr 16 17:49:57 CEST 2009 [echoproperties] deploy.ear.jacl=/DeployStartApp.jacl [echoproperties] project.name=ivtApp [echoproperties] websphere.host.name= [echoproperties] websphere.soap.port=8884 [echo] ----------------------------------------- [exec] WASX7209I: Connesso al processo "server1" sul nodo NodeStdAlone utilizzando il connettore SOAP; il tipo di processo è: UnManagedProcess [exec] ADMA5017I: Uninstallation of IVTApplication started. [exec] ADMA5104I: The server index entry for WebSphere: cell=Node01Cell, node=NodeStdAlone is updated successfully. [exec] ADMA5102I: The configuration data for IVTApplication from the configuration repository is deleted successfully. [exec] ADMA5011I: The cleanup of the temp directory for application IVTApplication is complete. [exec] ADMA5106I: Application IVTApplication uninstalled successfully. [exec] ADMA0080W: Un file modello della politica senza autorizzazioni impostate viene incluso nell'applicazione enterprise 1.2.x. è possibile modificare la politica di Java 2 Security per l'applicazione cambiando il file was.policy che si trova nella directory ${user.install.root}/config/cells/(NomeCella)/applications/ (NomeApplicazione).ear/deployments/(NomeApplicazione/META-INF dopo aver installato l'applicazione. [exec] WASX7327I: Contenuti del file was.policy: [exec] // [exec] // Template policy file for enterprise application. [exec] // Extra permissions can be added if required by the enterprise application. [exec] // [exec] // NOTE: Syntax errors in the policy files will cause the enterprise application FAIL to start. [exec] // Extreme care should be taken when editing these policy files. It is advised to use [exec] // the policytool provided by the JDK for editing the policy files [exec] // (WAS_HOME/java/jre/bin/policytool). [exec] // [exec] [exec] grant codeBase "file:${application}" { [exec] }; [exec] [exec] grant codeBase "file:${jars}" { [exec] }; [exec] [exec] grant codeBase "file:${connectorComponent}" { [exec] }; [exec] [exec] grant codeBase "file:${webComponent}" { [exec] }; [exec] [exec] grant codeBase "file:${ejbComponent}" { [exec] }; [exec] [exec] [exec] ADMA5016I: Installation of IVTApplication started. [exec] ADMA5058I: Application and module versions are validated with versions of deployment targets. [exec] ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. [exec] ADMA5053I: The library references for the installed optional package are created. [exec] ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. [exec] ADMA5001I: The application binaries are saved in /opt/IBM/WebSphere/AppServer/profiles/AppSrvStdAlone /wstemp/Script120af9ee58a/workspace/cells /Node01Cell/applications/IVTApplication.ear/IVTApplication.ear [exec] ADMA5005I: The application IVTApplication is configured in the WebSphere Application Server repository. [exec] SECJ0400I: Successfuly updated the application IVTApplication with the appContextIDForSecurity information. [exec] ADMA5011I: The cleanup of the temp directory for application IVTApplication is complete. [exec] ADMA5013I: Application IVTApplication installed successfully. [exec] Starting IVTApplication on node NodeStdAlone, server server1. [exec] BUILD SUCCESSFUL Total time: 1 minute 26 seconds
E così abbiamo messo a disposizione un server come schematizzato nella figura 11.
Figura 11 – Provisioning dell’ambiente di pre-integrazione.
Conclusioni
In questo articolo siamo andati avanti nella nostra panoramica sul provisioning degli ambienti server. In particolare, abbiamo visto come creare un server standalone in WebSphere attraverso un “tutorial” passo per passo. Nel prossimo articolo aggiungeremo un po’ di complessità, affrontando praticamente il tema della scalabilità e trattando il concetto di failover.
Riferimenti
[1] WebSphere Application Server, Versione 6.1
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp
[2] Steve Robinson, WebSphere Tools
[3] Luigi Bennardis, “Cruise Control open source framework. Un tool estensibile per la Continuous Integration”, MokaByte 141, Giugno 2009