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. #1
    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 GWT & J2SE 6
    Bonjour à tous,

    sur le site de Google Web Toolkit, ils spécifient qu'il faut un J2SE 1.4.2 ou une version plus ancienne.

    Est-ce vraiment impossible d'utiliser le J2SE 6 ?

    La librairie que j'ai créer avant de mettre en place GWT contient des trucs du style :
    * Enum
    * ArrayList<Integer>
    * ...

    Ca va me poser pas mal de problème si je dois repasser cette lib en version 1.4.2

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    GWT ne va pas au dessus de la 1.4 pour la partie cliente.
    Par contre pour la partie serveur tu peux utiliser ce que tu veux...

    D'ailleurs pour la partie cliente tu ne peux même pas utiliser tout le J2SE 1.4 juste les classes de ce lien JRE GWT

  3. #3
    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 ta réponse, je viens de tester tu as raison.

    J'ai une petite question !

    Comment faire pour créer un services avec une méthode qui retourne un type non primitif ?

    Exemple :
    * Partie cliente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public interface DemoService extends RemoteService {
        Category getCategory(Integer id);
    }
     
    public interface DemoServiceAsync {
        void getCategory(Integer id, AsyncCallback callback);
    }
    * Partie serveur :
    public class DemoServiceImpl extends RemoteServiceServlet implements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface DemoService extends RemoteService {
        Category getCategory(Integer id) {
            ...
        }
    }
    Ou dois-je mettre ma classe Category ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Category {
        ...
    }
    Dans les deux partie (client et serveur) je suppose. Comment faire pour ne pas faire de copier-coller de la classe ? Ce qui permet de ne pas devoir mettre la classe à jour de deux coté différent.

  4. #4
    Membre chevronné Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2003
    Messages : 457
    Par défaut
    Citation Envoyé par nezdeboeuf62 Voir le message
    GWT ne va pas au dessus de la 1.4 pour la partie cliente.
    Par contre pour la partie serveur tu peux utiliser ce que tu veux...

    D'ailleurs pour la partie cliente tu ne peux même pas utiliser tout le J2SE 1.4 juste les classes de ce lien JRE GWT
    Par contre tu peux très bien utiliser une JRE 1.6 mais sans utiliser les fonctionnalités/ classes de java 1.5 et 1.6. Donc pas de génériques, pas de classes, ni de méthodes qui n'existe pas en 1.4.

    A+

  5. #5
    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 cette précision !..

  6. #6
    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 gufra Voir le message
    Où dois-je mettre ma classe Category ?
    J'ai fais quelques tests, et je me suis rendu compte que ma classe Category doit se trouver dans le package client.

    C'est très mal fait puisque si j'utilise des classes d'un fichier jar extérieur, je ne pourrais jamais utiliser ses classes puisqu'elles ne font pas partie du package client.

    N'y t il pas un moyen pour mettre cette fameuse classe Category où on veut ?

  7. #7
    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
    J'ai une deuxième question.

    Y a t il moyen de configurer eclipse pour qu'il utilise le J2SE 1.4 pour la partie cliente et le J2SE 1.6 pour la partie serveur ?

  8. #8
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    Ce n'est pas forcément idiot, tout ce qui est dans les sous-package de client est "compilé" en javascript, il faut donc bien respecté certaines conventions...

    pour la première question :
    j'ai eu aussi à utiliser un framework exterieur, et pour m'en sortir je suis passé par des classes "proxy" qui sont "IsSerializable" donc affichable dans le client et manipulable sur le serveur, et je parse en entrée et en sortie des méthodes de ma servlet... Voilà c'est peut être pas très élégant mais ça marche assez bien.


    pour la seconde : si tu trouves je suis preneur

  9. #9
    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 suis passé par des classes "proxy" qui sont "IsSerializable" donc affichable dans le client et manipulable sur le serveur, et je parse en entrée et en sortie des méthodes de ma servlet
    Pourais-je avoir un petit exemple stp ?

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    Reprenons l'exemple de ta classe Category. supposons qu'elle se presente comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class Category(){
      int id;
      String lib
     
      public Category(){
       id=-1;
       lib="";
     }
     /* et apres les getters/setters et les methodes*/
    }
    Dans un sous package de client tu developpe une classe CategoryProxy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class CategoryProxy implements IsSerializable{
      int id;
      String lib
     
      public CategoryProxy(){
       id=-1;
       lib="";
     }
     /* et après les getters/setters */
    }
    Comme elle est dans client tu px "l'afficher" dans tes objets graphiques.
    Puis dans tes servlets tu passe une instance de CategoryProxy et tu la parse eventuellement en Category si tu as besoin...

    A bientot...

  11. #11
    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
    Aie !

    Cette méthode n'est pas bonne.

    La classe catégorie existera 2 fois :
    * Category
    * CategoryProxy (implements IsSerializable)

  12. #12
    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
    J'ai un petit problème.

    Lorsque j'essaie d'exécuter un projet Google Web Toolkit avec le J2SE 1.6, je n'est aucun problème.

    Par contre lorsque je veux utiliser le J2SE 1.4 j'obtiens :

    * Java Virtual Machine Launcher : Fatal exception occurred. Program will exit

    * java.lang.NoClassDefFoundError
    at org.apache.catalina.core.StandardService.initialize(StandardService.java:588)
    at org.apache.catalina.core.StandardEngine.init(StandardEngine.java:411)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:846)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.<init>(EmbeddedTomcatServer.java:237)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.start(EmbeddedTomcatServer.java:62)
    at com.google.gwt.dev.GWTShell.startUp(GWTShell.java:742)
    at com.google.gwt.dev.GWTShell.run(GWTShell.java:539)
    at com.google.gwt.dev.GWTShell.main(GWTShell.java:321)
    java.lang.NoClassDefFoundError
    at org.apache.catalina.logger.LoggerBase.createObjectName(LoggerBase.java:427)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1050)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:846)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.<init>(EmbeddedTomcatServer.java:237)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.start(EmbeddedTomcatServer.java:62)
    at com.google.gwt.dev.GWTShell.startUp(GWTShell.java:742)
    at com.google.gwt.dev.GWTShell.run(GWTShell.java:539)
    at com.google.gwt.dev.GWTShell.main(GWTShell.java:321)
    java.lang.NoClassDefFoundError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.apache.commons.modeler.modules.MbeansDescriptorsIntrospectionSource.class$(MbeansDescriptorsIntrospectionSource.java:85)
    at org.apache.commons.modeler.modules.MbeansDescriptorsIntrospectionSource.<clinit>(MbeansDescriptorsIntrospectionSource.java:153)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.apache.commons.modeler.Registry.getModelerSource(Registry.java:1005)
    at org.apache.commons.modeler.Registry.load(Registry.java:818)
    at org.apache.commons.modeler.Registry.loadDescriptors(Registry.java:931)
    at org.apache.commons.modeler.Registry.findManagedBean(Registry.java:719)
    at org.apache.commons.modeler.Registry.findManagedBean(Registry.java:1047)
    at org.apache.commons.modeler.Registry.registerComponent(Registry.java:859)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1052)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
    at org.apache.catalina.startup.Embedded.start(Embedded.java:846)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.<init>(EmbeddedTomcatServer.java:237)
    at com.google.gwt.dev.shell.tomcat.EmbeddedTomcatServer.start(EmbeddedTomcatServer.java:62)
    at com.google.gwt.dev.GWTShell.startUp(GWTShell.java:742)
    at com.google.gwt.dev.GWTShell.run(GWTShell.java:539)
    at com.google.gwt.dev.GWTShell.main(GWTShell.java:321)

  13. #13
    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 gufra Voir le message
    ma classe Category doit se trouver dans le package client.
    J'ai encore fais quelques recherches et je trouve ca abérrant qu'il faille changer nos classes de packages pour pouvoir être utiliser par le GWT.

    Je suppose qu'il doit exister une autre solution..

  14. #14
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    Citation Envoyé par gufra Voir le message
    J'ai encore fais quelques recherches et je trouve ca abérrant qu'il faille changer nos classes de packages pour pouvoir être utiliser par le GWT.

    Je suppose qu'il doit exister une autre solution..
    c'est parce que tout ce qui est dans client est "compilé" en javascript... on doit donc coller au exigences de leur compilo.

    Ce que je t'ai proposé n'est effectivement pas très élégant mais ça a un merite ça marche ;-)

    Après je t'ai mis un exemple simple, >Category et CategoryProxy ne doivent pas forcement être identique, tu px personnaliser les infos et/ou les méthodes que tu transite sur le réseau...

    mais si tu trouves autre chose n'hesites pas à faire signe

  15. #15
    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
    Voila ce qui me pose problème avec ta solution.

    Reprenons par exemple ma classe Category.

    Imaginons une méthode getNewsList() qui me retourne toutes les news contenues dans la catégorie en question. Il y a donc un accès à la base de données.

    Il faudrait aussi implémenter cette méthode dans notre classe CategoryProxy mais au lieu d'aller chercher les news directements dans la base de données il faudrais que je passe par un autre service, qui lui fait l'accès à la base de données et me retourne la liste des news d'une catégorie.

    En gros, tout les objets développés coté serveur, doivent être réécris coté client.

  16. #16
    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
    Voila une des solutions je pense :

    * UserService
    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
    public interface UserService extends RemoteService {
        public void setAdmin(boolean admin);
     
        public boolean isAdmin();
     
        /**
         * Utility class for simplifying access to the instance of async service.
         */
        public static class Util {
    	private static UserServiceAsync instance;
     
    	public static UserServiceAsync getInstance() {
    	    if (instance == null) {
    		instance = (UserServiceAsync) GWT.create(UserService.class);
    		ServiceDefTarget target = (ServiceDefTarget) instance;
    		target.setServiceEntryPoint(GWT.getModuleBaseURL() + "UserService");
    	    }
    	    return instance;
    	}
        }
    }
    * UserServiceAsync
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public interface UserServiceAsync {
        public void setAdmin(boolean admin, AsyncCallback callback);
     
        public void isAdmin(AsyncCallback callback);
    }
    * UserServiceImpl
    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
    public class UserServiceImpl extends RemoteServiceServlet implements UserService {
        private static final long serialVersionUID = 1L;
        private User user;
     
        public UserServiceImpl() {
    	user = new User();
        }
     
        public void setAdmin(boolean admin) {
    	user.setAdmin(admin);
        }
     
        public boolean isAdmin() {
    	return user.isAdmin();
        }
    }
    * UserProxy
    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
    public class UserProxy implements IsSerializable {
        private UserServiceAsync service;
     
        public UserProxy() {
    	service = UserService.Util.getInstance();
        }
     
        public void setAdmin(boolean admin) {
    	service.setAdmin(admin, null);
        }
     
        private boolean admin;
     
        public boolean isAdmin() {
    	service.isAdmin(new AsyncCallback() {
    	    public void onFailure(Throwable caught) {
    		// TODO Auto-generated method stub
    		System.out.println("isAdmin - error");
    	    }
     
    	    public void onSuccess(Object result) {
    		admin = ((Boolean) result).booleanValue();
    	    }
    	});
     
    	return admin;
        }
    }

  17. #17
    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
    Par contre je ne sais pas pkoi mais quand je l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		    UserServiceAsync service = UserService.Util.getInstance();
    		    service.setAdmin(true, null);
    		    service.isAdmin(new AsyncCallback() {
     
    			public void onFailure(Throwable caught) {
    			    System.out.println(caught.getMessage());
    			}
     
    			public void onSuccess(Object result) {
    			    System.out.println("onSuccess : " + result.toString());
    			}
    		    });
    Il me retourne parfois true et parfois false, mais jamais le même resultat !!!

  18. #18
    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
    Mais si dans la programmation je fais :
    1. service.setAdmin
    2. service.isAdmin


    Voila dans quel ordre le sytème les exécutent :
    1. UserServiceImpl::isAdmin
    2. UserServiceImpl::setAdmin(true)


    C'est a cause des appels asynchrones !
    Je suis entrain d'essayer de trouver une solution pour synchronizer tout ca.

  19. #19
    Membre éclairé
    Inscrit en
    Novembre 2005
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 240
    Par défaut
    je vois pas tres bien ce qu'il y a de fondemmentalement différent avec ce que je t'ai dit...

    Sinon, je ne connais pas le contexte de projet mais ta méthode isAdmin risque de te renvoyer faux quoi qu'il arrive... du moins la premiere fois ou tu l'appelle... et je ne pense pas que c'est ce que tu veux

    je m'explique :
    Il sagit d'appel asynchrone donc il fait l'appel et n'attends pas le résultat. Donc dans ta methode UserProxy.isAdmin() , la première fois ou tu l'appel, admin vaut forcement faux, sauf erreur de ma part.
    après tu fait service.isAdmin(); et tout de suite après tu renvoi admin.

    Comme je doute que le serveur réponde assez vite, donc tu renvoi admin avant le onSuccess(), il est toujours faux.


    EDIT : dsl je n'ai aps vu tes reponses, je suis rester trop longtemps sur la redaction du message

  20. #20
    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 vois pas tres bien ce qu'il y a de fondemmentalement différent avec ce que je t'ai dit...
    Toi tu recréais la classe Category par copier-coller en la renomant CategoryProxy et en la faisant implémenter IsSerializable.

    Moi ce que je propose c'est de :
    1. créer un service CategoryService dont les méthodes appel les méthode de la classe Category (qui ne fait pas spécialement partie de notre package GWT)
    2. créer une classe CategoryProxy qui appelle les services de CategoryService

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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