Vous venez de tlcharger le code qui accompagne "Les Cahiers du Programmeur : Java EE 5".

Vous trouverez de l'aide supplmentaire sur l'application et son dploiement  l'adresse http://www.antoniogoncalves.org



Aprs avoir dcompress ce fichier, vous obtenez les rpertoires suivants :

===============
= Repertoires =
===============
   +
   +-admin.xml                  : taches ant administratives
   +-build.xml                  : taches ant pour compiler, dployer les applications
   +-passwordfile               : contient le mot de passe pour GlassFish
   +-readme.txt                 : le fichier que vous tes en train de lire
   |
   +-BarkBank
   |    +-generated          	: fichiers gnrs pour les services web
   |    +-resources          	: fichiers constituant l'application web (html, gif...)
   |    +-src                	: code source de l'application barkbank
   |    +-WEB-INF               : configuration de l'application barkbank
   +-PetEx
   |    +-generated          	: fichiers gnrs pour les services web
   |    +-resources          	: fichiers constituant l'application web (html, gif...)
   |    +-src                	: code source de l'application petex
   |    +-WEB-INF               : configuration de l'application petex
   +-yaps
   |    +-config                : fichier de configuration pour l'application yaps
   |    +-generated          	: fichiers gnrs pour les services web
   |    +-lib           	: librairies externes permettant la compilation du projet
   |    +-resources          	: fichiers constituant l'application web (html, css, gif...)
   |    +-src                	: code source de l'application yaps
   |    +-WEB-INF               : configuration de l'application petex

Dans ce document, la variable PETSTORE_HOME fait rfrence  la racine de cette arboresence.


================
= Installation =
================
Avant de faire fonctionner l'application, assurez vous que vous avez les outils necessaire installs:

-- JDK
   * Installez une version du JDK gale ou suprieure  1.5_11  partir de http://java.sun.com/javase/downloads/index_jdk5.jsp
   * Positionnez la variable JAVA_HOME

-- Ant
   * Installez une version de Ant gale ou suprieure  1.7  partir de http://ant.apache.org/bindownload.cgi
   * Positionnez la variable ANT_HOME
   * Rajoutez le rpertoire %ANT_HOME%\bin dans votre PATH
   
-- GlassFish
   * Installez une version du serveur Glassfish gale ou suprieure  V2b41 https://glassfish.dev.java.net/public/downloadsindex.html
   * Tlchargez le fichier jar puis excutez la commande java -Xmx256m -jar <nom du fichier>.jar
   * Positionnez la variable GLASSFISH_HOME
   * Ensuite tapez la commande %GLASSFISH_HOME%\ant -f setup.xml pour terminer l'installation de GlassFish
   * Rajoutez le rpertoire %GLASSFISH_HOME%\bin dans votre PATH


