Installation de LCDS avec Tomcat (sur Mac)

  • warning: array_map(): Argument #2 should be an array in /var/www/titouille.ch/www/modules/system/system.module on line 1050.
  • warning: array_keys() expects parameter 1 to be array, null given in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
  • warning: Invalid argument supplied for foreach() in /var/www/titouille.ch/www/includes/theme.inc on line 1845.
Portrait de titouille

Quelle galère... Installer LCDS sur Mac m'aura pris du temps, c'est pourquoi je prends la peine d'écrire un petit billet à ce sujet.


Tout d'abord, les besoins :

  • LCDS version AIX
  • Tomcat (version 6.0.18 au moment ou j'écris ce billet
  • Jotm, le gestionnaire de transactions open-source



Informations

la variable ${catalina.home} représente le répertoire racine ou est situé le serveur tomcat, dans mon cas /usr/local/apache-tomcat-6.0.18.



Processus d'installation


  1. décompresser l'archive LCDS dans n'importe quel emplacement, peu importe

  2. décompresser tomcat dans /usr/local (/usr/local/apache-tomcat-6.0.18)

  3. via le terminal, créer un alias avec la commande 'sudo ln -s apache-tomcat-6.0.18 tomcat'. La commande sudo va permettre d'exécuter cette action en mode administrateur, avec demande du mot de passe. Nous aurons dès à présent un alias du véritable répertoire, nommé "tomcat".

  4. optionnel : pour activer l'authentification spécifique à LCDS, aller dans le répertoire lcds/resources/security/tomcat et ouvrir le "readme.txt" puis suivre la procédure. La nouvelle valve est à intégrer dans le fichier 'context' situé dans ${catalina.home}/conf/context.xml

  5. récupérer le fichier lcds-samples.war situé dans l'archive LCDS que vous avez préalablement décompressé dans l'emplacement de votre choix (point 1) et le glisser dans le répertoire webapps, il se décompresse automatiquement. J'ai été obligé de faire ça pour que mon véritable projet soit pris en compte.

  6. Créer dans ${catalina.home}/lib/ un répertoire nommé "jotm", puis ouvrir l'archive Jotm et récupérer les fichiers jar du répertoire "lib" et les placer dans le répertoire "jotm" nouvellement créé dans tomcat. Nous pourrions les placer directement dans le répertoire "lib" de tomcat, mais ça sera plus simple à gérer

  7. Il est mainenant nécessaire de spécifier à tomcat qu'il doit prendre en compte les fichiers jotm. Pour ce faire, ouvrir le fichier catalina.properties dans ${catalina.home}/conf et rajouter le chemin vers le répertoire à la variable "common.loader", ce qui devrai donner la ligne suivante : common.loader=${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/lib/jotm/*.jar

  8. ATTENTION : point très important à prendre en considération : Contrôlez dans les projets déployés dans le répertoire webapp qu'aucun ne contienne ne serait-ce qu'un seul des fichiers JAR situés dans le répertoire "jotm" (par exemple common-logging.jar). Si une librairie existe déjà dans vos projets, alors supprimez là, car les librairies jotm sont globales à tomcat. Si doublon il y a, il y a un grand risque pour que jotm ne fonctionne pas correctement et vous balance une erreur du type "Unable to access UserTransaction in DataService"

  9. Créer une arborescence de répertoire ${catalina.home}/conf/Catalina/localhost et y placer un fichier du même nom que le répertoire de projet, par exemple flex.xml avec le contenu suivant :

    <?xml version='1.0' encoding='utf-8'?>
    <Context reloadable="true">
    	<Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
    </Context>

    pour spécifier que ce projet utilise le gestionnaire de transactions JOTM.


  10. Il est enfin nécessaire d'intégrer à votre projet un fichier "web.xml" qui va contenir la configuration du serveur. Ce fichier est à placer dans le répertoire WEB-INF de votre projet (chez moi : ${catalina.home}/webapps/flex/WEB-INF/). Voici un exemple de fichier de configuration



Informations complémentaires :

  • les logs tomcat se trouvent dans /usr/local/tomcat/logs : les logs importants sont catalina.out et localhost.[date-du-jour].log

  • pour démarrer le serveur, via le terminal, aller sur le répertoire tomcat (cd /usr/local/tomcat) puis exécuter la commande ./bin/startup.sh

  • pour arrêter le serveur, via le terminal, aller sur le répertoire tomcat (cd /usr/local/tomcat) puis exécuter la commande ./bin/shutdown.sh

  • Si la console (via catalina.out) affichait bien les informations de chargement hibernate et que tout d'un coup elles ne s'affichent plus, il est fort possible que le fichier "web.xml" situé dans ${catalina.home}/webapps/[project]/WEB-INF/ ait été supprimé.

  • Voir la section 3 du lien suivant pour permettre une architecture du type /servers/default/ avec plusieurs instances de serveur tel que sous JRUN

Une fois que toute l'installation et la configuration a été faite, vous pouvez démarrer votre serveur et tester si votre application fonctionne.

Si vous êtes confronté à un erreur du type "Send failed", il est fort probable que votre projet utilise un port RTMP qui est déjà utilisé par un autre projet. Contrôlez pour chaque projet le fichier [project]/WEB-INF/flex/services-config.xml, à la déclaration my-rtmp, quel est le port utilisé (2037 ou 2038 par défaut) et modifiez le si nécessaire, pour que chaque projet utilise un port différent, puis recompilez votre application Flex. Il faut bien noter que dans votre projet Flex, dans les paramètres additionnels de compilation, vous avez normalement dû ajouter un lien vers le fichier services-config.xml situé sur votre serveur. Flex va parser ce fichier et regarder quel est le port RTMP utilisé, et compiler votre animation pour utiliser le port qui est dans services-config.xml.

Edit : il est possible que le problème "undefined url:rtmp://localhost:2037" vienne d'ailleurs. Je suis en train de configurer LCDS sur ubuntu, et j'ai été confronté à ce problème. Je n'avais pas mis en place JOTM car je voulais aller pas à pas. Et c'est à cause d'un jar manquant que j'avais des problèmes : jta_xxx.jar. Je l'ai rajouté dans le répertoire WEB-INF/lib et ça a résolu cette erreur. Les logs m'ont mis sur la piste, avec un message du type : 
GRAVE: La servlet /flex a généré une exception "load()"
java.lang.ClassNotFoundException: javax.transaction.Synchronization at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)

Si flex vous renvoie une erreur du type "destination xxx doesn't exists" alors essayez de faire une recompilation / un clean de votre projet (JAVA et Flex) puis réessayez de le tester.

N'oubliez pas bien entendu d'arrêter et relancer le serveur après chaque modification de configuration serveur ou recompilation Java.