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

GWT et Vaadin Java Discussion :

Pb // appel RPC


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 68
    Par défaut Pb // appel RPC
    Bonjour,

    je développe une application avec le framework GWT. J'ai déjà eu de nombreux problèmes que j'ai réussi à surmonter (et grâce à certains d'entre vous parfois )

    J'ai de nouveau un problème. J'utilise un appel RPC pour me connecter à une base de données MySQL. J'ai bien ajouté ce service dans le <mon_appli>.gwt.xml et lors de son appel sous IE j'ai l'url suivante qui est appelée : project.Application//servicesDistants et donc une page inexistante à cause du superbe // que je n'arrive pas à expliquer.

    Si quelqu'un a déjà été confronté à ce problème?

    Merci d'avance


  2. #2
    Membre éclairé

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Par défaut
    Bonjour,
    Un petit aperçu de ton <mon_appli>.gwt.xml et tes mappings de servlet peuvent nous aider.

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 68
    Par défaut
    En voici la totalité:

    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
    28
    29
    30
    31
    32
    33
     
    <module>
     
          <!-- Inherit the core Web Toolkit stuff.                        -->
          <inherits name='com.google.gwt.user.User'/>   
     
         <!-- Inherit the GWTExt Toolkit library configuration.	  -->
    	  <inherits name='com.gwtext.GwtExt' />
     
     
    	  <inherits name="com.google.gwt.i18n.I18N"/>
     
         <!-- <inherits name="com.google.gwt.user.theme.perso.Perso"/> -->
    	  <inherits name="com.google.gwt.user.theme.standard.Standard"/> 
    	  <!-- inherits name="com.google.gwt.user.theme.chrome.Chrome" /-->
    	  <!-- <inherits name="com.google.gwt.user.theme.dark.Dark"/> -->
     
    	 <!-- Available Services -->
     
    	 <servlet class="project.server.ServicesDistantsImpl" path="/servicesDistants"/>
     
     
          <!-- Specify the app entry point class.                         -->
          <entry-point class='project.client.Application'/>
     
          <!-- Specify the application specific style sheet.              -->
          <stylesheet src='Application.css' />
     
          <stylesheet src="js/ext/resources/css/ext-all.css" />
    	  <script src="js/ext/adapter/ext/ext-base.js" />
    	  <script src="js/ext/ext-all.js" />
     
    </module>
    Je n'ai pas fais de mapping dans le web.xml. Est ce obligatoire?


    Petite précision, mon interface a ce morceau de code :

    @RemoteServiceRelativePath("/servicesDistants")
    et ça marche ne mode hosted

  4. #4
    Membre éclairé

    Inscrit en
    Août 2002
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Août 2002
    Messages : 302
    Par défaut
    Non le mapping n'est pas obligatoire mais je vois vraiment pas d'où peut venir ton problème.

  5. #5
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 68
    Par défaut
    Ce n'est pas grave je vais patienter voir si d'autres ont eu ce problème. Merci quand même

  6. #6
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 68
    Par défaut
    J'ai résolu mon problème de '//' mais maintenant que j'ai la bonne URL, mon serveur me renvoi toujours une erreur 404...

    Je récapitule mon développement :

    - j'ai mon interface côté client (avec le @RemoteServiceRelativePath())

    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
    @RemoteServiceRelativePath("servicesDistants")
    public interface ServicesDistants extends RemoteService 
    	{
    	//connexion BDD avec retour si OK
    	public Boolean connexionBDD();
    	//execution requete avec retour sous forme d'une liste de tableau de String pour la liste des taches
    	public List<String[]> executionBDDtaches(String requete);
    	//execution requete avec retour d'un String qui comporte les droits de l'utilisateur loggé ou vide si pas ds bdd
    	public String executionBDDlogin(String requete);
    	//ferneture connexion BDD avec retour si OK
    	public Boolean fermetureBDD();
     
    	//enregistrement d'un nouveau groupe en base
    	public Boolean enregistrerGroupeBDD(String groupe);
    	//enregistrement d'un nouveau user en base
    	public Boolean enregistrerUserBDD(String login,String password, String nom, String prenom, String mail, String role);
    	//récupération liste de groupe
    	public List<String> recuperationGroupeBDD();
     
    	}
    - j'ai mon interface asynchrone côté client

    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
    public interface ServicesDistantsAsync 
    	{
    	//connexion base de données
    	public void connexionBDD(AsyncCallback<Boolean> callback);
    	//execution requete base de données
    	public void executionBDDtaches(String requete, AsyncCallback<List<String[]>> callback);
    	//execution requete avec retour d'un String qui comporte les droits de l'utilisateur loggé ou vide si pas ds bdd
    	public void executionBDDlogin(String requete,  AsyncCallback<String> callback);
    	//fermeture connexion base de données
    	public void fermetureBDD(AsyncCallback<Boolean> callback);
    	//enregistrement d'un nouveau groupe en base
    	public void enregistrerGroupeBDD (String groupe, AsyncCallback<Boolean> callback);
    	//enregistrement d'un nouveau user en base
    	public void enregistrerUserBDD(String login, String password, String nom, String prenom, String mail, String role, AsyncCallback<Boolean> callback);
    	//récupération liste de groupe
    	public void recuperationGroupeBDD(AsyncCallback<List<String>> callback);
     
    	}
    - j'ai l'implémentation côté serveur (que je vous épargne)

    - j'instancie bien une instance de mon service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public static ServicesDistantsAsync serviceDistant = null;
    	public ServicesDistantsAsync getServicesDistantsInstance() 
    		{
    	    if (serviceDistant == null) 
    	    	{
    	    	// Instantiate the service 
    	    	serviceDistant = (ServicesDistantsAsync) GWT.create(ServicesDistants.class);
    	    	((ServiceDefTarget)serviceDistant).setServiceEntryPoint( GWT.getModuleBaseURL() + "servicesDistants");
    	    	System.out.println(GWT.getModuleBaseURL() + "servicesDistants");
    	        }
    	    return serviceDistant;
    		}
    - j'ai ajouté la class et le path dans le <mon_appli>.gwt.xml

    Mon URL est bonne et je peux accéder à mon service en mode hosted. Mais erreur 404...

    Si quelqu'un a déjà eu ce problème.

    Merci

  7. #7
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Citation Envoyé par CcHhUu Voir le message
    Je n'ai pas fais de mapping dans le web.xml. Est ce obligatoire?
    Citation Envoyé par nanous
    Non le mapping n'est pas obligatoire mais je vois vraiment pas d'où peut venir ton problème.
    Tu m'étonnes que tu ne vois pas le problème !
    C'est obligatoire !
    Bon, je comprend quand même pourquoi tu dis cela alors explications :

    Avant GWT 1.6 :
    Les servlets des services RPC doivent être déclarés dans le fichier du module et ces déclarations servent à GWT pour le hosted mode.
    Aussi, si vous n'en mettez pas dans le web.xml, ce n'était dès lors pas obligatoire tant que l'application GWT n'était pas déployée !
    Pour Tomcat, je suis presque sûr à 99% que c'était obligatoire d'avoir le mapping des servlets dans son web.xml car une fois compilé (le fichier du module gwt.xml, on s'en tamponne)

    A partir de GWT 1.6 :
    Ils ont simplifié tous cela et comme on a une arborescence de war, il FAUT déclarer les servlets de services RPC dans le descripteur de déploiement (web.xml) et c'est dans le fichier du module que ce n'est pas obligatoire (si on en met, je me demande même s'il continue de s'en servir !?!)

  8. #8
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 68
    Par défaut
    Bonjour,

    J'ai bien ajouté le mapping dans le descripteur de déploiement mais j'ai toujours mon erreur 404 qui me dis que mon /servicesDistants n'est pas disponible...

    Voici le code de mon mapping et pour le reste je l'ai déjà posté au dessus.

    Je ne comprends vraiment pas qu'elle est mon problème.

    Merci pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <servlet>
        	<servlet-name>servicesDistants</servlet-name>
        	<servlet-class>project.server.ServicesDistantImpl</servlet-class>
        </servlet>
        <servlet-mapping>
       		<servlet-name>servicesDistants</servlet-name>
        	<url-pattern>/servicesDistants</url-pattern>
        </servlet-mapping>

  9. #9
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Si tu lis mon exemple entièrement (ok, il faut scroller pour voir mon web.xml), tu verras que ma servlet /login est préfixée par le nom de l'application, nom qui est indiqué dans l'attribut rename-to de mon module.

    Si tu n'indiques pas d'attribut rename-to, ce doit être le nom complet du module par défaut.
    Je te conseille de mettre un attribut rename-to et de préfixer ta servlet par ce nom. Regarde dans mon exemple (c'est "application").

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur GWT Appel RPC
    Par miya dans le forum GWT et Vaadin
    Réponses: 16
    Dernier message: 11/03/2010, 15h49
  2. Appel RPC impossible avec des StringBuffer ?
    Par M€lK!oR dans le forum GWT et Vaadin
    Réponses: 7
    Dernier message: 04/12/2009, 17h36
  3. Appels RPC RemoteObject en parallèle?
    Par ®om dans le forum Flex
    Réponses: 2
    Dernier message: 22/07/2009, 09h44
  4. Réponses: 6
    Dernier message: 30/12/2008, 19h44
  5. comment faire un appel RPC dans Command
    Par groupe dans le forum GWT et Vaadin
    Réponses: 7
    Dernier message: 27/06/2008, 11h36

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