================
=  Configurer  =
================
Il faut maintenant configurer GlassFish et la base de donnes. Les taches d'administrations se trouvent dans le fichier %PETSTORE_HOME%\admin.xml

   * Crez le domaine petstore dans GlassFish en tenant compte des mots de passe ci-dessous (le port d'admin est 8282)
     %GLASSFISH_HOME%\bin\asadmin create-domain --adminport 8282 --user admin --savemasterpassword=true --instanceport 8080 petstore
     
        Please enter the admin password>adminpwd
        Please enter the admin password again>adminpwd
        Please enter the master password>masterpwd
        Please enter the master password again>masterpwd
	Using port 8282 for Admin.
	Using port 8080 for HTTP Instance.
	Using default port 7676 for JMS.
	Using default port 3700 for IIOP.
	Using default port 8181 for HTTP_SSL.
	Using default port 3820 for IIOP_SSL.
	Using default port 3920 for IIOP_MUTUALAUTH.
	Using default port 8686 for JMX_ADMIN.        
	Domain petstore created.

     Vous devez alors voir apparaitre le rpertoire %GLASSFISH_HOME%\domains\petstore

   * (Si par la suite vous voulez supprimer ce domaine, tapez la commande ant -f admin.xml delete-domain ou asadmin delete-domain petstore)

   * Dmarrez le serveur Glassfish :
     %PETSTORE_HOME%\ant -f admin.xml start-domain
     
   * Vrifier que le serveur fonctionne en allant sur :
     http://localhost:8080/

     Si votre serveur de dmarre pas, consulter le fichier %GLASSFISH_HOME%\domains\petstore\logs\server.log

   * Dmarrez la base de donnes
     %PETSTORE_HOME%\ant -f admin.xml start-db
     [exec] Database started in Network Server mode on host localhost and port 1527.
     ...
     [exec] Command start-database executed successfully.

   * Configurez le serveur GlassFish en tapant
     %PETSTORE_HOME%\ant -f admin.xml setup

     Ceci a pour effet d'effectuer les taches suivantes

     * Crer un pool de connection  la base de donnes :
       %PETSTORE_HOME%\ant -f admin.xml create-connection-pool

     * Crer la base de donnes
       %PETSTORE_HOME%\ant -f admin.xml ping-connection-pool

       nb: Vous devez voir alors apparaitre le rpertoire %GLASSFISH_HOME%\javadb\petstoreDB

     * Crer une source de donnes
       %PETSTORE_HOME%\ant -f admin.xml create-datasource

     * Crez les ressources JMS ncessaires:
       . une ConnectionFactory :
         %PETSTORE_HOME%\ant -f admin.xml create-jms-connection-factory

       . une queue JMS ncessaires:
         %PETSTORE_HOME%\ant -f admin.xml create-jms-queue

       . un Topic JMS ncessaires:
         %PETSTORE_HOME%\ant -f admin.xml create-jms-topic

     * Crer le logger de l'application Petstore qui utilise java.util.logging
       %PETSTORE_HOME%\ant -f admin.xml set-loggers

 ================
 = Vrification =
 ================
   * Vrifiez que le paramtrage  bien fonctionn
     %PETSTORE_HOME%\ant -f admin.xml list

     Ceci a pour effet d'effectuer les taches suivantes

     * Vrifier que le pool de connection "petstorePool" a t cr soit :
       . par la commande ant -f admin.xml list-connection-pool
         [exec] __CallFlowPool
         [exec] __TimerPool
         [exec] DerbyPool
         [exec] petstorePool
        . ou par la console d'admin http://localhost:8282/ (dans l'arbre, dployez le noeud Resources>JDBC>Connection Pools)
          nb: il est peut-tre ncessaire de rafrachir la page

     * Vrifier que la source de donnes "petstoreDS" a t cr :
       . %PETSTORE_HOME%\ant -f admin.xml list-datasource
         [exec] jdbc/__TimerPool
         [exec] jdbc/__CallFlowPool
         [exec] jdbc/__default
         [exec] jdbc/petstoreDS
       . ou par la console d'admin (dans l'arbre, dployez le noeud Resources>JDBC>JDNC Resources)
         nb: il est peut-tre ncessaire de rafrachir la page

     * Vrifier que les ressources JMS ont t crs :
       . %PETSTORE_HOME%\ant -f admin.xml list-jms-resources
         [exec] jms/queue/client
         [exec] jms/topic/order
         [exec] jms/petstoreConnectionFactory

       . ou par la console d'admin (dans l'arbre, dployez les noeuds Resources>JMS Resources>Connection Factories et Destination Resources)

     * Pour vrifier que le logger a bien t configur
       . Connectez-vou s la console http://localhost:8282 (admin/adminpwd)
       . Selectionnez "Application Server"
       . Cliquez sur l'onglet "Logging"
       . Sur la page de logging, cliquez sur l'onglet "Log Levels"
       . En bas de la page vous trouverez la section "Additional Module Log Level Properties"
       . Vous devez voir aparaitre le logger com.yaps.petstore, com.barkbank et com.petex


============================
=  Deployez l'application  =
============================
Maintenant que tout est configur, il faut dployer les applications sur le serveur.

	* Dployez l'application BarkBank
	  
	  * Construisez l'application en tapant %PETSTORE_HOME%\ant barkbank-build
	    Ceci a pour effet de compiler l'application, de gnrer les artefacts pour les services web et de la packager dans le fichier %PETSTORE_HOME%\BarkBank\build\barkbank.war

	  * Dployez l'application sur le serveur en tapant %PETSTORE_HOME%\ant barkbank-deploy
	    Pour vrifier que le dploiement a bien t effectu, rendez-vous  l'adresse http://localhost:8080/barkbank/

	* Dployez l'application PetEx
	  
	  * Construisez l'application en tapant %PETSTORE_HOME%\ant petex-build
	    Ceci a pour effet de compiler l'application, de gnrer les artefacts pour les services web et de la packager dans le fichier %PETSTORE_HOME%\PexEx\build\petex.war

	  * Dployez l'application sur le serveur en tapant %PETSTORE_HOME%\ant petex-deploy
	    Pour vrifier que le dploiement a bien t effectu, rendez-vous  l'adresse http://localhost:8080/petex/

	* Dployez l'application Yaps
	  
	  * Construisez l'application en tapant %PETSTORE_HOME%\ant yaps-build
	    Ceci a pour effet de compiler l'application, de gnrer les artefacts pour les services web et de la packager dans les fichiers %PETSTORE_HOME%\Yaps\build

	  * Dployez l'application sur le serveur en tapant %PETSTORE_HOME%\ant yaps-deploy
	    Cette tache dploie l'application et insre des donnes en base  
	    Pour vrifier que le dploiement a bien t effectu, rendez-vous  l'adresse http://localhost:8080/petstore/

	  
