
La FAQ Java EEConsultez toutes les FAQ
Nombre d'auteurs : 27, nombre de questions : 83, dernière mise à jour : 26 avril 2013
Sommaire→Conteneurs Web et Serveurs d'Application→Tomcat- Comment ajouter le JAR de Jave EE dans Tomcat ?
- Pourquoi ma page ne s'affiche pas complètement ?
- Comment gérer une connexion JDBC ?
- Comment partager le context entre 2 webapps ?
- Comment charger des servlets de l'application au démarrage de Tomcat ?
- Comment lire un message d'erreur de Tomcat ?
- Comment créer un compte utilisateur qui a les droits pour manager Tomcat ?
- Comment utiliser une librairie DLL implementée par JNI sur un serveur TOMCAT ?
Si on ajoute j2ee.jar dans le répertoire WEB-INF/lib d'une application sur Tomcat, il va y avoir un problème de compatibilité entre les Jar de Tomcat (servlet.jar) et celui de Java EE.
C'est pourquoi, il faut rajouter ce Jar dans le fichier lib du JDK utilisé par Tomcat et le retirer du dossier WEB-INF/lib.
Dans Tomcat, le moteur de rendu (Jasper) effectue le rendu de la page jusqu'à ce qu'il trouve une erreur. S'il trouve une erreur, il stoppe le rendu de la page et ajoute une erreur dans les fichiers de log. Il est donc tout à fait possible que votre page soit coupée au beau milieu.
Il faut que le jar du JDBC soit dans les lib de Tomcat
Puis il y a trois étapes :
dans le server.xml
<Context path="/Le_Contexte" reloadable="true" debug="0"
docBase="Le_DocBase" workDir="Le_workDir">
<Ressource name="jdbc/Le_Contexte" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/Le_Contexte">
<parameter>
<name>user</name>
<value>Le_Login_SGBD</value>
</parameter>
<parameter>
<name>password</name>
<value>Le_Password_SGBD</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>Le_Driver_SGBD</value>
</parameter>
<parameter>
<name>url</name>
<value>L_URL_Connection</value>
</parameter>
</ResourceParams>
</Context>
Puis dans le web.xml il faut déclarer la ressource après la section <servlet-mapping> :
<resource-ref>
<description>reference a la ressource BDD pour le pool</description>
<res-ref-name>jdbc/Le_Contexte</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Enfin dans la méthode init de la servlet, il faut recupèrer la source de données
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource) envCtx.lookup("jdbc/Le_Contexte");
} catch (Exception e) {
//Gestion de l'erreur
}
sachant que ds est une variable d'instance de type DataSource.
Quand on a besoin de l'accès a la base de données, on fait:
Connection conn=ds.getConnection();
ne pas oublier de libérer avec un close après.
On peut aussi préciser dans le serveur xml, le nombre de connection que l'on veut dans le pool (nb max, nb min, nombre en attente)
Attention! Bien que cette FAQ mentionne cette possibilité, mettre la balise <context/> dans server.xml est fortement déconseillé depuis tomcat 5.0! Préférez l'utilisation d'un fichier context autonome.
Pour en savoir plus sur la gestion d'un pool de connexion sous Tomcat
Voici un exemple des lignes à rajouter dans le fichier conf/server.xml :
<Context path="/webapp1" docBase="webapps/webapp1" crossContext="true"
debug="0" reloadable="true">
</Context>
<Context path="/webapp2" docBase="webapps/webapp2" crossContext="true"
debug="0" reloadable="true">
</Context>
Ne pas oublir d'inclure dans le <Context> l'attribut :
crossContext="true"
Ensuite au niveau de la servlet on accède à la seconde webapp de la manière suivante :
ServletContext myContext = this.getServletContext();
ServletContext otherContext = myContext.getContext("/webapp1");
Depuis Tomcat 5.0, bien que ce soit toujours possible, il est déconseillé de mettre la balise <context> dans le fichier server.xml. Dans la mesure du possible, il est bien plus prudent de gérer des fichiers context autonome.
Dans le fichier web.xml du répertoire WEB-INF lors de la déclaration du servlet, rajouter la ligne:
<load-on-startup>1</load-on-startup>
Exemple:
<servlet>
<servlet-name>Controller</servlet-name>
<display-name>Controller</display-name>
<servlet-class>com.company.Controller</servlet-class>
<init-param>
<param-name>index</param-name>
<param-value>/index.jsp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Ces messages sont composés de deux parties. Pour débugger il faut regarder la deuxieme partie qui commence après :
root cause
Ou enore le message
cause mere
L'erreur est alors indiquée sous la forme d'une exception.
Afin de pouvoir créer un compte pour pouvoir accèder à l'interface de gestion du conteneur Web (afin de pouvoir retirer les applications déployées par exemple), il vous suffit d'accèder directement à ./conf/tomcat-users.xml.
De base le fichier se présente ainsi :
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
</tomcat-users>
Dès lors, il nous suffit de déclarer le rôle manager :
<role rolename="manager"/>
Enfin, nous pouvons ajouter un utilisateur :
<user username="adminTomcat" password="admin" roles="manager"/>
Au final, notre fichier ressemblera à ceci :
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<user username="adminTomcat" password="admin" roles="manager"/>
</tomcat-users>
Suite à ça, vous pourrez vous authentifier sous Tomcat afin de pouvoir gérer votre conteneur de servlets.
Il suffit tout simplement de rajouter l'option suivante :
-Djava.library.path=<chemin vers DLL>
dans la variable d'environnement TOMCAT_OPTS.


















