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 01/07/2008, 13h13   #1
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2008, 14h29   #2
Rédacteur/Modérateur
 
Avatar de Jim_Nastiq
 
Homme Jean-Marie Macé
Ingénieur consultant, leader Flex
Inscription : avril 2006
Messages : 2 196
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marie Macé
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur consultant, leader Flex
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 196
Points : 3 380
Points : 3 380
je suppose que tu as lu l'article de Peter Martin à ce sujet?

Citation:
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
Jim_Nastiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2008, 13h48   #3
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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 :
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 :
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 :
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 :
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 :
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 :
<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 :
Citation:
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 .
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 11h03   #4
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
L'URL que Flex essaye d'acceder est elle bonne ? (http://localhost:8080/WebContent/messagebroker/amf)

Le nom du contexte est bien WebContent ?
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 15h49   #5
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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 :
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 :
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.
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 17h52   #6
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
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" ?
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2008, 21h29   #7
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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 :
 -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 :
Citation:
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 ?
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 10h48   #8
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
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 ?
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 12h06   #9
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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 ...
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 15h09   #10
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
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.
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 16h37   #11
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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 :
Citation:
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.
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 19h04   #12
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
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
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2008, 22h41   #13
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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:
Citation:
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 !
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2008, 11h36   #14
Membre du Club
 
Inscription : mars 2007
Messages : 36
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 36
Points : 40
Points : 40
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.
Sthocs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2008, 10h30   #15
Futur Membre du Club
 
Avatar de Soronite
 
Inscription : août 2005
Messages : 82
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 82
Points : 19
Points : 19
Envoyer un message via MSN à Soronite
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
Soronite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2009, 03h48   #16
Futur Membre du Club
 
Inscription : juillet 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 72
Points : 19
Points : 19
Bonjour,

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

Merci
hynposat7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2009, 09h05   #17
Rédacteur/Modérateur
 
Avatar de Jim_Nastiq
 
Homme Jean-Marie Macé
Ingénieur consultant, leader Flex
Inscription : avril 2006
Messages : 2 196
Détails du profil
Informations personnelles :
Nom : Homme Jean-Marie Macé
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur consultant, leader Flex
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 196
Points : 3 380
Points : 3 380
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
Jim_Nastiq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 14h58   #18
Rédacteur/Modérateur
 
Avatar de longbeach
 
Inscription : avril 2003
Messages : 879
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : avril 2003
Messages : 879
Points : 2 114
Points : 2 114
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 ?
longbeach 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 03h29.


 
 
 
 
Partenaires

Hébergement Web