IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Glassfish et Payara Java Discussion :

[javamail session] Problème pour obtenir ma sessions javamail


Sujet :

Glassfish et Payara Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 34
    Points
    34
    Par défaut [javamail session] Problème pour obtenir ma sessions javamail
    Bonjour,

    J'utiliste Glassfish v2.1 et j'essaie actuellement de configurer les ressources javamail de glassfish pour envoyer des mails (et oui ! surprenant !^^).

    Pour cela j'ai tout d'abord créé une session Javamail sur ma console d'administration.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Nom 
    JNDI : mail/pleezu
    hote de messagerie : smtp.orange.fr
    utilisateur par défaut : ******@orange.fr
    adresse de retour par défaut : ******@orange.fr
    status : activé
    protocole de stockage : imap
    Classe de protocole de stockage : com.sun.mail.imap.IMAPStore
    Protocole de transport : smtp
    Classe de protocole de
    transport : com.sun.mail.smtp.SMTPTransport
     
    J'ai aussi ajouté 2 propriétés : 
     
    password : *********
    port : 25
    Ensuite, j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Mail {
     
        @Resource(type = Session.class, name = "mail/pleezuSession", mappedName = "mail/pleezu")
        Session session;
     
        public Mail(){}
        public void SendMail(){
     
            try {
                Message msg = new MimeMessage(session);
                msg.setSubject("sujet");
                msg.setSentDate(new Date());
                msg.setFrom();
                msg.setRecipients(Message.RecipientType.TO,
                   InternetAddress.parse("mon_mail@gmail.com", false));
                msg.setText("test");
     
                Transport.send(msg);
     
            } catch (Exception e) {
                e.printStackTrace();
            }
     
        }
    Et du coup à l'envoi du mail je me tape l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
      nested exception is:
            java.net.ConnectException: Connection refused: connect
    J'imagine que je n'arrive pas a récupérer les informations de ma session car le serveur essaie de se connecter au localhost plutôt qu'au serveur smtp d'orange.

    Que dois-je faire pour régler ce problème ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Salut

    Essaie de vérifier dans ton fichier hosts si tu n'as pas une entrée "127.0.0.1 <NOM_MACHINE>"

    Sur certaines machines Linux, le nom de la machine est renseigné dans le fichier "hosts" et lorsqu'on fait une requête vers le serveur Glassfish (avec les EJB via IIOP ou une requête JMS ou encore une requête JMX), il interprète n'importe quelle IP entrante comme "localhost".

    Si tu as une entrée comme ça dans le fichier, vire-là. Attention, ne vire pas l'entrée "127.0.0.1 localhost"

    Bonne réception.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Salut,

    Merci de ta réponse mais je suis sous Windows et il n'y a rien dans mon fichier host. Il me semble que mon problème vient de l'injection de la ressource.

    Personne pour m'aider ?

  4. #4
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    si c'était un problème d'injection du aurait un NullPointerException

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Il s'avère que ma session est null. Je l'ai testé.

    Helop

  6. #6
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777
    Par défaut
    que donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    asadmin list-jndi-entries
    ?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    asadmin> list-jndi-entries donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    asadmin> list-jndi-entries
    Entrées JNDI pour server au sein du contexte root :
    UserTransaction: com.sun.enterprise.distributedtx.UserTransactionImpl
    mail: com.sun.enterprise.naming.TransientContext
    jdbc: com.sun.enterprise.naming.TransientContext
    ejb: com.sun.enterprise.naming.TransientContext
    La commande list-jndi-entries a été correctement exécuée.
    Et sinon j'ai ca :
    asadmin> list-javamail-resources qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mail/pleezu
    La commande list-javamail-resources a été correctement exécutée.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Avril 2008
    Messages : 58
    Points : 34
    Points
    34
    Par défaut
    Bon j'ai changer les propriétés personnalisées.

    Le problème persiste puisque lorsque mon erreur est levée, je test la nullité de ma session et en effet celle-ci est nulle.

    J'ai lu ça sur le blog de Hilderberto mais j'avoue ne pas saisir ce qu'ils veulent dire par Container Managed Class :
    Anonymous said...

    i think the class UserAccountBsn has to be a container managed class to make the source from above runnable... In other classes, eg a very simple POJO without any further annotations, @Resource will only inject "null".
    October 14, 2010 1:45 PM


    Hildeberto Mendonça said...

    That's right. I forgot to mention this small detail. Just mentioning "EJB Session Bean" is not enough.
    October 14, 2010 5:52 PM
    Je verrai les problèmes de SSL lorsque j'arriverai a récupérer ma f***ing session

    Si vous pouviez m'éclairer ce serait super.

    Merci en tout cas pour vos réponses

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Points : 70
    Points
    70
    Par défaut
    Ca y est, j'ai compris ! Désolé car je ne l'avais pas vu tout de suite. Dans ton code, il manque l'annotation @Stateless :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Stateless
    public class Mail {
     
        @Resource(type = Session.class, name = "mail/pleezuSession", mappedName = "mail/pleezu")
        Session session;
     
        public Mail(){}
        public void SendMail(){
    (...)
    Pour info, Glassfish V2 est certifié Java EE 5. Dans Java EE 5, un EJB est un composant managé (comme le sont une servlet ou un JSF Managed Bean). Or, l'injection de dépendances ne fonctionne que si tes composants sont managés, i.e. dont le cycle de vie est géré par le conteneur (Web pour les servlets et EJB pour les EJBs). Un POJO, une simple classe Java ne peut se voir injecter quoi que ce soit, pas même une ressource ou un service du serveur d'applications (avec @Resource).

    Enfin, un EJB 3.0 (avec Java EE 5) nécessite obligatoirement une interface, ce qui signifie que ta classe doit ressembler à peu près à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    // Le code de l'interface
    public interface IMail {
        void sendMail();
    }
    
    // le code de la classe
    @Stateless
    public class Mail implements IMail {
     
        @Resource(type = Session.class, name = "mail/pleezuSession", mappedName = "mail/pleezu")
        Session session;
     
        public Mail(){}
    
        public void sendMail(){
    (...)
    Bon, ok, je sais, c'est dommage de devoir créer une interface en plus pour que ça marche. Sinon, tu peux essayer de migrer sur Glassfish V3 (la dernière version release en date est la 3.0.1) car Glassfish v3 est certifié Java EE 6. Dans ce cas, les EJB sont les EJB 3.1. Et là, c'est encore mieux car, tu n'as plus besoin de déclarer d'interface.

    Enfin, si vraiment tu n'as pas envie que ta classe Mail soit un EJB (i.e. qui soit annotée avec @Stateless ou @Stateful), il y a aussi CDI qui est apparu avec Java EE 6 --> la JSR 299 alias "Context & Dependency Injection". Dans ce cas, il suffit de déclarer un fichier vide nommé "beans.xml" (dans WEB-INF si ton appli est une Web App ou dans META-INF si ton appli est un module EJB-JAR). La présence de ce fichier permet d'alerter le serveur d'applications que ton appli utilise CDI. Dans ce cas, un simple POJO (ta classe mail non annotée) devient un simple composant managé, et alors l'injection de dépendance avec @Resource fonctionne sans modifier ton code de départ.

    Essaie avec ça et vérifie que ta Session Mail n'est plus null dans ce cas.

Discussions similaires

  1. Problème pour lancer une session après upgrade
    Par Elodie11 dans le forum Debian
    Réponses: 8
    Dernier message: 13/11/2013, 16h21
  2. [Data] Problème pour garder la session hibernate ouverte
    Par tiben78 dans le forum Spring
    Réponses: 1
    Dernier message: 05/05/2010, 09h58
  3. Réponses: 3
    Dernier message: 03/09/2007, 20h09
  4. Problème pour supprimer une session
    Par pierrot10 dans le forum Langage
    Réponses: 2
    Dernier message: 14/05/2007, 16h49
  5. [PDE] Problème pour obtenir un éditeur en lecture seule
    Par simsky dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 27/07/2005, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo