Pour ceux d'entre vous qui seraient venus ici sans savoir, Flash Remoting est un outil permettant à Flash de converser avec des langages serveur (famille .Net, Java (J2EE), ColdFusion et PHP). Toutefois, le flash remoting sauce Macromedia n'est pas gratuit (comptez 1000$ pour une poignée de fichiers java), et il existe (chance) une alternative libre qui s'appelle openAMF
Dans ce tutoriel nous allons suivre toutes les étapes pour réaliser une première application toute bête (un Hello World) en flash remoting avec Java, en utilisant uniquement des technologies libres
En faveur de Java
En faveur de PHP
Le profil de l'application utilisant un serveur java plutot que PHP (encore qu'un combo soit possible) est une application pour grande entreprise ou pour un site où la charge peut êre élevée au niveau des appels serveur. Une web agency possédant un serveur dédié et des clients importants pourrait réfléchir à s'équiper. Dernière solution, vous êtes développeur AS2 pur, et vous en avez marre de jongler entre des langages qui ne se ressemblent pas :p
Chose à savoir sur Tomcat, c'est que son “document root” par défaut est le repertoire webapps que vous trouverez dans le répertoire d'installation. Nous ne toucherons pas à ça aujourd'hui, mais sachez qu'il est possible d'éditer le fichier {tomcat}/conf/server.xml pour le changer. Bref, allez dans ce répertoire (qui contient déjà une poignée de choses selon ce que vous aurez installé. Jetez un coup d'oeil au passage, c'est instructif) et
Ce que nous venons de créer est le squelette d'une application serveur en Java. Le répertoire lib contiendra toutes les sources binaires (“compilées”) du projet (en général des .jar), et le repertoire classes contiendra les fichiers .classes générés par une “compilation” java. WEB-INF contient de plus un fichier web.xml sur lequel nous reviendrons
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd"> <web-app> <servlet> <servlet-name>DefaultGateway</servlet-name> <display-name>DefaultGateway</display-name> <description>DefaultGateway</description> <servlet-class>org.openamf.DefaultGateway</servlet-class> <init-param> <param-name>OPENAMF_CONFIG</param-name> <param-value>/WEB-INF/openamf-config.xml</param-value> <description>Location of the OpenAMF config file.</description> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DefaultGateway</servlet-name> <url-pattern>/gateway</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
j'explique en très gros de quoi il s'agit. Ici on déclare tous les morceaux d'application accessibles (des servlets) et on leur donne un alias. la balise <servlet> sert à déclarer l'existence d'un servlet qui sert de porte d'entrée à flash remoting, associé à la classe org.openamf.DefaultGateway. Elle sera désignée en tant que DefaultGateway la balise <servlet-mapping> sert à assigner l'url http://votreserveur:8080/helloworld/gateway à votre servlet DefaultGateway (ici votreserveur == localhost)
Voila, au prochain démarrage de votre tomcat, on aura une nouvelle application. Content ?
vous allez voir, c'est sacrément dur :p On va partir du principe que vous avez eclipse (bon courage aux blocnoteux, surtout quand il faudra builder :p. Si vous ne connaissez pas java, installez plutot eclipse :p) Si ce n'est pas déjà fait, c'est peut être le bon moment de réfléchir à un passage sur Fame
au final vous devriez avoir la déclaration suivante
public class HelloService { public String helloWorld() { return "Hello, world"; } }
on voit que contrairement au PHP, pas de déclaration de tableau de méthodes à faire, c'est le pied
si vous êtes sous eclipse, le .class est deja fait
allez dans {workspace}/remoteHelloWorld/ et copiez le repertoire com dans votre application/WEB-INF/classes
Démarrez Tomcat
Dans un main, ou dans un fla :
import mx.remoting.Service; import mx.remoting.PendingCall; import mx.rpc.RelayResponder; import mx.rpc.FaultEvent; import mx.rpc.ResultEvent; var helloService:Service = new Service("http://localhost:8080/helloworld/gateway",null,"com.votrepseudo.remotehello.HelloService",null,null); var pc:PendingCall = helloService.helloWorld(); pc.responder = new RelayResponder(this,"onHelloOk","onHelloError"); function onHelloOk(r:ResultEvent) { trace(r.result); } function onHelloError(f:FaultEvent) { trace(f.fault); }
Au résultat vous obtenez dans la fenetre de sortie “Hello, world”. Non, en effet ce n'est pas surprenant.
Voila, c'était la base, maintenant amusez vous autant que vous voulez
.
Ce qu'il y a à savoir avec flash remoting avec java est qu'il est possible de construire votre service selon les architectures classiques J2EE (voir l'article sur onJava.com dans les liens). Si ce n'est pas obligatoire, il est bien de le faire pour des raisons de bonnes pratiques.
Notez également que si les types de base (String, Number, etc) transitent bien, il sera par contre utile de passer par des outils plus élaborés pour des objets complexes. La encore, CF onJava.
Encore des questions? Besoin d'aide? Venez en discuter sur les forums Flash Remoting ou Programmation Dynamique.