Your SlideShare is downloading. ×
201006 Graniteds
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

201006 Graniteds

823
views

Published on

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
823
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Granite Data Services Franck WOLFF et William DRAI
  • 2. Sommaire Présentation du projet L’API de réflexion La gestion des Big Numbers Le framework de validation La synchronisation temps-réel
  • 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/ Forum http://tech.groups.yahoo.com/group/graniteds/
  • 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
  • 5.  
  • 6. API de réflexion
    • Problème : les fonctionnalités de réflexion offertes par l’API standard Flash sont limités et peu commodes à utiliser (fonction describeType ).
    • 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.
    • 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(); });
  • 7. java.math / entier 64 bits
    • 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.
    • 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.
    • Exemple :
    var a:BigDecimal = new BigDecimal( "123.45" ); var b:BigDecimal = new BigDecimal( "6.789" ); var q:BigDecimal = a.divide(b, 5, RoudingMode.FLOOR);
  • 8. Validation (1/2)
    • Problème : vérifier des contraintes de validation du modèle de données côté Flex.
    • L'API JEE Bean Validation propose un framework de validation complet basé sur des annotations.
    • 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.
  • 9. Validation (2/2)
    • Solution :
    • 1. Le générateur d'entités GAS3 reproduit les annotations Bean Validation sur les entités ActionScript 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.
    • 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.
    • Exemple :
    [ NotNull ] [ Size (min= "6" , max= "10" )] public var username:String;
  • 10. Synchonisation de données temps-réel (1/2)
    • Problème : s'assurer que tous les clients voient les mêmes données
    • Option 1 : bouton 'Actualiser'
    • Option 2 : utilisation de techniques de push
    • 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.
    • Le modèle publish-subscribe permet d'envoyer des messages à tous les clients souscrits, moyennant un peu de développement.
  • 11. Synchronisation de données temps-réel (2/2)
    • Problème : les mises à jour d’entités JPA devraient être répercutées sur tous les clients de façon simple et transparente.
    • Solution :
    • 1. GraniteDS détecte les modifications sur les données grâce à un listener JPA.
    • 2. Les modifications sont poussées sur un topic spécifié par une annotation sur le service.
    • 3. Le framework Tide fusionne les modifications reçues côté client dans le cache local d'entités.
    • 4. L'interface graphique est mise à jour automatiquement grâce au data binding Flex.
  • 12. Fin Q/A © Adequate Systems 2010