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 :

Flex et J2EE (EJB)


Sujet :

Flex

  1. #1
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut Flex et J2EE (EJB)
    Bonjour à tous,
    Je viens de commencer L'apprentissage de Flex 3 pour faire une RIA pour une plateforme de travail collaboratif. Et donc je cherche comment intégrer Flex à mes EJB... Il y a plus ou moins d'articles sur le net concernant se sujet mais aucun n'est claire, net et précis quand à l'appelle et l'utilisation des EJB dans une application Flex

    Voila ben j'espère que d'autre on déjà eu le problème et seront m'aider

    PS : Peut être le début d'un topic
    PS2 : Petite précision la communication en Flex et Java devra être sécurisé (HTTPS ?)

    Merci d'avance de vos réponses

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    je suppose que tu as lu l'article de Peter Martin à ce sujet?

    1. Copy 'FlexEJBFactory.jar' to your 'WEB-INF/lib' folder.

    2. Edit 'WEB-INF/flex/services-config.xml' and add the following configuration:

    <factories>
    <factory id="ejb" class="com.adobe.ac.ejb.EJBFactory" />
    </factories>

    3. For a Remote object edit 'WEB-INF/flex/remoting-config.xml' and configure your
    destination as per the following example:

    <destination id="MyEJB">
    <properties>
    <factory>ejb</factory>
    <source>ejb/MyEJB</source>
    </properties>
    </destination>
    si tu utilises des ejb seulement locaux ca devrait suffir sinon tu as la modif de Ryan Norris qui supportes les remotes ejbs

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bon j'essaye depuis 2 jour de faire cette CHOSE sans résultat...
    Déjà on peut pas dire que Peter Martin malgré le travail conséquent qu'il a fournie soit généreux en explication .
    Donc je vous explique on j'en suis:
    - J'ai ajouter 'FlexEJBFactory.jar' dans mon répertoire 'WEB-INF/lib'.
    - J'ai ajouter la paragraphe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <factories>
    <factory id="ejb" class="com.adobe.ac.ejb.EJBFactory" />
    </factories>
    A mon fichier "WEB-INF/flex/services-config.xml'"
    - J'ai créer un projet EJB de test ou j'ai créé une interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package com.sms.EJB;
     
    import javax.ejb.Local;
     
    @Local
    public interface EjbTest {
     
    	public String getHello ();
    }
    Ainsi que sont implémentation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package com.sms.EJB.impl;
     
    import javax.ejb.Stateless;
     
    import com.sms.EJB.EjbTest;
     
    @Stateless
    public class EjbTestBean implements EjbTest {
     
    	public String getHello() {
    		return "Java is here !!!!";
    	}
    }
    - J'ajoute se paragraphe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <destination id="EjbTest">
            <properties>
              	<factory>ejb</factory>
                <source>ejb/EjbTestBean</source>
            </properties>
    	</destination>
    - Je modifie .mxml, pour rajouter:
    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
     
    <mx:Script>
            <![CDATA[
                            import mx.rpc.events.FaultEvent;
    			import mx.rpc.events.ResultEvent;
     
    			private function doCall():void{
    				// Appeler le service distant
    				roEJB.getHello();
    			}
     
     
    			private function onResult(event : ResultEvent):void{
    				// Afficher la réponse
    				Alert.show(event.result as String);
    			}
     
     
    			private function onFault(event : FaultEvent):void{
    				// Afficher le message d'erreur
    				Alert.show(event.fault.message);
    			}
     
            ]]>
        </mx:Script>
        <mx:RemoteObject id="roEJB" destination="EjbTest" result="onResult(event)" fault="onFault(event)"/>
    Ainsi que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:Button  label="Call" id="bCall" click="doCall()"/>
    - Je publie le tous,projet Flex (Créer avec BlazeDS) et projet EJB sur mon serveur Jboss et na marche pas :'(. Message d'erreur :
    faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost:8080/WebContent/messagebroker/amf''
    Ben voila je dois avouer que moi je sais pas trop quoi faire étant donné que je trouve bizarrement peu étoffer la config pour utiliser un EJB . De plus à première vu cette méthode n'est pas sécurisé étant donné quelle passe par HTTP ...
    Je pense qu'il serait vraiment utile de faire un exemple complet concret .

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    L'URL que Flex essaye d'acceder est elle bonne ? (http://localhost:8080/WebContent/messagebroker/amf)

    Le nom du contexte est bien WebContent ?

  5. #5
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Humm nan en effet je doute que l'url soit bon ...
    D'ailleurs en cherchant j'ai trouver aussi surement une piste pour sécurisé les transactions :
    (Dans le "services-config.xml")
    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
    <channels>
     
            <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
                <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
            </channel-definition>
     
            <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
                <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
                <properties>
                    <add-no-cache-headers>false</add-no-cache-headers>
                </properties>
            </channel-definition>
     
            ...
        </channels>
    et le "remoting-config.xml" :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <service id="remoting-service" 
        class="flex.messaging.services.RemotingService">
     
        <adapters>
            <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
        </adapters>
     
        <default-channels>
            <channel ref="my-secure-amf"/>
        </default-channels>
     
        <destination id="EjbTest">
            <properties>
              	<factory>ejb</factory>
                <source>ejb/EjbTestBean</source>
            </properties>
    	</destination>
     
    </service>
    Toujours dans ma recherche j'ai aussi trouvé sa http://code.google.com/p/dphibernate/ , vu que visiblement BlazeDS ne supposte pas le lasy loading et que moi je l'utilise pour mes Entités j'en aurai surement besoin!

    Mais étant donné que l'adresse "http://localhost:8080/WebContent/messagebroker/amf" est fausse que doit je mettre a la place ?

    Je rappelle que mon projet ejb se nomme "TestEjbFlex" que mon ejb est "com.sms.EJB.impl.EjbTestBean" implémentant "com.sms.EJB.EjbTest" et qu'il est déployé en local sur le même JBoss 4.2.2.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Pour sécuriser les transaction oui c'est ça il faut passer par le channel amfsecure.

    Pour le Lazy Loading effectivement ce n'est pas compatible, il faut transformer tes objets hibernate en DTO. Je ne sais pas ce que dphibernate vaut, je n'ai pas testé.

    Pour l'url, compiles-tu bien ton projet Flex avec l'option "-context-root TestEjbFlex" ?

  7. #7
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Il y a quelque chose que je pige pas la ....
    Je viens de faire la modification que tu ma conseiller dans Propriétés -> Flex Compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     -services "chemin_du_fichier_/services-config.xml" -locale en_US context-root TestEjbFlex"
    Mais voila quand j'appelle la méthode "doCall()" (méthode servant a faire l'appelle de la méthode de mon EJB) toujours la même erreur :
    faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost:8080/WebContent/messagebroker/amf''
    Je dois avouer que je suis perplexe car tous d'abord je suis toujours en HTTP ... et que l'url n'a absolument pas bougé !!
    Ah la la sa doit pas bien être compliqué de faire cela .. si ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    C'est bizarre, déjà moi quand j'ai pas l'option "-context-root context" ça fait une erreur de compile. C'est comme si ton services-config.xml n'était pas pris en compte.


    Sinon juste pour être sûr, tu as marqué "context-root context" (sans le tiret). C'est une faute de frappe en le mettant sur le forum ?

  9. #9
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Oui excuse pour la faute de frappe il y avait bien un tiret ><
    Enfaite c'est encore plus bizarre car dans un premier projet mettre l'argument passe, mais quand j'ai crée un 2ième projet Flex pour tester et que j'ai voulue mettre cette option sa à pas voulue passer ! Donc se que j'ai fais, c'est que j'ai mis dans Propriétés -> Web project Setting "TestEjbFlex" en context root, j'ai aussi mis "/TestEjbFlex" dans le context root dans Propriétés -> Flex server, et j'ai même mis le projet "TestEjbFlex" dans les dépendances de projet dans Propriété -> J2EE Module depencies. Et pourtant toujours la même erreur ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Ca a pas voulu passer ça veut dire quoi ? Tu as eu quoi comme erreur ?


    Et sinon tu crées quoi comme projet Flex à chaque fois ? Si tu as déjà un projet Java, le mieux est de se baser dessus, et rajouter une nature Flex au projet (clic droit sur le projet -> Flex Project Nature -> Add Flex Project Nature). Puis tu rajoutes ton code Flex.

  11. #11
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Eh bien une fois la modification faite (l'ajout de " -context-root TestEjbFlex" dans la ligne de compilation) le projet récupère une erreur (petite croix rouge dessus) et dans la view de Flex builder 3 "Problems" on peut voir :
    configuration variable 'compiler.context-root' must only be set once

    Pour créé un projet flex je vais dans File -> New -> Flex project, puis je choisi "J2EE" dans "Server application type", aprés je choisi mon serveur d'application (Jboss 4.2) j'indique le chemin de mon "BlazeDS" puis je termine.
    Je vois mal comment je pourrais rajouter une nature Flex à mon projet, étend donné que j'ai au final 2 projets : un projet EJB et un projet Web (Flex), et que se dernier est crée de la façon que j'ai expliquer juste avant.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Ah oui en sélectionnant LiveCycle Data Services etc ...

    Le message d'erreur indique que le context-root est déjà défini. En fait je pense qu'il est défini quand tu crées ton projet Flex de cette manière. WebContent est sûrement le contexte par défaut qu'il assigne. Par contre je n'ai jamais créé mes projets de cette façon donc je ne peut pas te dire où c'est configuré.

    Donc il faut soit chercher où Flex définit ça quand tu crées ton projet, soit faire comme moi, créer un projet Flex traditionnel et le configurer à la main, c'est tout aussi rapide et tu sais exactement ce que tu fais

  13. #13
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Donc enfaite l'erreur était une simple erreur du fait que Jboss et/ou Flex Builder n'avait pas bien refresh les nouvelles conf..... Mais de toute facon j'ai toujours le même genre d'erreur:
    faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost:8080/TestEjbFlex/messagebroker/amf''
    Je me me demande si déjà le port utiliser est le bon il me parait surprenant de passer par le port 8080 ! "messagebroker/amf" est définie ou ? il y a quelque chose qui colle pas ....

    Mais Sthocs a tu déjà fais une application flex qui appelai des EJBs ? Car Si oui tu pourrai m'expliquer la marche à suivre !!

    Merci en tous de se pencher sur mon cas !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Le port c'est bien celui de ton serveur non ? Ca dépend commet tu accèdes à ton application en fait, http ou https ?

    messagebroker/amf est définie lors du lancement du serveur par BlazeDS. Mais pour que cela se fasse, as-tu bien rajouté la configuration nécessaire dans ton web.xml ? C'est peut-être car tu as oublié de le faire que http://localhost:8080/TestEjbFlex/messagebroker/amf n'est pas accessible ?

    Non je n'ai pas fait d'application appelant des EJB, j'ai surtout travaillé avec spring mais c'est le même principe : Une application Java, une application Flex, et la communication avec BlazeDS avec une SpringFactory au lieu de l'EJBFactory.

  15. #15
    Membre du Club Avatar de Soronite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 82
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Excusez de la petite absence sur le post mais je voulais pas rester bloqué donc j'ai coder d'autre parties en attendant ...
    Mais en recherchant une autre solution car de toute évidence j'arrivais pas a m'en sortir avec celle-ci, j'ai trouver Granite DS qui est visiblement un alternative à Adobe LiveCycle Data Services spécialiser dans les technologies J2EE. Il permet l'appelle des EJB3, supporte le Lasy Loading et est optimisé pour le serveur d'application JBoss et le moteur de persistance Hibernate, ...

    Bref il est parfais apriori pour moi, j'ai déjà tester le sample EJB3 qui marche à merveille, je suis en train de tester dans mes propres projets, je vous tien au courant mais ça à l'aire prometteur .

    PS: Sa pourrait aussi t'intéresser Sthocs visiblement il y aussi un possibilité de faire marcher avec Spring

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 72
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Est-ce qu'il y aurait des retour sur GraniteDS ?
    pas de bogues ? çà s'integre bien au EJB ?

    Merci

  17. #17
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Salut,

    Une petite recherche sur le forum ?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  18. #18
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Points : 2 370
    Points
    2 370
    Par défaut
    Bonjour,
    j'ai le même problème.
    Un projet EJB + un projet Flex. Pas moyen d'appeler l'EJB.
    Quelqu'un a trouvé la solution ?

Discussions similaires

  1. Flex et Java / EJB
    Par longbeach dans le forum Flex
    Réponses: 1
    Dernier message: 26/09/2008, 10h16
  2. Flex et J2EE (EJB)
    Par Soronite dans le forum Flash
    Réponses: 1
    Dernier message: 01/07/2008, 13h14
  3. [MAVEN J2EE EJB] Archetype j2ee-simple
    Par BRAUKRIS dans le forum Maven
    Réponses: 2
    Dernier message: 12/07/2007, 14h35
  4. [Normes] versions de J2EE/EJB et Websphere
    Par 2510041 dans le forum Websphere
    Réponses: 1
    Dernier message: 19/09/2006, 12h34

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