Posts tagged ‘tomcat’

HOWTO: configure Tomcat to send mails, using javamail

This article shows step by step a way to configure Apache Tomcat J2EE server to send emails.

You will need first a working Tomcat server of course, and a mail server. You can have it on your own machine, just like me, so the smtp server would be « localhost », or on another machine from which you can use smtp, for instance your Internet Service Provider smtp (generally smtp.nameofyourISP.com)

Step 1 : Install the right libraries:

Sending mails with tomcat require 2 librairie: the javamail API, and the Java Activation Framework (jaf).
Depending on your JDK /JRE version, you will need to place 1 or 2 files in your /catalina_home/commons/libs/ folder.
If you have a 1.6 java version (check with java -version) you will need only the mail.jar otherwise, you will need both mail.jar and activation.jar.

Important: you must not include these two files into your webapp, or you will get an almost wired error:
java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session

Let’s download the files:

javamail-1_4_1.zip

With JDK / JRE 1.6 it’s the only one you will need. With other versions, take also this file: java activation framework

Unzip these file (if needed, on a Debian system for instance, download the zip package: apt-get unzip), and move it to the appropriate catalina folder (don’t forget to stop tomat service before).

mv /home/your_username/javamail-1.4.1/mail.jar /your_tomcat_home/common/lib/

The same applies to the activaction.jar if needed.

2. Configure your webapp:

2 step to configure your webapp. First, edit the conext.xml, and declare you mail ressource to make it available:

<Resource auth="Container" mail.smtp.host="localhost" name="mail/NomDeLaRessource" type="javax.mail.Session"/>

Next, edit your web.xml file and declare your webapp using your mail resource:

<resource-ref>
<description>Votre description </description>
<res-ref-name>mail/NomDeLaRessource</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

3. Write the code

To test your configuration, here is a working sample code:

Session session = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup(« java:comp/env »);
session = (Session) envCtx.lookup(« mail/NomDeLaRessource »);

} catch (Exception ex) {
System.out.println(« lookup error »);
System.out.println( ex.getMessage());
}

Here is the code which actually send the mail:


Message message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(expediteur);
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress(destinataire);
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject(sujet);
message.setContent(corps, "text/html;charset=UTF-8");
Transport.send(message);
} catch (AddressException ex) {
System.out.println( ex.getMessage());
} catch (MessagingException ex) {
System.out.println( ex.getMessage());
}

The most convenient is to create a hepler method, with receiver adress, subject, body, etc…but that’s your work 🙂

Thanks goes to tomcat mailing list people, especially Chuck and Martin.

Références : tomcat.apache.org/

Publicités

26 septembre 2008 at 9 h 27 min 10 commentaires

Configurer Tomcat pour envoyer des mails

Cet article présente pas à pas une méthode pour configurer le serveur J2EE Tomcat afin de pouvoir envoyer des mails.

Vous aurez besoin au préalable d’un Tomcat installé, et d’un serveur de mail sortant (installé sur votre serveur, comme dans le cas de cet article, ou bien acceptant de relayer vos mail – par exemple le serveur SMTP de votre FAI mail.free.fr, mail.wanadoo.fr, etc…).

1 Installer les librairies de l’API JavaMail:

Il faut placer les fichiers mail.jar et activation.jar dans le dossier /catalina_home/commons/libs/.

J’insiste sur ce point: il est important de ne pas inclure ces 2 librairies dans votre webapp, sous peine d’avoir cette erreur assez peu explicite:

java.lang.ClassCastException: javax.mail.Session cannot be cast to javax.mail.Session

Nous allons donc télécharger ces deux librairies:

javamail-1_4_1.zip

Si vous utiliser le JDK 1.6 ou le JRE, vous n’auraez besoin que de javamail.

On dézippe l’archive fraichement utilisée (j’ai du télécharger le paquet unzip avec apt-get unzip, car gunzip ne prend en charge que les archives .gz), puis on place la librairie (n’oubliez pas de stopper le serveur avant).

mv /home/votre_username/javamail-1.4.1/mail.jar /opt/tomcat/common/lib/

Faire la même chose avec le fichier activation.jar si vous n’utiliser pas le JRE en version 6.

Si vous utilisez une version antérieure, vous aurez besoin également du Java Activation Framework:

2. Configurer la webapp:

La configuration s’effectue en deux étapes. Dans le fichier context.xml, on va déclarer la ressource avec cette ligne:

<Resource auth="Container" mail.smtp.host="localhost" name="mail/NomDeLaRessource" type="javax.mail.Session"/>