============================
=  Utilisez l'application  =
============================
Une fois les trois applications dployes, vous pouvez les utiliser  l'adresse http://localhost:8080/petstore/
Consulter le catalogue, crez vous un compte ou logger vous job/job. Achetez des animaux domestiques, passez commande et vous utiliserez alors les services web des application BarkBank (pour la vrification des cartes bancaires) et PetEx (avertit le transporteur).

Pour executer l'application client tapez %PETSTORE_HOME%\ant run-client


=================================
= Demarrer/Arreter les serveurs =
=================================
-- Derby
     ant -f admin.xml start-db
     ant -f admin.xml stop-db
-- GlassFish
     ant -f admin.xml start-domain
     ant -f admin.xml stop-domain


============================
=  Debogger l'application  =
============================
* Pour debogger l'application avec un IDE il faut tout d'abord configurer votre IDE avec les paramtres suivants
  -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9009
* Lancer le serveur en mode debug
  %PETSTORE_HOME%\ant -f admin.xml start-domain-debug
* Certains IDE doivent compiler eux mme les sources pour que le debug fonctionne. Si tel est le cas,
  compiler les source avec votre IDE et construisez l'application avec la tache
  %PETSTORE_HOME%\ant build-debug
* Deployez comme d'habitude avec   
  %PETSTORE_HOME%\ant deploy

(ref : http://java.sun.com/products/jpda/doc/conninv.html#Invocation)  


============================
=  Rsourdre les problmes =
============================
- Si le serveur ne dmarre pas car un port d'coute est utilis :
  . Vrifiez que le port est utilis  l'aide de la commande > telnet localhost 3306 (3306 est le port  tester)
  . changez le numro de port lors de la cration du domaine en rajoutant la proprit --domainproperties (ex --domainproperties domain.jmxPort=8989)

-- Vrifiez votre firewall ou antivirus, il se peut qu'ils bloquent un port d'coute
com.sun.appserv.server.ServerLifecycleException: Cannot bind to URL [rmi://test:7979/management/rmi-jmx-connector]: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
	java.net.SocketTimeoutException: Read timed out]
	at com.sun.enterprise.admin.server.core.JmxConnectorLifecycle.onStartup(JmxConnectorLifecycle.java:127)
	at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:326)
	at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:112)
	at com.sun.enterprise.server.PEMain.run(PEMain.java:326)
	at com.sun.enterprise.server.PEMain.main(PEMain.java:260)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.sun.enterprise.server.PELaunch.main(PELaunch.java:272)
Caused by: java.io.IOException: Cannot bind to URL [rmi://test:7979/management/rmi-jmx-connector]: javax.naming.CommunicationException [Root exception is java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
	java.net.SocketTimeoutException: Read timed out]

-- CLI171 Command deploy failed : Deploying application in domain failed; javax.naming.NameNotFoundException
   Vrifiez que vous avez dploy votre pool de connexion et votre datasource

-- Operation 'pingConnectionPool' failed in 'resources' Config Mbean. Target exception message: This pool is not registered with the runtime environment
   Vrifiez que la base de donne fonctionne. Si oui, arretez-la et redmarrez-la.

-- org.apache.derby.client.am.DisconnectException: java.security.PrivilegedActionException : Error opening socket to server localhost on port 1527 with message : null
   Vous essayez de dployer l'application alors que la base de donnes ne tourne pas (utilisez la tache start-db)


-- Si vous obtenez une exception similaire  celle-ci:
 Caused by: javax.servlet.ServletException : java.lang.OutOfMemoryError: PermGen space
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:378)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.apache.catalina.core.ApplicationFilterChain.servletService (ApplicationFilterChain.java:397)
    at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:849)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java :697)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:532)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:465)
    at org.apache.catalina.core.ApplicationDispatcher.forward (ApplicationDispatcher.java:353)
    at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:413)
    ... 31 more
 Caused by: java.lang.OutOfMemoryError: PermGen space

  vous pouvez augmenter la zone mmoire PermGen de la jvm de la manire suivante :
    - diter le fichier %domain_home%/config/domain.xml
    - dans le tag <java-config>, rajouter <jvm-options>-XX:MaxPermSize=128m</jvm-options>