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

JOnAS Java Discussion :

Débutant avec JOnAS sous Eclipse


Sujet :

JOnAS Java

  1. #21
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2008
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2008
    Messages : 8 266
    Points : 14 819
    Points
    14 819
    Par défaut
    Il y une page JSP login.jsp, à l'intérieur il y a un formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="login" method="post" action="<%=request.getContextPath()%>/servlet/login">
    Dans la méthode doPost de la servlet login.
    On récupère les informations de la base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session.setAttribute("liste", liste);
    response.sendRedirect(contextPath + "/listrooms.jsp");
    Après on se retrouve dans listrooms.jsp et si on refresh la page aucune méthode de la servlet est appelé.

    Il faudrait donc que je ne fasse pas de sendRedirect et que dans doGet ou service j'affiche ma jsp ?

    C'est bon j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.getRequestDispatcher("/listrooms.jsp").forward(request, response);
    Effectivement maintenant j'ai l'url de la servlet dans la barre d'adresse.

    Ça fonctionne très bien, j'ai juste du créer une nouvelle servlet puisque la connexion et la récupération des infos sont séparé maintenant.

    =======================================================
    Jonas ne gère pas les Websocket, ça explique pourquoi je ne trouvais pas de documentation.

    Merci.
    Keith Flint 1969 - 2019

  2. #22
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2008
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2008
    Messages : 8 266
    Points : 14 819
    Points
    14 819
    Par défaut
    Je suis passé de Jonas à Glassfish pour avoir accès aux websockets.

    J'ai trouvé un exemple de chat qui utilise les websockets :
    https://blogs.oracle.com/arungupta/e...websocket_totd

    Je commence à comprendre le fonctionnement des websockets grâce à cet exemple.
    Par contre il ne me satisfait pas entièrement puisque quand quelqu'un écrit un message, le message est renvoyé à tout les peers et ils affichent le message.

    Avec ce système on ne peut pas récupérer les informations qui ce sont passé avant notre connexion.

    Est-ce qu'il est possible de faire une classe qui soit à la fois @WebServlet et @ServerEndpoint comme 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    @WebServlet (name = "tableau", urlPatterns = {"/servlet/tableau"})
    @ServerEndpoint("/websocket")
    public class TableauServlet extends HttpServlet{
    	@EJB
    	private TableauManager tableauManager;
     
    	@OnMessage
    	public void message(String message, Session client) throws IOException, EncodeException {
    		// Ajoute le message dans le ServletContext
    		// Envoie le message à tout les peers pour qu'ils l'affichent
        	}
     
    	@Override
    	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    		// Récupère le ServletContext :
                    ServletContext application = getServletContext();
                    // Récupère les messages qui sont dans le ServletContext
    		// Met tout les messages en attributs de requête puis forward la requête :
                    request.setAttribute("messages", messages);
                    request.getRequestDispatcher("/chat.jsp").forward(request, response);
    	}
     
    	@Override
    	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    	}
     
    }
    Si il est possible de faire ça je pourrai ajouter les messages dans le ServletContext.

    De cette manière lorsqu'on se rend à l'adresse de la servlet, elle récupère tout les messages, tout les utilisateurs connectés, toutes les formes dessinés, puis les forward au JSP qui les affiche.
    Quand quelqu'un se connecte, écrit un message, dessine une forme, on envoie le message à la websocket qui l'ajoute dans le ServletContext et qui l'envoie à tout les peers pour qu'il puisse mettre leur affichage à jour.

    Est-ce que c'est la bonne méthode à adopter ?
    Pourriez-vous me conseillez ?

    Merci.
    Au revoir.

    =================
    Edit : j'ai testé et il est impossible de récupérer le servletContext dans la websocket même si elle est aussi webservlet.

    On ne peut pas non plus utiliser l'EJB pour inscrire les informations dans la base de données.
    Keith Flint 1969 - 2019

  3. #23
    Membre éprouvé Avatar de scandinave
    Homme Profil pro
    Développeur Java, NodeJs/Angular
    Inscrit en
    mai 2009
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java, NodeJs/Angular

    Informations forums :
    Inscription : mai 2009
    Messages : 277
    Points : 912
    Points
    912
    Par défaut
    Je n'ai pas beaucoup d'expérience dans les websockets. Mais il me semble que tu ne doit pas passer par une servlet. Ta réponse doit être renvoyée via AJAX à ton script javascript sous format ( text, xml, json ... ) et c'est ton script Javascript qui va mettre à jour tes jsp.

    En gros tu as ceci comme cheminement :

    1. Le client se connecte
    2. Tu l'ajoute à la liste des peers
    3. Il dessine une forme
    4. Ton script JS récupère la forme dessinée et l'envoi via Ajax à ton serveur
    5. Ton serveur via websocket signale la modification aux autres peers qui récupèrent la forme via ajax.
    6. Chaque peer dessine la forme sur leur fenêtre.

  4. #24
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2008
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2008
    Messages : 8 266
    Points : 14 819
    Points
    14 819
    Par défaut
    Oui merci, mais avec cette solution, je ne peux pas récupérer les formes dessiner avant qu'un utilisateur se connecte, ni avoir la liste des utilisateurs connecté avant que l'utilisateur se connecte.
    Avec cette méthode il faudrait attendre que tout les membres soit connectés avant de commencer.

    De plus je ne peux pas entrer les données dans la base de données.
    L'objectif du projet c'est d'avoir une traçabilité.
    A chaque fois qu'un utilisateur fait une action j'aimerai la mettre dans la base de données, comme avec le timestamp j'aurai une traçabilité.
    Keith Flint 1969 - 2019

  5. #25
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2008
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2008
    Messages : 8 266
    Points : 14 819
    Points
    14 819
    Par défaut
    Bon alors ce n'est pas propre, mais vraisemblablement lorsque je met le ServletContext en static, j'y ai accès dans la WebSocket.
    Keith Flint 1969 - 2019

  6. #26
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2008
    Messages
    8 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2008
    Messages : 8 266
    Points : 14 819
    Points
    14 819
    Par défaut
    J'ai continué puisque ça fonctionne très bien.

    Maintenant j'ai un autre problème.
    J'arrive à dessiner une forme, à mettre les instructions dans un JsonObject, à envoyer le JsonObject à la WebSocket qui renvoi l'objet à tout les peers, les peers dessinent la forme grâce à l'objet.

    Côté WebSocket c'est bon.

    Le problème c'est qu'il faut aussi que les formes soient redessiné, quand j'actualise la Servlet.
    J'ai un tableau de Formes que je reçois dans la JSP, j'ai une function dans un fichier javascript qui permet de dessiner une forme depuis un JsonObject.

    Le problème c'est que je ne peux pas appeler de fonction javascript depuis Java, sauf en utilisant Rhino ou Direct Web Remoting il parait.
    Je vais peut être essayer de réécrire le code javascript nécessaire dans le JSP.

    Si vous avez une autre solution, merci de m'en faire part.

    ================================
    Bon ben du coup, j'ai écris les JsonObject de mon tableau dans une Div (display:none), après j'ai récupéré ça dans le .ws et je l'ai converti en JsonArray et voilà.

    J'ai vraiment plus le temps là faut que j'avance.
    En plus ça marche très bien.
    Keith Flint 1969 - 2019

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/05/2007, 16h47
  2. Connexion à une base de donnée avec swing sous eclipse
    Par kodo dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/04/2006, 11h03
  3. [VSS] Est ce possible de travailler avec VSS sous eclipse ?
    Par jlassira dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 07/03/2006, 17h53
  4. Problèmes avec Hibernate (sous Eclipse)
    Par Pierric dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/04/2005, 14h35
  5. [plugins][JOnAS]PB tutoriel EJB avec JOnAS et eclipse
    Par bicente_t dans le forum Eclipse Java
    Réponses: 17
    Dernier message: 30/07/2004, 09h08

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