Ensuite, dans le fichier web.xml on va déclarer l’utilisation de la ressource afin qu’elle soit accessible par la webapp:

<resource-ref>
<description>Votre description </description>
<res-ref-name>mail/NomDeLaRessource</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

3. Ecrire le code

Pour accéder à la ressource qu’on vient de définir, il faut utiliser le code java suivant :

Session session = null;
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
session = (Session) envCtx.lookup("mail/NomDeLaRessource");

} catch (Exception ex) {
System.out.println("erreur au lookup");
System.out.println( ex.getMessage());
}

Ensuite, voici un exemple qui permet d’envoyer les messages:

Message message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(expediteur);
InternetAddress to[] = new InternetAddress[1];
to[0] = new InternetAddress(destinataire);
message.setRecipients(Message.RecipientType.TO, to);
message.setSubject(sujet);
message.setContent(corps, "text/html;charset=UTF-8");
Transport.send(message);
} catch (AddressException ex) {
System.out.println( ex.getMessage());
} catch (MessagingException ex) {
System.out.println( ex.getMessage());
}

Le plus pratique est de créer une fonction « helper » pour pouvoir envoyer des messages facilement, du type envoyerMessage(destinataires[],sujets[],corps[])… mais ce n’est pas l’objet de cet article.

Maintenant,votre Tomcat devrait être prêt pour envoyer des mails !

Références : tomcat.apache.org/
Tomcat mailing-list

26 septembre 2008 at 8 h 59 min 1 commentaire

Installer le connecteur mysql java sur un serveur Tomcat

Nous allons installer le support de mysql au serveur Tomcat.

