201006 Graniteds

12
Page 1 Cliquez pour modifier le style des sous- titres du masque Granite Data Services Franck WOLFF et William DRAI

Transcript of 201006 Graniteds

Page 1: 201006 Graniteds

Page 1

Cliquez pour modifier le style des sous-titres du masque

Granite Data ServicesFranck WOLFF et William DRAI

Page 2: 201006 Graniteds

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: 201006 Graniteds

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: 201006 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: 201006 Graniteds

Page 5

Page 6: 201006 Graniteds

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: 201006 Graniteds

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: 201006 Graniteds

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: 201006 Graniteds

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: 201006 Graniteds

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: 201006 Graniteds

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: 201006 Graniteds

Page 12

Fin

Q/A

© Adequate Systems 2010