Génération de classes AS3 depuis Java pour Flex
Posted on 02. juil, 2009 by admin in Blaze DS, eclipse
Une des tâches les plus ingrate mais nécessaire lorsqu’on écrit une application Flex/Java communiquant en RemoteObject, c’est d’écrire les classes AS3 correspondant aux classes Java.
Cela est nécessaire pour que le mécanisme de mapping automatique de Flex fonctionne, mais c’est fastidieux et nécessite une synchronisation permanente.
Heureusement, il existe un certain nombre d’outil de génération automatique. J’en ai découvert un récemment (merci Adrien) qui m’a semblé particulièrement intéressant.
Je vous propose de vous le présenter rapidement (d’après le doc d’installation fournie).
Installation
Récupérer la doc ici ainsi que les jars nécessaires : plugin et annotations .
Jar du plugin:
Ajouter le jar du plugin dans le répertoire plugins de votre Eclipse.
Jar des annotations:
Créer un projet Flex/Java en comme d’habitude, puis faites un clic-droit sur le projet pour ouvrir ses propriétés. Sélectionnez l’élément “Java Build Path” sur la gauche pour pouvoir ajouter le .jar (utilisez le bouton “Add External Jar…”)

Configuration
Nous allons maintenant donnez quelques informations à cet utilitaire pour qu’il sache où générer les classes AS3.
Encore dans cette boîte de dialogue, allez dans Java Compiler->Annotation Processing->Factory Path, pour y cocher la case “Enable project specific settings” puis cliquez sur le bouton Apply.

Toujours dans cette même boîte de dialogue, revenez sur le menu parent (Annotation Processing) pour y ajouter une nouvelle option pour cette annotation.
Cliquez sur le bouton New…
Dans le champ key entrez l’information suivante:
-Acom.faratasystems.dto2fx.output
Dans le champ value entrez indiquez le chemin du répertoire source de où devront être générés vos classes AS3.

Note: C’est ce qu’indique la doc de configuration pour une application Java classique. Pour une application Web, j’ai du ajouter (glisser/déposer) le jar d’annotation dans le répertoire WebContent/WEB-INF/lib pour qu’il soit pris en compte.
Ouf! c’est fini pour la configuration, on va pouvoir coder.
Utilisation de l’outil
Dans le répertoire des sources Java, créer un package vo, puis dedans une classe User avec les propriétés username et password.
Générez les getters/setters.
Au dessus de la classe, ajoutez l’annotation @FXClass ou @FXClass(”<package.classe.flex.NomClasseAS3>”). Sauvegardez pour lancez la compilation et la génération des classes AS3.
package vo; import com.farata.dto2fx.annotations.FXClass; //pour générer une classe AS3 du même nom, dans le même package //il suffit de mettre @FXClass @FXClass("dto.UserVO") public class User { protected String _username; protected String _password; public String getUsername() { return _username; } public void setUsername(String username) { _username = username; } public String getPassword() { return _password; } public void setPassword(String password) { _password = password; } }
Faites un refresh du projet pour voir apparaître les classes dans le répertoire des sources flex.

Deux classes AS3 sont générées pour chaque classe Java : _ClasseAS3.as et ClasseAS3.as (qui hérite de _ClasseAS3.as)
Ne modifier sous aucun prétexte la classe _ClasseAS3. Le générateur de code l’écrase à chaque modification de la classe Java.
Par contre vous pouvez modifier la classe ClasseAS3.as
Il existe une annotation @FXIgnore que l’on peut positionner sur les méthodes Java afin qu’elles ne soient pas générées.
Par exemple, un @FXIgnore sur un setter, entrainera la génération d’un accesseur get (et uniquement) côté AS3, pour protéger la classe AS3 contre l’écriture.
Conclusion
Cet utilitaire de génération de classe AS3 m’a paru très pratique car bien intégré à Eclipse. Du coup, une fois sa configuration effectuée, il travaille pour nous de façon quasi transparente.
Dites-moi ce que vous en pensez et si vous connaissez d’autres outils de génération intéressant.

Renaud
02. juil, 2009
Bonjour,
Chez nous c’est XDoclet avec une tache ant dans eclipse.
Merci pour cette nouvelle solution on va l’essayer!
Renaud Heluin
08. juil, 2009
Marche bien, rester à tester ça tout au long d’un projet…
Il manque la possibilité d’ajouter que les classes générée implémentes une ou des interfaces.
Marine_Tools
15. sept, 2009
ce que je cherchais, merci
eric goueffon
17. sept, 2009
Bonjour,
c’est uniquement pour liveCycle ou ca fonctionne aussi pour BlazeDS?
Romain
29. nov, 2009
J’ai testé le générateur, son fonctionnement a changé depuis l’écriture de ce post, et l’écriture de la documentation officielle : les classe générées implémentent pour moi la classe mx.data.IManaged.
Or, cette classe fait partie de la bibliothèque fds.swc, introuvable à part dans LiveCicleDataService, que je n’utilise pas.
Je recherche une version du plugin qui créer les objets AS3 conformément à la documentation, c’est à dire implémentant mx.core.IUID !
J’ai eu l’occasion de travailler avec GAS3 de GraniteDS, qui à l’avantage d’être open souce, mais qui n’est pas aussi bien intégré à Eclipse.
admin
04. fév, 2010
Je dirais même que ça a été fait pour BlazeDS (gratuit alors que LiveCycle ne l’est pas)