Rss Feed

SOAP Rails+Flex et objets typés

Ruby on Rails permet de construire des webservices SOAP en quelques lignes. Mais ruby étant un langage dynamique, il faudra alors définir les types manuellement pour les entrées et les sorties. Côté flex pas de problème pour récupérer les types simples comme String , interger, datetime etc … Mais comment récupérer un objet plus complexe ?

Dans le post précédent on a introduit SchemaTypeRegistry qui permet de récupérer des objets personnalisés côté Flex; aucun problème pour des services écrits en java ou c#, ces langages n’étant pas dynamiques les objets seront bien définis dans le wsdl et Flex les comprendra sans problème. En revanche imaginons que l’on ait un model User en ruby qui pointe vers la table users. En retournant cet objet dans le SOAP flex sera incapable de le comprendre , aucune de ses proriétées n’étant explicitement définies.

Il existe pourtant une solution à ce problème : ActionWebService::Struct. En définissant un model héritant de cette class on va pouvoir construire un « emballage » de notre model de base et y définir ses propriétés. Exemple pour un model User :

On définit le model UserStruct < ActionWebService::Struct et on y ajoute les propriétés :

class UserStruct

member :name, :string
member :pass, :string

end

et dans notre class d’api on spécifie le retour comme :

:returns => [{:answer => UserStruct}]

Ruby étant totalement dynamique on peut directement renvoyer un objet User dans le controller, celui-ci sera automatiquement transormé en UserStruct. Exemple d’une méthode dans le controller :

def getUser(id)

User.find(id)

end

L’objet reçu sera alors de type userstruct (en minuscules dans le xml) et contiendra toutes les valeurs de User pour peu qu’elles aient été bien définies.
Enfin pour plus de lisibilité rien n’empêche de nommer son objet ‘User’ aussi côté flex et de spécifier le changement de nom dans SchemaTypeRegistry (voir post précédent).

SOAP+Flex => SchemaTypeRegistry

Une nouveauté de Flex 3 qui est passé inaperçue c’est la possibilité de recevoir des objets fortement typés depuis un service SOAP comme on pourrait le faire via le protocole AMF. Tout se fait dans la class singleton SchemaTypeRegistry. Il suffit de lui fournir le nom de l’objet reçu , son namespace dans l’enveloppe SOAP et la class de destination. Un petit exemple vaut mieux qu’un long discours : Imaginons que l’on veuille maper un objet user ayant pour namespace « http://www.matsiya.fr/user » vers une class User il suffira d’ajouter dans l’application (le mapping concernera alors tous les services) :

SchemaTypeRegistry.getInstance().registerClass(new QName("http://www.matsiya.fr/user", "user"), User);

Il est aussi tout à fait possible de définir le SchemaTypeRegistry pour une opération donnée en le spécifiant au XMLDecoder :

var sr:SchemaTypeRegistry = new SchemaTypeRegistry(); sr.registerClass(new QName("http://www.mastiya.fr/user", "user"), User);op.decoder.typeRegistry = sr; //op étant notre opérationEtrange qu’adobe ne communique pas plus à ce sujet, la doc est quasi inexistante pour cette fonctionnalité et surtout tout ce qui touche au XMLDecoder. Malheureusement cette technique n’est utilisable que pour les services de type SOAP, à ma connaissance il n’est pas possible de forcer le décodage d’un XML externe ou résultant d’un service REST via le XMLDecoder.

Composant flex open-source : slideshow

Voici un composant particulièrement intéressant, et qui a le mérite d’être open-source, ce qui vous permettra de le modifier à votre convenance. Joel Hooks vous propose donc un composant Flex permettant d’afficher sous forme de slideshow horizontal ou vertical des images. Lui même basé sur le travail de Peter Write, le composant permet d’afficher cette liste d’image à partir d’une XML List.

Plutôt que de longues explications, la démonstration sur son site vous permettra de comprendre directement de quoi il en retourne.

Flex 4 – Nom de code : Gumbo

Bon, l’info n’est pas d’aujourd’hui, mais il est toujours bon de la rappeler pour ceux qui seraient passés à côté.

Plus d’informations sur Flex 4

Adobe Flash media encoder 2.5: support du h264

Adobe vient de mettre à jour son logiciel gratuit de diffusion live pour supporter les dernières améliorations de Flash Media Server 3, à savoir le support du H264, et de l’AAC. Seul petit bémol, il faudra que vous achetiez le plugin AAC encoder (249$) pour Flash media encoder auprès de la société MainConcept.

On peut désormais faire du streaming live d’événement en HD pour peut qu’on ait une bonne connexion pour l’envoi des données.

RoR et Flex main dans la main en 2 minutes

Une petite astuce pour ceux qui se lancent dans Ruby on Rails + Flex via WebOrb. Voilà la méthode express sans Flex Data Service ni édition de service-config , remoting-config, context-root et j’en passe … Une fois votre projet ruby créé , le plugin WebOrb installé (on trouve de bons tutos sur le net) , allez dans Flex Builder et créez un nouveau Projet. Ne choisissez aucun type de serveur puis rentrez le chemin de sortie et l’url de la manière suivante :

  • Output Folder : (chemin de mon projet ruby)/public/monProjet
  • Output Url : http://localhost:3000/monProjet/

Il ne restera plus qu’à spécifier endpoint= »/weborb » dans chacun de vos RemoteObject et le tour est joué. La communication entre les deux nouveaux outsiders du web est excellente, l’envoie et la réception d’objet typé se fait sans encombre et pour ceux qui ne connaissent pas encore RoR je vous invite à découvrir avec quelle simplicité on fait des choses normalement compliquées ;-)

