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 :

GWT & J2SE 6


Sujet :

GWT et Vaadin Java

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    Comment faire un appel synchrone ?

    J'ai tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UserService service = (UserService) GWT.create(UserService.class);
    service.setAdmin(true);
    System.out.println(service.isAdmin());
    Sans succès !

    EDIT : ou synchronizer l'appel d'une méthode après l'autre.

  2. #22
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    bah tu fais le traitement dans la méthode onSuccess et tu mets un message d'attente en attendant...

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    Comme ceci par exemple ?

    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
    final UserServiceAsync service = UserService.Util.getInstance();
     
    service.setAdmin(true, new AsyncCallback() {
     
    	public void onFailure(Throwable caught) {
    	    // TODO Auto-generated method stub
     
    	}
     
    	public void onSuccess(Object result) {
    	    service.isAdmin(new AsyncCallback() {
    			public void onFailure(Throwable caught) {
    			    System.out.println("onFailure : " + caught.getMessage());
    			}
     
    			public void onSuccess(Object result) {
    			    System.out.println("onSuccess : " + result.toString());
    			}
    	    });
    	}
    });
    Ce qui est lourd avec cette solution c'est que si j'ai 25 méthodes a appeler, je vais devoir imbriquer 25 appel au service.

    N'y a t il pas moyen de créer directement un object UserService au lieu d'un UserServiceAsync ?

  4. #24
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    J'ai l'impression que tu n'as pas bien saisi la philosophie de gwt...

    Dis toi que ta partie cliente est du Javascript!!! Même si tu le développe en Java la finalité c'est du Javascript qui est donc exécuté sur le navigateur de ton utilisateur...

    Le serveur, c'est les servlets classiques, telles qu'on les connaît... donc quand tu fais un appel à une méthode de ton service, tu ouvres donc une requête, tu fais la demande à ton serveur qui te réponds... tout ça n'est pas immédiat... donc si tu veux faire du synchrone, ça reviens à de l'asynchrone en attendant le résultat...

    C'est pour ça que je ne vois en quoi ca te gène de créer des objets pour la partie cliente qui ont leur "équivalent" dans ton api... ce n'est pas forcement du copier/coller, ça te permets de choisir les fonctionnalités et les infos que tu veux faire transiter sur le réseau... et ca permets de limiter les appels serveurs...

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    Merci pour ces explications, je pense avoir bien mieux compris maintenant.
    D'ailleurs j'ai fais un petit test, j'aimerais savoir ce que tu en pense.

    * Partie cliente :
    UserProxy.java
    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
    public class UserProxy implements IsSerializable {
        private int id;
        private String username;
        private boolean admin;
     
        public int getId() {
    	return id;
        }
     
        public void setId(int id) {
    	this.id = id;
        }
     
        public String getUsername() {
    	return username;
        }
     
        public void setUsername(String username) {
    	this.username = username;
        }
     
        public boolean isAdmin() {
    	return admin;
        }
     
        public void setAdmin(boolean admin) {
    	this.admin = admin;
        }
     
        public UserProxy() {
     
        }
     
        public UserProxy(int id, String username, boolean admin) {
    	this.id = id;
    	this.username = username;
    	this.admin = admin;
        }
    }
    AuthenticationManagerService.java
    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
    public interface AuthenticationManagerService extends RemoteService {
        public UserProxy login(String username, String password);
     
        /**
         * Utility class for simplifying access to the instance of async service.
         */
        public static class Util {
    	private static AuthenticationManagerServiceAsync instance;
     
    	public static AuthenticationManagerServiceAsync getInstance() {
    	    if (instance == null) {
    		instance = (AuthenticationManagerServiceAsync) GWT.create(AuthenticationManagerService.class);
    		ServiceDefTarget target = (ServiceDefTarget) instance;
    		target.setServiceEntryPoint(GWT.getModuleBaseURL() + "AuthenticationManagerService");
    	    }
    	    return instance;
    	}
        }
    }
    AuthenticationManagerServiceAsync.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface AuthenticationManagerServiceAsync {
        public void login(String username, String password, AsyncCallback callback);
    }
    * Partie server :
    ProxyUtil.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ProxyUtil {
        public static UserProxy convertToUserProxy(User user) {
    	return new UserProxy(user.getId(), user.getUsername(), user.isAdmin());
        }
    }
    AuthenticationManagerServiceImpl.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class AuthenticationManagerServiceImpl extends RemoteServiceServlet implements AuthenticationManagerService {
        private static final long serialVersionUID = 1L;
     
        public UserProxy login(String username, String password) {
    	return ProxyUtil.convertToUserProxy(Gesnet.authenticationManager.login(username, password));
        }
    }
    REMARQUES : Les classes Gesnet et User sont dans un jar développé par ma société.

    Je pense que c'est la bonne méthode pour faire des remotes services même si j'aimerais avoir ton avis.

    Par contre appellant ce service via :
    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
    AuthenticationManagerServiceAsync service = AuthenticationManagerService.Util.getInstance();
    service.login(userCodeTextBox.getText(), passwordTextBox.getText(), new AsyncCallback() {
    	public void onFailure(Throwable caught) {
    	    caught.printStackTrace(System.err);
    	    gesnet.showSystemMessage(caught.getMessage(), "OK");
    	}
     
    	public void onSuccess(Object result) {
    	    if (result == null) {
    		gesnet.showSystemMessage(CONSTANTS.wrongUserNameLabel_label(), CONSTANTS.okButton_text());
    	    } else {
    		gesnet.setUser((UserProxy) result);
    		gesnet.showMainMenu();
    		gesnet.showToolbar();
    		gesnet.closeLoginWindow();
    	    }
    	}
    });
    J'obtient le message suivant : "The call failed on the server; see server log for details."

    Mais je n'ai rien dans le server log.

    J'ai afficher la pile d'execution et voila ce que j'obtiens :
    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
    com.google.gwt.user.client.rpc.InvocationException: The call failed on the server; see server log for details
    	at org.bss.gesnet.client.services.AuthenticationManagerService_Proxy$1.onCompletionImpl(transient source for org.bss.gesnet.client.services.AuthenticationManagerService_Proxy:64)
    	at org.bss.gesnet.client.services.AuthenticationManagerService_Proxy$1.onCompletionAndCatch(transient source for org.bss.gesnet.client.services.AuthenticationManagerService_Proxy:48)
    	at org.bss.gesnet.client.services.AuthenticationManagerService_Proxy$1.onCompletion(transient source for org.bss.gesnet.client.services.AuthenticationManagerService_Proxy:42)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at com.google.gwt.dev.shell.ie.IDispatchImpl.callMethod(IDispatchImpl.java:126)
    	at com.google.gwt.dev.shell.ie.IDispatchProxy.invoke(IDispatchProxy.java:150)
    	at com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:293)
    	at com.google.gwt.dev.shell.ie.IDispatchImpl.method6(IDispatchImpl.java:196)
    	at org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:117)
    	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
    	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1925)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
    	at com.google.gwt.dev.GWTShell.pumpEventLoop(GWTShell.java:689)
    	at com.google.gwt.dev.GWTShell.run(GWTShell.java:550)
    	at com.google.gwt.dev.GWTShell.main(GWTShell.java:321)

  6. #26
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    Mille excuse, j'oubliais de tester si l'objet envoyer a ProxyUtil.convertToUserProxy était null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class ProxyUtil {
        public static UserProxy convertToUserProxy(User user) {
    	if (user == null)
    	    return null;
     
    	return new UserProxy(user.getId(), user.getUsername(), user.isAdmin());
        }
    }

  7. #27
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    en gros tu reviens à ma proposition du départ...

  8. #28
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    C'est vrai sauf qu'il m a fallu 2 pages de post pour comprender :-)
    Merci pour tes réponses ;-)

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2007
    Messages : 201
    Par défaut
    Citation Envoyé par nezdeboeuf62 Voir le message
    je parse en entrée et en sortie des méthodes de ma servlet
    Peut-tu m'en dire plus à propos de cette servlet stp ?
    (Un petit exemple p-e)

    Qu'est-ce qui représente une servlet en GWT ?

  10. #30
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    RemoteServiceServlet hérite de HttpServlet...

    Donc par exemple ta classe AuthenticationManagerServiceImpl est une servlet...

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

Discussions similaires

  1. A propos de J2SE 1.5
    Par palacemusic dans le forum Langage
    Réponses: 117
    Dernier message: 18/09/2011, 22h13
  2. Présentation des nouveautés de Java 5.0 Tiger (J2SE 1.5)
    Par christopheJ dans le forum Langage
    Réponses: 43
    Dernier message: 30/09/2007, 17h38
  3. [debutant]Eclipse + j2se
    Par bucheron dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 06/05/2004, 17h10

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