mercredi 29 octobre 2008

Aucun évènement appelé sur le FileReference?

Pour faire un download ou un upload, rien de mieux que le FileReference en Flex. Mais attention nous avons à faire à un objet très susceptible, il faut bien respecter l'ordre de saisie des données que nous donne la note technique d'Adobe. Sinon aucun évènement ne sera appelé. Et quand aucune erreur n'est affichée ça peut être difficile à comprendre.

jeudi 21 août 2008

Mon retour d'expèrience sur le LiveCycle Data Service ES

J'ai eu l'occasion d'utiliser le LiveCycle DataService ES 2.5 (LCDS pour les intimes) durant un projet. Et voici mon avis sur cet outil:

Interfaçage simple entre Spring et LCDS
La configuration est extrêmement simple, il suffit de suivre les instructions de la documentation LCDS. Par configuration du remoting-config.xml et du contexte d'application Spring. On peut ainsi mettre en place une belle architecture.

Pas de gestion des enums
J'en ai déjà parlé dans un précédent article mais cet outil ne gère pas les enums qui sont pourtant très utilisé en Java 1.5!

Pas de gestion du Lazy Loading
Le LCDS ne gérait pas les sessions d'où des problèmes de Lazy Loading. Et donc soit une exception nous saute à la figure soit en utilisant des servlets, LCDS tente de charger toutes les données en mémoire même si côté Flex les données n'existent pas. Le temps de chargement est du coup considérablement ralenti.

Je conseillerai à tout ce qui souhaiterai interfacer une application Flex avec du Java d'utiliser BlazeDS qui se base sur LCDS et qui possède les fonctionnalités manquantes comme les enums ou les problèmes de Lazy Loading.

vendredi 27 juin 2008

Mon retour d'expèrience sur Flex

J'ai eu l'occasion d'utiliser Flex sur un de mes projets (un projet assez volumineux) et je tiens à partager mon expérience dessus. Voici donc mon bilan sur Flex:

IHM facile à mettre en place
Flex est un excellent outil pour mettre rapidement en place des IHMs notamment pour réaliser des maquettes. La partie graphique de Flex Builder permet même à quelqu'un qui ne connait pas Flex de mettre en place rapidement des maquettes.

Et le pattern MVC?
Pour le développement, nous avons utilisé le framework Cairngorm qui est très bien pour mettre en place le pattern MVC. Cependant ayant déjà travaillé sur Struts je dirai que Cairngorm est un peu trop verbeux, il faut créer au moins trois classes juste pour charger une donnée. La validation des formulaires prise en charge par Cairngorm aurait été un plus et aurait pu aider le développeur à mieux maintenir son application.

Les manques de Flex Builder
En dehors de l'éditeur graphique, Flex Builder dispose finalement de peu de plugin. C'est peut être l'habitude de développer en Java sous Eclipse qui me fait dire ça. Mais pas de possibilités de faire un "generate getter and setter" ni de formater le code. Il n'y a pas de plugin checkstyle ce qui est très embêtant lorsque le client exige le respect des normes de codage. Pas de plugin pour la couverture de code par les tests ni de refactoring... Et j'en passe lorsqu'on a un client exigent sur la qualité du code il faut être prévenu de ces manques. Et une fois le code mis en place, il sera très couteux de réaliser une refactorisation du code.
Il est possible d'intervenir sur le site d'Adobe pour répertorier les composants manquants et même de voter pour qu'ils soient ajoutés dans la prochaine version de Flex Builder (la version 4 bien évidemment).

Globalement, Flex Builder est un outil agréable pour les IHMs mais il lui manque encore pas mal de fonctionnalités qui rendrait le travail des développeurs plus agréable. A mon avis il faudrait repousser le plus possible le code Flex pour se limiter à la partie Vue et laisser la possibilité à Struts par exemple de prendre en charge la Partie Model-Controller.

jeudi 12 juin 2008

Parcourir les fichiers du poste client avec Flex?

Flex s'exécute dans un contexte sécurisé que l'on appelle SandBox (ou bac à sable). Pour cette raison, il n'est malheureusement pas possible de parcourir ou même de récupérer le chemin d'un fichier ou d'un répertoire sur un poste client. Il est cependant possible de sélectionner et d'uploader un fichier avec la classe FileReference (ou FileReferenceList pour la multi-sélection) mais ce dernier ne permet pas de voir le chemin du fichier.

mercredi 14 mai 2008

Spring 2.5 et l'envoi de mail

La version 2.5 de Spring contient un bug sur l'envoi de mail. En effet, lorsque l'on configure mal les propriétés on obtient un NullPointerException sur la classe MailSendException à l'appel du printStackTrace ou encore du toString. L'objet est en fait mal instancié ce qui l'empêche de faire les bons appels. La solution est de changer de version et de passer au moins la 2.5.1 où le bug a été corrigé.

lundi 21 avril 2008

Error #1034 TypeError et Cairngorm

Lorsqu'on dispatche un CairngormEvent qui a déjà été dispatché une première fois, on tombe sur l'exception suivante:
TypeError: Error #1034: Echec de la contrainte de type : conversion de flash.events::Event@29677629 en com.adobe.cairngorm.control.CairngormEvent impossible.

Le problème vient du fait que Flash clone les évènements qu'il a déjà dispatchés. Du coup lorsqu'on le dispatche à nouveau, il appelle l'objet cloné et malheureusement il s'agit d'un Event et plus d'un CairngormEvent d'où l'erreur.
La solution est donc de s'assurer qu'un nouvel évènement Cairngorm est créé à chaque fois que l'on dispatche cet évènement.

mercredi 9 avril 2008

Comment utiliser un itemRenderer sur plusieurs colonnes d'une datagrid?

J'ai eu ce problème récemment: Une datagrid avec plusieurs colonnes pouvant utiliser le même itemRenderer car il s'agissait du même traitement. Mais comment savoir dans quel colonne je suis puisque chaque colonne correspond à un attribut différent. La première solution qui m'est venu à l'esprit: Un ItemRenderer pour chaque colonne? Si j'en ai que deux ça va mais pour quatre colonnes c'est trop!!! Et puis j'ai fait des recherches (Merci Google ^^) et j'ai trouvé ce tutoriel qui montre comment implémenter IDropInListItemRenderer qui fournit dans listData la propriété columnIndex.