Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

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

  • Connaitre un chouilla de Java, ou au pire, bien connaitre l'AS2
  • Savoir administrer votre bécane (il y a un serveur à installer)
  • trois fois rien de XML

Pourquoi utiliser Java plutot que PHP ?

En faveur de Java

  • LE gros avantage, à mon avis, est le fait que Java soit multithreadé, par conséquent on peut envoyer n requêtes simultanées sans que le service ne s'éffondre
  • la création d'un service est plus intuitive (nous y reviendrons)
  • il existe une véritable école du développement web services Java, notamment coté J2EE. Il existe donc des frameworks qui pourront vous simplifier la vie

En faveur de PHP

  • Beaucoup plus répandu chez les hébergeurs, et donc bien moins cher
  • Somme toute plus facile à déployer que Java
  • Développement moins rigoureux et donc plus “accessible”
  • Demande un serveur moins puissant pour les faibles charges (J2EE et notamment les EJB se justifient souvent pour des grosses charges)

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

  • un serveur tomcat (j'ai réalisé ce tuto sur un tomcat 5.5), gratuit mais à la pointe
  • une J2RE dont la version minimale est imposée par le serveur que vous voudrez installer
  • un JDK pour pouvoir compiler
  • un éditeur java (un bloc note fait l'affaire, mais comme d'hab, un scite c'est mieux, et si vous avez Eclipse, ça va sacrément vous simplifier la vie)
  • les classes AS2 pour flash remoting

Infrastructure

  • installez votre J2RE (si ce n'est pas déjà fait)
  • installez votre tomcat (je ne saurais que trop vous conseiller de le rendre facilement accessible. Program Files c'est deja trop complexe :p) mais ne le démarrez pas

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

  • dezippez openAMF
  • copiez le fichier openamf.jar ainsi que tous les fichiers contenus dans le repertoire lib dans votre repertoire helloworld/WEB-INF/lib
  • copiez les fichiers /src/web/WEB-INF/build-webservice.xml et /src/web/WEB-INF/openamf-config.xml du repertoire openamf vers le WEB-INF de votre application
  • créez un fichier web.xml (on y arrive) et inserez le contenu suivant :
<?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

  • Créez un projet remoteHelloWorld de type java (dites oui pour le passage a la perspective java, ca nous aidera)
  • pour des projets futurs, vous pourrez editer les propriétés du projet et dans Java Build Path, vous pourrez ajouter les .jar que nous avons mis dans /lib
  • Créez une nouvelle classe (pour le nom du package, com.votrepseudo.remotehello fera l'affaire) appelée HelloService

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