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 :

Arrêt lors d'un appel RPC


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Par défaut Arrêt lors d'un appel RPC
    Bonjour tout le monde,

    J'utilise le sdk 2.3.0 pour eclipse 3.7.

    Je me trouve face à un problème qui m'échappe complétement, lors de l'appel d'une méthode de service, celle-ci ne renvoie rien et stop le traitement en cours. Même en commentant tout le traitement de cette méthode coté serveur et en renvoyant null, cela engendre le même résultat.

    Voici le code de la classe faisant l'appel de cette méthode:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.user.client.Window;
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.client.ui.Composite;
    import com.google.gwt.user.client.ui.Label;
    import com.google.gwt.user.client.ui.VerticalPanel;
     
    public class Conference extends Composite{
     
    	IHMConference parent;
    	GreetingServiceAsync auth = GWT.create(GreetingService.class);
    	AsyncCallback<List<User>> callback;
    	VerticalPanel vp;
    	List<User> ListUser;
     
    	Conference(IHMConference p){
    		parent = p;
    		vp = new VerticalPanel();
    		Label title = new Label("Ma conférence");
    		title.addStyleName("testLabel");
    		vp.add(title);
    		Window.alert(parent.op.getDisplayName());
    		try{
    			auth.getConferenceParticipant(parent.op.getDisplayName(),callback);// LA METHODE EN QUESTION !!!!
    		}catch(Exception e){
    			e.printStackTrace();
    		}
     
    		callback = new AsyncCallback<List<User>>(){
    			public void onSuccess(List<User> L){
    				Window.alert("Requête réussie!");
    				ListUser = new ArrayList<User>(L);
    				parcoursListe();
    				parent.AfficherConference();
    			}
     
    			public void onFailure(Throwable caught) {
    				// TODO Auto-generated method stub
    				Window.alert(caught.getMessage());
    			}
    		};
     
    		this.initWidget(vp);
    	}
     
     
    	private void parcoursListe(){
    		Label label;
    		List<User> maList = ListUser;
    		for (User user : maList) {
    			label = new Label(user.getLogin()+" "+user.getScriptId().toString());
    			label.addStyleName("testLabel");
    			vp.add(label);
    		}
     
    	}
     
    }
    le code de l'interface service coté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @RemoteServiceRelativePath("greet")
    public interface GreetingService extends RemoteService {
    	public Boolean registeration(String login, String password, String displayName, String mail, String Ip, String numeroTelephone);
    	public User authentication(String a, String b) throws UserNotFoundException;
    	public User change(User b);
    	public List<User> getConferenceParticipant(String displayName);
    }
    le code de l'interface serviceAsync coté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public interface GreetingServiceAsync {
    	public void registeration(String login, String password, String displayName, String mail, String Ip, String numeroTelephone, AsyncCallback<Boolean> callback);
    	public void authentication(String a, String b, AsyncCallback<User> callback);
    	public void change(User a, AsyncCallback<User> callback);
    	public void getConferenceParticipant(String displayName, AsyncCallback<List<User>> callback);
    }
    Coté server le code de l'implémentation du service:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public class GreetingServiceImpl extends RemoteServiceServlet implements
    		GreetingService {
     
     
    	/**
             * Escape an html string. Escaping data received from the client helps to
             * prevent cross-site script vulnerabilities.
             * 
             * @param html the html string to escape
             * @return the escaped string
             */
     
    	@Override
    	public User authentication(String a, String b) throws UserNotFoundException {
    		// TODO Auto-generated method stub
    		return ServiceFactory.getServiceFactory().getAuthentificationService().authentifier(a, b);
    	}
     
    	@Override
    	public User change(User b) {
    		ServiceFactory.getServiceFactory().getAuthentificationService().modifierUser(b);
    		try {
    			return ServiceFactory.getServiceFactory().getAuthentificationService().authentifier(b.getLogin(), b.getPassword());
    		} catch (UserNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return null;
    		}
    	}
     
    	@Override
    	public Boolean registeration(String login, String password, String displayName, String mail, String Ip, String numeroTelephone) {
    		// TODO Auto-generated method stub
    		return ServiceFactory.getServiceFactory().getRegisterationService().register(login,password,displayName,mail,Ip,numeroTelephone);
    	}
     
    	@Override
    	public List<User> getConferenceParticipant(String displayName) {
     
              return ServiceFactory.getServiceFactory().getConferenceService().getParticipant(displayName);
    	}
    }
    Je ne pense pas nécessaire de vous rajouter le code du serviceFactory ainsi que de l'interface ConferenceService car ils sont simples.

    Voici la classe dans laquelle est implémentée la méthode fautive je pense:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public class MockConferenceService implements ConferenceService {
     
    	private static Connection con;
    	protected PreparedStatement stmt;
    	List<User> ListUser;
    	private Map<String, Long> participant = new HashMap<String, Long>();
     
    	MockConferenceService(){
     
    		try{
    			Class.forName("com.mysql.jdbc.Driver");
    			con = DriverManager.getConnection("jdbc:mysql://*******","***","*****");
    		}
    		catch(SQLException e){
    			e.printStackTrace();
    		}
    		catch(Exception e){
    			System.out.println(e);
    		}
    		ListUser = new ArrayList<User>();
    	}
     
    	@Override
    	public List<User> getParticipant(String displayName){
    		try{
    			if(con.isClosed()){
    				Class.forName("com.mysql.jdbc.Driver");
    				con = DriverManager.getConnection("jdbc:mysql://********","****","*****");
    			}
    		}
    		catch(SQLException e){
    			e.printStackTrace();
    		}
    		catch(Exception e){
    			System.out.println(e);
    		}
     
    		try {
    			stmt = con.prepareStatement("Select Confname from Participant where DisplayName=?");
    			stmt.setString(1, displayName);
    			ResultSet rs = stmt.executeQuery();
    			rs.first();
    			int Confname = rs.getInt("Confname");
     
     
    			stmt = con.prepareStatement("Select * from Participant where Confname=?");
    			stmt.setInt(1, Confname);
    			rs = stmt.executeQuery();
     
    			while(rs.next()){
    				this.participant.put(rs.getString("displayName"), rs.getLong("ScriptId"));
    			}
     
    			Set<Map.Entry<String,Long>> set = participant.entrySet();
    			stmt = con.prepareStatement("Select * from Account where DisplayName=?");
     
    			for(Map.Entry<String, Long> itr: set){
    				stmt.setString(1, itr.getKey());
    				rs = stmt.executeQuery();
    				rs.first();
    				this.ListUser.add(new User(rs.getString("Name"),rs.getString("Password"),rs.getString("Mail"),rs.getString("DisplayName"), itr.getValue()));
    			}
    			rs.close();
    			stmt.close();
    			con.close();
    			return ListUser;
    		}catch (SQLException e) {
    			e.printStackTrace();	
    		}
     
    			return null;
    	}
     
     
    }
    Je tiens à vous rappeler que j'ai commenté tout le traitement de la méthode en ne laissant que le return null et que le résultat était le même.

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Bonjour,

    As-tu essayé le mode DEBUG pas à pas pour voir d'où venait le problème ?
    Et quand tu dis, ma méthode de service ne renvoie rien, qu'entends-tu par là ?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Par défaut
    Bonjour,

    oui j'ai lancé le mode DEBUG pour voir quelles méthodes étaient exécutées et ils se trouvent que lors de l'appel de la méthode getConferenceParticipant qui est une méthode de GreetingService, on n'atteint jamais GreetingServiceImpl coté serveur.

    Quand je disais que ça ne renvoyait rien, c est que l'application GWT continue de tourner alors que j'ai pas d'exceptions et je ne peux plus lancer aucune autre action dépendant d'un service.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Par défaut
    En mode DEBUG, le programme lance une exception de type InvocationTargetException dans la classe MethodDispatch sur la ligne de commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = method.invoke(jthis, args);
    Cette classe appartient au package com.google.gwt.dev.shell.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Par défaut
    Est-ce que tu as réussi à faire fonctionner l'exemple de base?
    Est-ce que ta servlet "greet" est bien déclarée dans ton web.xml?
    Tu as essayé de mettre l'instentiation de ton callback avant le bloc try?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Par défaut
    Je viens de trouver la source du problème:

    J'ai créer un bouton et j'ai mis l'appel a la méthode async dans la méthode onClick().

    Apparemment le fait d'avoir l'appel à la méthode async dans le constructeur de la classe Conference engendrait le problème.

    Merci à ceux qui ont pris le temps de lire ce sujet et/ou d'y répondre.

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

Discussions similaires

  1. Erreur lors d'un appel RPC en utilisant gwt-sl
    Par riadhhwajdii dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 23/02/2011, 16h14
  2. problème lors d'un appel rpc
    Par jomajo dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 04/02/2011, 14h32
  3. WMI Problème RPC lors d'un appel de fonction
    Par arsenik dans le forum Langage
    Réponses: 1
    Dernier message: 02/11/2006, 13h10
  4. Flash lors de l'appel d'un état Crystal report 7
    Par IADJOFOGUE dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/05/2005, 11h10
  5. Erreur lors de l'appel d'un page ASP
    Par poirier dans le forum ASP
    Réponses: 2
    Dernier message: 27/08/2004, 15h17

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