Retour sur le Adobe onAir Tour

Et oui, comme annoncé ici, nous nous sommes rendu au Adobe onAir Tour qui se déroulait au palais Brongniart à Paris. On arriva donc sur les coups de 09h45, on récupère nos badges, notre petite pochette de bienvenue (contenant autocollants, carte postale au couleur d’AIR, et un petit fascicule), et un tee-shirt aux couleurs du onAir tour, nous nous dirigeons vers le hall principal où se trouvent tout ce qu’il faut pour casser le croute. Au menu, viennoiseries miniatures, boissons froides et chaudes, fruits, et le tout à volonté. Le cadre du palais est très agréable, on se dit qu’Adobe se donne les moyens de son ambition :)

Puis on se dirige vers le lieu où tout va se passer, et là on découvre l’amphithéâtre qui est très classe, disposant du wifi, et de prises pratiquement à chaque siège pour brancher nos compagnons favoris. Sur scène, le maitre de cérémonie, alias Mike Chambers, est en train de régler les dernières choses, aidant Ryan Stewart à se préparer pour sa keynote.

10h, Mike nous remercie d’être venu, et nous indique le programme de la journée, et laisse la parole à Ryan qui va nous présenter Adobe, le chemin parcouru (je ne savais pas que flash avant 13 ans :o ), mais aussi ce qu’est AIR. On y découvre (ou redécouvre) les produis phares d’Adobe, mais aussi certains moins connus tels que Scene7, ou Pacifica. On apprend aussi que Aptana (un IDE Ajax/Php/Html) contient désormais un plugin AIR, ainsi que la version 1.1 de AIR serait disponible courant 2008, qui contiendra pas mal de correctifs de bugs, mais aussi l’ajour du support multi-langage (l’installation des applis AIR est toujours en anglais).

10h30, Mike nous présente comment construire sa première application AIR avec Flex Builder.

11h, Kevin Hoyt vient quand à lui nous parler de la création d’un appli AIR avec de l’Html et du Javascript. N’ayant pas vraiment abordé cet aspect jusqu’à présent, je suis très heureux d’avoir pu découvrir la simplicité déconcertante de migration d’une appli html/javascript (et donc ajax) vers du AIR.

11h30, on se fait un petit break, histoire de nous remettre de nos émotions (et à l’occasion, nous ravitailler l’estomac ;) )

11h50, Kevin revient nous parler plus en profondeur des possibilités d’html/javascript au sein d’un application AIR.

12h30, c’est la pause déjeuner, au menu, mini sandwichs, parts de quiche, mini hamburger (ils étaient divins), chips, fromage, et des verrines de fruit. Et le tout toujours à volonté. Franchement, c’était royal :D

13h15, on reprend avec Serge Jespers qui nous parle de comment déployer et mettre à jour un application AIR. On y apprend comment déployer notre application AIR sur une page web en utilisant les « badge ». Très pratique, et visuellement intéressant, vous pouvez trouver plus d’infos sur les nouveaux badges sur le labs.

13h45, Daniel Dura vient nous faire un tour d’horizon de l’API AIR.

14h20, De nouveau une pause pour prendre un petit café pour éviter que la digestion nous emporte vers un sommeil profond (non pas que ça ne soit pas intéressant, mais le répas ayant été tellement bon, difficile de résister aux bras de morphée).

14h40, Chris Brichford vient nous parler à son tour d’application AIR utilisant HTML et javascript, en abordant particulièrement les aspects de sécurité, et ce que l’API Air peut faire avec de l’html.

15h15, Enrique Duvos nous a présenté une session très intéressante sur tout ce qui est optimisation, charge des applications AIR pour des développements qui ne sont plus que des cas d’école. Très vivante, et pleine d’exemple, je pense que c’était la meilleure session de cette journée.

15h45, Et hop, une autre pose pour se ravitailler.

16h00, Christophe Jolif nous expose en français (et oui, c’était un compatriote pour une fois ;) ) comment au sein d’ILOG, ils utilisent AIR pour faire de la visualisation de statistiques. Au menu, des charts, des charts, des datagrids et autres charts ;)

16h35, Andre Charland de Nitobi nous présente ce que sa société fait avec AIR, en particulier avec l’utilisation des frameworks Ajax.

17h10, Lee Brimelow prend la suite. Avec une session nommée AIR Conditioning (allusion pas du tout dissimulée à nos bonnes vieilles clims), il nous présente ses habituelles applications déjantée pour nous montrer les possibilités de AIR utilisant Flash ou Flex. On voit donc un player vidéo avec des formes farfelues, un autre player qui fait des captures d’écran très sympa.

Nous avons du partir avant la fin de la session de Lee, étant donné qu’il y avait eu du retard accumulé sur la journée, et pour être sur de ne pas rater le train ;)

Cette journée a permis donc de revoir ces stars d’Adobe, de découvrir des aspects de AIR qui ne sont pas toujours mis en avant, mais on se dit quand même qu’Adobe cherche à convaincre tous les développeurs Ajax/Javascript de les rejoindre. Ce qui fait que cette journée, pour des développeurs Flex que nous sommes, n’était pas complétement à la hauteur de nos espérances. On aurait aimé aussi avoir quelques exclusivités sur l’avenir des produits Adobe qui touchent AIR/Flex/Flash, mais ça ne semblait pas être leur intention.

Reste qu’on ne regrette pas cette journée ;)