Download - 201006 Graniteds
Page 1
Cliquez pour modifier le style des sous-titres du masque
Granite Data ServicesFranck WOLFF et William DRAI
Page 2
Cliquez pour modifier le style des sous-titres du masque
Sommaire
Présentation du projet
L’API de réflexion
La gestion des Big Numbers
Le framework de validation
La synchronisation temps-réel
Page 3
Le projet GraniteDS
Créé fin 2006
Open Source: LGPL3 (© Adequate Systems)
Version actuelle: 2.1.0.GA / 2.2.0.RC1 en préparation
Informations et documentation http://www.graniteds.org/
Téléchargement et SVN http://sourceforge.net/projects/granite/
Forumhttp://tech.groups.yahoo.com/group/graniteds/
Page 4
Pourquoi GraniteDS
Aucune implémentation Java open source du protocole AMF3 en 2006 / 2007
Technologie LCDS full client ne convenant pas à notre architecture applicative serveur
Pas d'intégration native avec les EJB3 et les frameworks usuels (Spring, JBoss Seam)
Problématiques de gestion des données côté client et utilisation d'entités JPA détachées (support du lazy-loading)
Des frameworks Flex existants (Cairngorm, PureMVC) trop complexes : création du framework Tide
Objectif principal : simplifier au maximum l'intégration d'un front-end Flex avec une application JEE
Page 5
Page 6
API de réflexion
1. Problème : les fonctionnalités de réflexion offertes par l’API standard Flash sont limités et peu commodes à utiliser (fonction describeType).
2. Solution : une API de réflexion qui reproduit les fonctionnalités de l’API Java correspondante et qui simplifie considérablement l’analyse des classes ActionScript3.
3. Exemple :
var t:Type = Type.forName("path.to.MyClass");
for each (var a:Annotation in t.annotations) trace(a.args);
var ms:Array = t.getMethods(function(m:Method):Boolean { return m.isStatic();});
Page 7
java.math / entier 64 bits
1. Problème : la sérialisation AS3 des long, BigInteger et BigDecimal perd de la précision (conversion en Number). Les opérations sur le type Number ont les mêmes limites que celles du type double en Java.
2. Solution : une implémentation ActionScript3 de classes Long, BigInteger et BigDecimal associée à un mécanisme de sérialisation (externalisation) qui permet de conserver avec exactitude la précision de ces types lors de l’échange de données Flex/Java.
3. Exemple :
var a:BigDecimal = new BigDecimal("123.45");var b:BigDecimal = new BigDecimal("6.789");
var q:BigDecimal = a.divide(b, 5, RoudingMode.FLOOR);
Page 8
Validation (1/2)
1. Problème : vérifier des contraintes de validation du modèle de données côté Flex.
2. L'API JEE Bean Validation propose un framework de validation complet basé sur des annotations.
3. Il serait judicieux de pouvoir réutiliser ces annotations côté Flex et de valider des objets autant que possible sans passer par le serveur.
Page 9
Validation (2/2)
1. Solution :
2. 1. Le générateur d'entités GAS3 reproduit les annotations Bean Validation sur les entités ActionScript 3.
3. 2. Le moteur de validation GraniteDS implémente la spécification Bean Validation en ActionScript 3 et utilise les annotations générées ci-dessus.
4. 3. Un composant Flex FormValidator fait le lien entre les composants graphiques et le moteur de validation en utilisant les informations du data binding bidirectionnel de Flex.
5. Exemple :
[NotNull] [Size(min="6", max="10")]public var username:String;
Page 10
Synchonisation de données temps-réel (1/2)
1. Problème : s'assurer que tous les clients voient les mêmes données
2. Option 1 : bouton 'Actualiser'
3. Option 2 : utilisation de techniques de push
4. GraniteDS inclut un moteur de push de type Comet performant (Gravity) qui utilise les capacités de traitements asynchrones des conteneurs de servlets récents.
5. Le modèle publish-subscribe permet d'envoyer des messages à tous les clients souscrits, moyennant un peu de développement.
Page 11
Synchronisation de données temps-réel (2/2)
1. Problème : les mises à jour d’entités JPA devraient être répercutées sur tous les clients de façon simple et transparente.
2. Solution :
3. 1. GraniteDS détecte les modifications sur les données grâce à un listener JPA.
4. 2. Les modifications sont poussées sur un topic spécifié par une annotation sur le service.
5. 3. Le framework Tide fusionne les modifications reçues côté client dans le cache local d'entités.
6. 4. L'interface graphique est mise à jour automatiquement grâce au data binding Flex.
Page 12
Fin
Q/A
© Adequate Systems 2010