Il est important de ne pas dupliquer l’installation du connecteur (ne pas inclure dans le code source s’il n’est pas inclus.

il suffit de copier le fichier jar dans le dossier catalina_home/common/libs

Ainsi on fait un:

wget http://mir2.ovh.net/ftp.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.6.tar.gz

puis tar -zxvf ./mysql-connector-java-5.1.6.tar.gz

et enfin mv ./mysql-connector-java-5.1.6.tar.gz /catalinahome/common/libs/

et ca devrait être bon 🙂 N’oubliez pas de remplacer catalina_home par votre propre répertoire d’installation de Tomcat bien entendu…

23 septembre 2008 at 19 h 33 min Laisser un commentaire

HOW-TO : Serveur Tomcat sur Debian, Apache en proxy avec AJP

Je vais tenter de détailler pas à pas l’installation d’un serveur applicatif Tomcat (pour exécuter des servlet donc), conjointement au serveur web Apache avec l’utilisation d’un connecteur AJP proxy.

Apache sera donc en proxy (utile pour les données statiques). On supposera qu’Apache 2.x est déja installé sur la machine (sinon un apt-get install apache2 fera certainement l’affaire, ce n’est pas l’objet de cet article).

Allez, on y va!

Premièrement nous aurons besoin:

– d’une machine virtuelle java

– des binaires du serveur Tomcat

– des binaires du connecteur mod_jk Nous utiliserons mod_proxy, plus récent, plus rapide !

Concernant les versions, un JRE 1.5 (le jdk complet n’est plus obligatoire) et un tomcat 5.5 seront suffisant pour nous. Tomcat 6 n’apporte pas de réelle valeur ajoutée a mes yeux, et la version 5.5 est toujours maintenue.

1. Installation de la JVM:

Pour la télécharger, cette ligne de commande fera l’affaire:
wget http://javadl.sun.com/webapps/download/AutoDL?BundleId=23103 (copiez collez l’adresse récupérée du site de sun pur éviter de recopier l’adresse a la main)
On rend l’archive exécutable avec;
chmod +x ~/jre-6u7-linux…[TAB pour autocompletion]
Puis on se place dans le dossier adéquat pour installer une JVM (pour moi ca sera /opt, hop!), on lit patiemment l’accord de licence, on accepte, et la JVM s’installe.

cd /opt

~/jre-6u7-linux…[TAB pour autocompletion]

On va maintenant définir les variables d’environnement. On ouvre avec vim le fichier /etc/environment et on ajoute la ligne:

JRE_HOME= »/opt/jre1.6.0_07/ »

on peut egalement ajouter :/opt/jre1.6.0_07/bin a la variable PATH…

Testons dans le shell en tapant un petit java -version (après avoir démarré une nouvelle session pour prendre en compte les modifications).

2. Installation de Tomcat

On télécharge l’archive (veillez à bien prendre la dernière version, des mises à jour de sécurité importantes sont effectuées assez régulierement):
wget http://mirror.mkhelif.fr/apache/tomcat/tomcat-5/v5.5.27/bin/apache-tomcat-5.5.27.tar.gz
Se placer dans le répertoire /opt, et taper cette commande pour decompresser l’archive:

tar -zxvf ~/apache-tomcat-5.5.27.tar.gz

Créeons un utilisateur système tomcat afin de lancer le démon, et attribuer le propriétaire tomcat aux répertoires et sous-reps du serveur:

adduser tomcat
chown -R tomcat:tomcat /opt/apache-tomcat-5.5.27/

Pour plus de praticité, on va ajouter un lien symbolique histoire de racourcir le chemin…
ln -s /opt/apache-tomcat-5.5.27/ /opt/tomcat
Allez, on teste le tout: exit pour quitter root, su tomcat, puis /opt/tomcat/bin/start.sh

N’oubliez pas de rajouter :8080 (port par défaut de tomcat) après votre url pour vérifier que tomcat répond.

3 Lancement de tomcat

On va maintenant créer un script d’initialisation de tomcat qu’on pourra placer dans /etc/init.d/

Le script va etre très basique. Copiez collez ces instructions dans un fichier nommé tomcatd à placer dans /etc/init.d/

#!/bin/sh
TOMCAT_USER=tomcat
TOMCAT_PATH=/opt/tomcat
export JRE_HOME="/opt/jre1.6.0_07/"
export CLASSPATH="/opt/tomcat/lib/jsp-api.jar;/opt/tomcat/lib/servlet-api.jar"
start() {
echo -n "Starting Tomcat:  "
su $TOMCAT_USER -c $TOMCAT_PATH/bin/startup.sh
sleep 2
}
stop() {
echo -n "Stopping Tomcat: "
su $TOMCAT_USER -c $TOMCAT_PATH/bin/shutdown.sh
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: tomcat {start|stop|restart}"
exit
esac

Ensuite on rend le script executable : chmod 755 /etc/init.d/tomcatd
On va intégrer notre démon pour les runlevel 2/3/5 avec update-rc.d (n’oubliez pas les points qui terminent les commandes)
update-rc.d tomcatd start 42 2 3 5 . stop 31 0 6 .

4 Mise en place du connecteur (mod_jk mod_proxy) pour utiliser apache en frontend

Un proxy signifie qu’un serveur agit derrière un autre serveur. Apache httpd va donc jouer le role d’intermédiaire entre le client et notre conteneur de servlet. Il est indispensable de sécuriser Apache avant d’avtiver le mod_proxy, sous peine de permettre à n’importe qui d’accéder à internet depuis votre propre serveur!

Pour activer le proxy, il suffit de déclarer la directive globale activant l’utilisation du module éponyme (sur debian on va créer un fichier proxy.load qu’on placera dans /etc/mods-enabled/, pour les autres distrib, on écrira directement dans /etc/httpd/httpd.conf)

Les deux modules concernés sont mod_proxy et mod_proxy_ajp (pour activer le support du protocole apache j_serv).

LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_ajp_module /usr/lib/apache2/modules//mod_proxy_ajp.so

On va maitenant créer le fichier tomcat.site dans le dossier /etc/apache2/sites-availables/ puis créer un lien symbolique dans /etc/apache2/ avec cette comande

ln -s /etc/apache2/sites-availables/tomcat.site /etc/apache2/sites-enabled/

Voici le contenu de ce fiohier:

<VirtualHost *:80>

ServerName votre_sous_domaine.votre_domaine.votre_tld

# pour éviter que le proxy soit ouvert, et pour transmettre les véritables hostname à tomcat
ProxyRequests Off
ProxyPreserveHost On

ErrorLog /var/log/apache2/tomcat.error.log
CustomLog /var/log/apache2/tomcat.log combined

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass / ajp://localhost:8009/tomcat-docs/
ProxyPassReverse / ajp://localhost:8009/tomcat-docs/

</VirtualHost>

Il ne nous reste plus qu’à faire écouter Tomcat sur le port du conecteur AJP, et ce sera bon!

On va donc éditer le fichier server.xml, et vérifier que les lignes suivantes sont bien présentes:

<Connector port= »8009″ address= »127.0.0.1″ enableLookups= »false » redirectPort= »8443″ protocol= »AJP/1.3″ />
On pourra désactiver tous les autres connecteurs pour être sur que tomcat ne soit pas accessible sans passer par le frontend.

Pour plus de renseignements, je vous conseille la lecture des articles suivants sur ce même blog:
configurer correctement ses vhosts
épurer la configuration du server.xml de tomcat

21 septembre 2008 at 20 h 44 min 10 commentaires


Articles récents