Table des matières

Flash Remoting - technologies Java

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.Compatible Java. Cliquer pour en savoir plus sur les compatibilités.

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

Objectifs

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

Prérequis

Pourquoi utiliser Java plutot que PHP ?

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

Outils nécessaires

Infrastructure

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

  1. créez un répertoire helloworld
  2. puis helloworld/WEB-INF
  3. helloworld/WEB-INF/lib
  4. et helloworld/WEB-INF/classes

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 ?

Créer le service

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

Créer le client

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.

Conclusion

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.

Liens