Wednesday, 18 October 2006

Faire marcher l'envoi des e-mails avec Blojsom et JBoss—Première partie

JBoss

Récemment j'ai voulu configurer mon blog pour qu'on m'envoie un e-mail à chaque fois que quelqu'un y fait un commentaire. Cette fonctionnalité existe déjà dans Blojsom, mais sur mon déploiement il ne marchait pas correctement. Voici donc les étapes que j'ai suivi pour le faire marcher sur JBoss 4.0.4, au cas où quelqu'un d'autre serait bloqué avec le même problème.

D'abord il faut s'assurer que votre installation de JBoss est configurée correctement pour envoyer des e-mails. On peut configurer Blojsom à la main, mais ça sert à quoi d'avoir une serveur d'applications si on ne configure pas ses fonctionnalités pour que toutes vos applications puissent en bénéficier facilement?

Pour tester si l'envoi des e-mails marchait sur le serveur j'ai bricolé un petit .ear pour tester, avec Netbeans 5 Enterprise Pack ça peut se faire très rapidement, mais si vous me faites confiance vous pouvez utiliser le mien. Surtout ne laissez pas cet .ear déployé sur un serveur qui est ouvert à l'internet, sinon n'importe qui pourrait envoyé des e-mails à partir de votre serveur et vous serez vite blacklisté comme un spammeur!

JBoss configure le service mail par défaut avec les paramètres qui se trouvent dans $JBOSS_HOME/server/default/deploy/mail-service.xml (remplacer default par le nom de votre serveur s'il est différent), là vous mettez tous vos parametres de configuration, pareil que quand vous configurer un client mail (Thunderbird, Mail.app, etc.). Au lancement de JBoss, vous verrez dans le log si le service a pu demarré correctement, il sera mis à l'emplacement jndi java:/Mail.

C'est ici où ça peut vous confondre si vous ne le saviez pas. Toute adresse jndi qui commence par java:/ en JBoss est privée au serveur; vos applications ne peuvent pas le voir. Donc si vous essayer d'obtenir le service mail par java:/Mail, vous aurez une exception comme quoi c'est introuvable, alors que vous venez de vérifier que ça marchait! Dans vos applications, vous mettez l'adresse jndi que vous voulez, typiquement java:comp/env/mail/Mail (il faut que ça commence par java:comp/env/). A ce niveau-là, votre code est donc independent du serveur sur lequel il sera deployé—astucieux! C'est dans jboss-web.xml (jboss-jar.xml pour envoyer des e-mails à partir des EJB) que vous allez spécifier à quoi correspond l'adresse. En voici l'exemple:

<jboss-web>
    <resource-ref>
        <res-ref-name>mail/Mail</res-ref-name>
        <jndi-name>java:/Mail</jndi-name>
    </resource-ref>
</jboss-web>

(On omet le java:comp/env/ du "res-ref-name" car JBoss sait déjà que les adresses commencent avec ça.) Ce fichier sert donc de pont entre l'adresse indépendante de votre application d'un côté et l'adresse interne du serveur de l'autre. Si ça marche, nous savons que notre serveur J2EE est configuré correctement pour envoyer des e-mails. On est prêt maintenant à configurer Blojsom pour utiliser notre service e-mail ; j'expliquerai ça dans la seconde partie de cette article.

Posted by jon at 9:14 PM in Java 
 
« October »
SunMonTueWedThuFriSat
1234567
891011121314
15161718192021
22232425262728
293031    
       
 
Non enim id agimus ut exerceatur vox, sed ut exerceat.