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.
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.
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:
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.
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.
lundi 24 mars 2008
Les enums en Flex?
Il est possible grâce au LiveCycle Data Service ES de faire tourner une application Flex sur une plateforme J2EE. On peut sérialiser les objets en particulier les JavaBeans pour les envoyer à la partie cliente c'est à dire à Flex. La sérialisation est bien évidemment soumis à des contraintes comme par exemple: pour chaque propriété, il faut définir le getter et le setter associés.
Cependant la sérialisation ne prend pas en compte les enums de Java 1.5. En effet, ils n'existent pas en ActionScript 3. Après quelques recherches, je suis tombée sur ce blog qui propose une solution qui marche très bien je peux vous l'assurez. En gros, ils ont défini une couche supplémentaire côté Java qui permet de prendre en compte les enums. Ils proposent également côté Flex deux classes EnumBase et EnumClass permettant de créer des enums en ActionScript 3.
Cependant la sérialisation ne prend pas en compte les enums de Java 1.5. En effet, ils n'existent pas en ActionScript 3. Après quelques recherches, je suis tombée sur ce blog qui propose une solution qui marche très bien je peux vous l'assurez. En gros, ils ont défini une couche supplémentaire côté Java qui permet de prendre en compte les enums. Ils proposent également côté Flex deux classes EnumBase et EnumClass permettant de créer des enums en ActionScript 3.
vendredi 21 mars 2008
Trier une colonne d'une datagrid
Flex permet de redéfinir le tri des données sur une datagrid.
Voici un exemple très simple d'une DataGrid donnant les informations de la météo:
Exemple
Si on clique sur le titre "Temps" de la colonne Flex va ordonner les données à sa façon. Mais ce n'est pas ce que l'on souhaite, on voudrait l'ordre suivant Pluie > Variable > Soleil.
On va donc utiliser la propriété sortCompareFunction qui prend comme valeur une fonction dont la signature est la suivante compareTo(obj1:Object, obj2:Object):int.
A partir de cette fonction la datagrid va réaliser le tri adequat.
Voici un exemple très simple d'une DataGrid donnant les informations de la météo:
Exemple
Si on clique sur le titre "Temps" de la colonne Flex va ordonner les données à sa façon. Mais ce n'est pas ce que l'on souhaite, on voudrait l'ordre suivant Pluie > Variable > Soleil.
On va donc utiliser la propriété sortCompareFunction qui prend comme valeur une fonction dont la signature est la suivante compareTo(obj1:Object, obj2:Object):int.
A partir de cette fonction la datagrid va réaliser le tri adequat.
private function compareTo(obj1:Object, obj2:Object):int
{
if(obj1.temps == obj2.temps)
{
return 0; // en cas d'egalité on retourne 0
}
else
{
if(obj1.temps == "Soleil")
{
return -1; // Soleil < obj2
}
else
{
if(obj1.temps == "Pluie")
{
return 1; // Pluie > obj1
}
else
{
if(obj2.temps == "Soleil")
{
return 1; // Variable > Soleil
}
else
{
return -1; // Variable < Pluie
}
}
}
}
}
ErrorArgument #2004
Il s'agit d'une erreur retournée par Flex lorsque celui ci ne reconnait pas un objet. Malheureusement cela peut arriver plus souvent qu'on peut croire. FlexBuilder ne compile pas toutes les classes mais uniquement celles qui sont instanciées et appelées. C'est à dire que si vous déclarez une classe Person mais qu'à aucun moment vous ne faites appel à cette classe vous pouvez tomber sur cette erreur. J'ai trouvé ce blog qui l'expliquait mais vu mes lacunes en anglais, je n'avais pas tout de suite compris le problème. En résumé lorsque vous avez cette erreur, assurez vous de bien avoir votre classe instanciée quelque part dans votre Main.mxml par exemple.
Inscription à :
Articles (Atom)