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

Flex Discussion :

appel des méthodes d'un service via BlazeDS


Sujet :

Flex

  1. #1
    Membre averti Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 301
    Points
    301
    Par défaut appel des méthodes d'un service via BlazeDS
    bonjour,

    je suis arrivé à appeler un méthode déclaré dans une classe service , cette méthode retourne un String.

    Maintenant j'utilise une liste des méthodes, un message d'erreur s'affiche en indiquant que c'est n'est pas une fonction Flash

    dans la partie script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private function doCall():void{
    // cette instruction retourne le nom de l'utilisateur connecté à l'application serveur actuellement.
    myServiceDest.getSessionBean().getuserInSession().getConnectUser().getFirstName();
    }

    Le service est bien configuré et déclaré dans le fichier remoting-config.xml
    la déclaration de service comme RemoteObject est comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <mx:RemoteObject id="myServiceDest" destination="Myservice">
    <mx:method name="getSessionBean" result="onresult(event)" fault="onFault(event)"/>
    </mx:remoteObject>
    l'exception afficher par serveur tomcat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [BlazeDS]Exception occurred during serialization: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
    Est ce que vous pouvez m'aider à trouver la bonne démarche pour afficher ce simple attribut firstName ? et merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Points : 156
    Points
    156
    Par défaut
    Hello,

    Alors deux choses :
    La première, quelles genre de méthode sont getuserInSession(), getConnectUser() et getFirstName() ? j'imagine que ce sont des méthodes java ?
    Mais alors, à moins que quelquechose ne m'échappe, je ne vois pas comment tu pourrais les invoquer directement.
    En fait, tu devrais faire coté java une méthode "getFirstName()" et c'est directement elle qui va faire getSessionBean().getuserInSession().getConnectUser().getFirstName().
    Et ainsi dans ton remoteObject tu auras
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <mx:RemoteObject id="myServiceDest" destination="Myservice">
    <mx:method name="getFirstName" result="onresult(event)" fault="onFault(event)"/>
    </mx:remoteObject>
    et dans ton actionscript

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private function doCall():void{
    // cette instruction retourne le nom de l'utilisateur connecté à l'application serveur actuellement.
    myServiceDest.getFirstName();
    }
    La seconde chose c'est qu'il semble que l'une de tes méthodes tire un objet via hibernate (l'objet utilisateur ?), dont des attributs sont déclarés en Lazy. Or, pour le transfert des données vers le client, blazeds serialize les objets et font donc des 'get' sur les propriétés. Probleme : a ce moment il n'y a plus de contexte hibernate et donc la tentative de get hibernate sur l'attribut serialisé échoue. Solution : tout passer en EAGER (mais c'est pas forcément souhaitable faut voir le volume de données), ou alors se tourner vers les solutions qui permettent de coupler Flex à spring (mais cela se trouve plutôt du coté de graniteds que de blazeds me semble-t-il).

    Voilà, espérant t'avoir aider.
    Charles.

  3. #3
    Membre averti Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 301
    Points
    301
    Par défaut
    merci beaucoup pour votre retours
    Probleme : a ce moment il n'y a plus de contexte hibernate et donc la tentative de get hibernate sur l'attribut serialisé échoue. Solution : tout passer en EAGER (mais c'est pas forcément souhaitable faut voir le volume de données), ou alors se tourner vers les solutions qui permettent de coupler Flex à spring (mais cela se trouve plutôt du coté de graniteds que de blazeds me semble-t-il).
    En faite c'est vrai un problème de LazyLoading lors de l'utilsation de BlazeDS et j'ai commencé à chercher coté GraniteDS

    Deuxième chose :
    La première, quelles genre de méthode sont getuserInSession(), getConnectUser() et getFirstName() ? j'imagine que ce sont des méthodes java ?
    Mais alors, à moins que quelquechose ne m'échappe, je ne vois pas comment tu pourrais les invoquer directement.
    En fait, tu devrais faire coté java une méthode "getFirstName()" et c'est directement elle qui va faire getSessionBean().getuserInSession().getConnectUser().getFirstName().
    oui ces sont des fonctions JAVA dans l'application serveur, mais normalement je dois pas ajouter des méthodes dans les classes services. c'est un code confidentiel, est ce que c'est possible d'obtenir le firstName sans ajouter une nouvelle méthode soit disant un nouveau services. Peut être il y a une autre façon d'appeler ce service dans les classes AS3 ??

    et merci d'avance.

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Salut,

    Tu peux utiliser des AsyncToken par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     public function getFirstName(responder:IResponder):void {
            var token:AsyncToken = myServiceDest.getOperation('getfirstName').send();
            token.addResponder(responder);
        }
    Tu peux passer en paramètre une classe qui implemente IResponder. Dans cette classe tu pourras implémenter les fonctions Result et Fault.
    N'oubliez pas avant de poster :

Discussions similaires

  1. Appeler des méthodes Java dans javascript
    Par Kyo-AzN dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2008, 20h19
  2. Appel des méthodes de fermetures
    Par Dasson dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/05/2008, 09h39
  3. Problème d'appel des méthodes OpenGL
    Par choko83 dans le forum OpenGL
    Réponses: 5
    Dernier message: 24/04/2008, 10h02
  4. probléme dans l'appel des méthodes
    Par saraenim dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/04/2008, 09h20
  5. appel des méthodes init,start?
    Par schwarzy2 dans le forum JBuilder
    Réponses: 7
    Dernier message: 13/06/2007, 08h59

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