Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flex
Flex Forum d'entraide sur la programmation Adobe Flex : applications Internet riches (RIA)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2011, 19h02   #1
Membre actif
 
Avatar de clubist
 
Étudiant
Inscription : février 2008
Messages : 201
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 201
Points : 153
Points : 153
Envoyer un message via MSN à clubist
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 :
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 :
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 :
[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.
clubist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 00h28   #2
Membre habitué
 
Inscription : avril 2010
Messages : 124
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 124
Points : 135
Points : 135
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 :
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 :
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.
clemoigno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 12h16   #3
Membre actif
 
Avatar de clubist
 
Étudiant
Inscription : février 2008
Messages : 201
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 201
Points : 153
Points : 153
Envoyer un message via MSN à clubist
merci beaucoup pour votre retours
Citation:
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 :
Citation:
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.
clubist est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 10h31   #4
Modérateur
 
Homme
Consultant Flex / Java
Inscription : novembre 2008
Messages : 452
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Luxembourg

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

Informations forums :
Inscription : novembre 2008
Messages : 452
Points : 639
Points : 639
Salut,

Tu peux utiliser des AsyncToken par exemple :

Code :
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 :
et bien sûr la doc Flex
Krazymins est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h36.


 
 
 
 
Partenaires

Hébergement Web