1 Synchronisation et communication entre processus Schémas classiques de synchronisation.
Informatique Mobile et synchronisation
-
Upload
sebastien-letelie -
Category
Technology
-
view
2.249 -
download
1
description
Transcript of Informatique Mobile et synchronisation
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 1
Informatique Mobile
et
Synchronisation
Sébastien Letélié
Ingénieur d’études et de développement
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 2
Plan de la présentation
Introduction Évolution des terminaux Architecture mobile Environnement et développement J2ME Synchronisation SyncML PointBase UniSync Présentation du TP
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 3
Introduction
Le développement d’applications mobiles est soumis à des problématiques hétérogénéité des terminaux (écran de taille différentes,
clavier ou pas, …) hétérogénéité des OS prise en compte des futurs coûts de communication (mode
connecté / synchronisé / les 2) Évolution du schéma client/serveur
Transcoding : XML/XSLT permet la diffusion multi-terminaux
Services Web : .NET et J2EE avec SOAP des standards se mettent en place pour la synchronisation
(syncML) il est nécessaire d’uniformiser les développements
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 4
L’évolution des terminaux
Assistantspersonnels
Livres électroniques
Jeux électroniques
Taille et poids
Puissance et mémoire
Terminaux voix
Terminaux données
Terminaux multimédias
1èreconvergence
Terminauxcible
PC Portables
PC de poche
PC
Le facteur de succès principal de l’Internet Mobile est l’ergonomie (Ubicco)
Téléphones mobiles
voix+données
LecteursmultimédiasCD - MP3,
DVD
Téléphones mobiles
voix
Téléphone multimédia
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 5
Architecture mobile
diffusion
synchronisation
Serveurd’applications
XSLT
XSLT
XSLT
WAP / XHTML basic
iMode / XHTML basic
VoiceXML
XML
BD ’lite’BD de synchronisation
BD Serveur
SERVEUR
XSLT SyncML
Authentification
XMLP / SOAP
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 6
Environnement et développement
Un environnement portable sur les terminaux mobiles est une nécessité
Environnement portable = Java Sun ajoute à sa gamme une plateforme pour les appareils
électroniques et terminaux intégrés : J2ME (Java 2 Micro Edition)
La technologie J2ME consiste en un ensemble d’API et de VM adaptées à ces terminaux
2 composantes principales Configurations Profils + packages optionnels
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 7
J2ME concept
J2ME Configuration : spécification d’une librairie de base (low-level API) machine virtuelle optimisée 2 configurations :
• CLDC (Connected Limited Device Configuration) • CDC (Connected Device Configuration)
J2ME Profiles : spécification détaillant une collection d’API basé sur une configuration plusieurs profils :
• Foundation Profile• MID Profile• Personal Profile• …
Un environnement J2ME est la combinaison d’une configuration et d’un profil
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 8
J2ME - CLDC
CLDC (Connected Limited Device Configuration) terminaux à ressources et mémoire limitées microprocesseur 16 ou 32 bits 160-512 Kbytes pour Java et ses applications packages : java.lang, java.io, java.util
Machine virtuelle : KVM incluse dans CLDC K pour kilobytes non adaptée pour le temps-réel
MID Profile implémente CLDC
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 9
J2ME - CDC
CDC (Connected Device Configuration) créée pour la prochaine génération de terminaux microprocesseur 32-bit 2 Mbytes ou plus de mémoire pour Java et ses applications packages : java.lang, java.util, java.io, java.net, java.text,
java.security Machine virtuelle : CVM
incluse dans la CDC gestion optimisé de la mémoire sécurisé multithreading
Foundation Profile implémente CDC
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 10
J2ME - Foundatio
n Foundation Profile
extension des API du CDC socket, classe de localisation et d’internationalisation complément des packages java.lang et java.io les packages java.sql, java.beans, java.rmi ne sont pas présent
Il n’y a pas d’API graphiques, d’autres profils vont venir étendre le Foundation : Personal Basis Profile Personal Profile Game Profile Optional package : RMI, SQL, …
A terme les profils vont s’adapter aux différents terminaux
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 11
J2ME - MIDP
MIDP (Mobile Information Device Profile) extension du CLDC API pour l’interface utilisateur : javax.microedition.lcdui API pour la persistance d’objets : javax.microedition.rms API pour le réseau : javax.microedtion.io
MIDP application = MIDlet comme pour une Applet, un MIDlet est contrôlé par un
logiciel l’Applet est contrôlé par un browser => le MIDlet est
contrôlé par le support mobile (compatible CLDC/MIDP)
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 12
J2ME - MIDP
Cycle de vie d’un MIDlet public void startApp() : démarrage du MIDlet,
initialisation de l’interface (Display) public void pauseApp() : MIDlet en attente, destruction
des ressources partagées public void destroyApp() : MIDlet terminé, destruction
des ressources locales et partagées, sauvegarde des données persistantes, des préférences …
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 13
J2ME - MIDP
Les composants de l’UI Display : écran principal Form : composition d’éléments orientés formulaire Alert : fenêtre d’alerte / boite de dialogue List : liste de String, préfixées d’une image TextBox : écran d’édition de texte Item : éléments de différents types (String, TextField,
DateField, Image …) Canvas : objet de base pour créer des écrans Command : encapsulation d’une action …
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 14
Environnement – J2ME
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 15
Synchronisation
Théorie la synchronisation est le processus qui compare des
données issues de 2 bases modifiées de façon indépendante, pour recréer 2 bases identiques
3 solutions possibles :• duplication : copie des informations du serveur, sans journal de
modification• réplication : copie des informations modifiées du serveur, le client
ne peut que consulter• « 2 ways » : envoi et réception des informations modifiées
réciproquement par le serveur et le client => problème de conflits d’informations
Pourquoi synchroniser ? bandes passantes faibles coûts de communication élevés pas de garantie de services canaux de communication non fiables
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 16
Synchronisation
La problématique « 2 ways » exemple : agenda partagé où 2 utilisateurs ont choisi un
rendez-vous avec le même client à la même heure 2 solutions :
• favoriser un utilisateur en fonction de priorités• les utilisateurs doivent résoudre le conflit
détection des conflits• GUID/LUID : les données possèdent un identifiant coté serveur et
un identifiant coté client• journal des modifications• TimeStamp : identification des données modifiées• niveau de granularité : écrasement des données ou sélection
individuelle
base miroir : déporter la problématique de conflits sur le serveur pour soulager la bande passante
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 17
Synchronisation
Base de données mobiles DataFiles : synchronisation avec le système de l’OS, mais
faibles performances et petit volume de données propriétaire à un IDE : performant au niveau développement
mais utilisation dépendante de l’IDE relationnelles : repose sur SQL, performantes, robustes,
compatibles. Interfaçage avec JDBC ou ODBC mais client de synchronisation spécifiques la plupart du temps
• IBM : DB2 Everyplace 8.1• Oracle : OracleLite 9i• PointBase : PointBase Micro
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 18
Synchronisation
Protocoles de synchronisation HotSync de Palm ActiveSync de Windows CE EPOC Connect de Symbian SyncML le standard
Serveur de synchronisation StarFish TrueSync Server
• http://www.starfish.com/solutions/data/server.html
XTNDConnect Server• http://www.extendedsystems.fr/ESIfr/default.htm
PointBase UniSync• http://www.pointbase.com
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 19
SyncML
SyncML standard pour uniformiser la synchronisation entre support
mobile et serveur
Version 1.0 (Déc. 2000) basé sur XML supporte les protocoles HTTP, WSP, Obex adopté par le 3GPP (3G Partnership Project) demain : norme de synchronisation pour la téléphonie
mobile ?
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 20
Spécification
Spécification SyncML Representation (format des données) et
Synchronisation (commandes) Structure
• un « SyncML Package » englobe un ou plusieurs « SyncML Message »• un « SyncML Message » est un document XML constitué de 2 balises :
<SyncHdr> et <SyncBody>• <SyncHdr> : entête définissant le routage et le versionning• <SyncBody> : corps du message composé de « SyncML Commands »
(Add, Delete, Replace, Get, Put, Sync, Map, Search, Copy, Exec …)
Orientée PIM (Personal Information Manager) Pas de sécurité
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 21
SynML Message
Exemple utilisé en TP Header
<SyncML><SyncHdr>
<VerDTD>1.0</VerDTD><VerProto>SyncML/1.0</VerProto><SessionID>1</SessionID><MsgID>2</MsgID><Target>
<LocURI>myPDA</LocURI></Target><Source>
<LocURI>http://127.0.0.1:8080/Novinfo/servlet/InfoSync
</LocURI></Source>
</SyncHdr>
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 22
SynML Message
Exemple utilisé en TP body
<SyncBody><Sync>
<CmdID>1</CmdID><Target><LocURI>infoDB</LocURI></Target><Source><LocURI>serverDB</LocURI></Source><Add>
<CmdID>4</CmdID><Meta><mi:Type>text/xml</mi:Type></Meta><Item>
<Source><LocURI>2021</LocURI></Source><Data>
<![CDATA[<info><title>test</title><content>l'info testé</content><date>19/12/2001</date></info>]]>
</Data></Item>
</Add><Delete>
<CmdID>5</CmdID><Meta><mi:Type>text/xml</mi:Type></Meta><Item>
<Source><LocURI>2022</LocURI></Source></Item>
</Delete></Sync>
</SyncBody>
</SyncML>
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 23
PointBase
Fondée en 1998 par Bruce Scott, co-fondateur d’Oracle Le slogan : l’information partout où vous la voulez ! Ensemble de 4 produits destinés à gérer les données d’entreprise :
PointBase Server : un RDBMS 100% Java pour les applications client/serveur à grande échelle (e-commerce, serveur d’applications …), intégrant JDBC, le transactionnel, et les connections multiples
PointBase Embedded : un RDBMS 100% Java pour les applications embarquées (genre agenda), intégrant JDBC, les connections multiples sur la même JVM
PointBase Micro : un RDBMS 100% Java pour les applications destinées au terminaux mobiles (PDA, téléphones), intégrant MIDP et une sous-classe de JDBC
PointBase UniSync : un framework de synchronisation bidirectionnel, pouvant s’interfacer avec des bases de données comme Oracle, MS SQL, intégrant la résolution de conflits et le filtrage de tables
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 24
PointBase UniSync
Permet de synchroniser des données entre des BDD compatibles JDBC
C’est une API qui se situe à la frontière entre JDBC et l’application cliente
3 types d’API sont disponibles suivant les plates-formes JAVA (J2EE, J2SE, J2ME)
Basé sur un modèle Publish/Subscribe client/serveur Les données qui transitent sont encryptées Utilise TCP/IP ou HTTP
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 25
Comment ça marche ?
Le SyncDataSource représente l’accès à la base de donnée compatible Java
Une classe SyncManager est appelée au démarrage pour configurer les SyncDataSource, les Hubs et les Spokes
SyncDataSource
Serveur
SyncDataSource
Client
Une classe Hub coté serveur publie les tables synchronisables Une classe Spoke coté client souscrit à cette publication
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 26
Publication
Une publication d’un Hub permet de diffuser Toutes les tables de la base Certaines tables Certaines tables avec un filtre Certaines colonnes de tables
Chaque publication est nommée, et c’est par ce nom que les souscriptions se soumettent
Le souscripteur ne peut synchroniser que sur les tables que la publication a diffusées
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 27
Souscription
Une souscription d’un Spoke permet Récupérer les tables publiées (getSnapshot()) Récupérer les modifications faites coté serveur
(getPointUpdate()) Mettre à jour les modifications locales (putPointUpdate()) Combiner les 2 points précédents (sync())
Un Spoke est créée en déterminant l’URL d’accès au Hub (saveHubURL())
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 28
Détection et résolution de conflits (1)
4 types de conflits sont détectés : UPDATE_UPDATE : 2 clients mettent à jour sur le serveur une
même ligne INSERT_INSERT : 2 clients insèrent une nouvelle ligne avec la
même clé primaire UPDATE_DELETE : un client met à jour une ligne supprimée
par un autre DELETE_UPDATE : un client supprime une ligne mise à jour par
un autre Un conflit n’est pas détecté si le deux clients mettent à jour une
information similaire 2 niveaux de résolution :
Au niveau de la publication Au niveau d’une table
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 29
Détection et résolution de conflits (2)
4 types de résolution : CR_NONE
• pas de détection de conflits, les mises à jour du client sont toujours valides
CR_SPOKE_WINS • détection du conflit, c’est le client qui impose sa mise à jour
CR_HUB_WINS • détection du conflit, c’est le serveur qui impose sa mise à jour
User-Defined • détection du conflit et appel d’un classe spécifique pour le résoudre
Exemples : Résolution de conflit au niveau publication :
• pub.setConflictResolver("CR_HUB_WINS") Résolution de conflit au niveau table :
• pub.setConflictResolver("PBPUBLIC.NameCard", "CR_HUB_WINS")
Résolution de conflit défini par l’utilisateur :• pub.setConflictResolver("PBPUBLIC.NameCard", "com.acme.MyConflictResolver")
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 30
Exemples (1) - Création d’un
Hub private static final String m_CDriver = "com.pointbase.jdbc.jdbcUniversalDriver"; private static final String m_CURL = "jdbc:pointbase://localhost:9092/hubdb"; private static final String m_CUser = "pbpublic"; private static final String m_CPassword = "pbpublic"; private static final String PUB = "Pub1"; private static final String HUBNAME = "Hub1";
public void configureHub2() { try { // First get an instance of the SyncManager SyncManager l_SyncManager = SyncManager.getInstance(m_CURL, m_CDriver, m_CUser, m_CPassword); // Check if the Hub already exists Hub l_Hub = l_SyncManager.getHub(HUBNAME); if(l_Hub == null) { // Create the Hub from the SyncManager l_Hub = l_SyncManager.createHub(HUBNAME); l_Hub.startServer(); } // Publish specified tables String[] tableNames = new String[]{"SCOTT.TABLE1", "SCOTT.TABLE2"};
// Check if the Publication already exists Publication l_Pub = l_Hub.getPublication(PUB); if(l_Pub == null) { // Create a new Publication l_Pub = l_Hub.newPublication(PUB, SyncDataSource.DEFAULT, tableNames); // Save the Publication l_Hub.publish(l_Pub); } } catch(Exception e) { // Handle the exception here } }
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 31
Exemples (2) - Création d’un
Spoke private static final String m_SDriver = "com.pointbase.jdbc.jdbcUniversalDriver"; private static final String m_SURL = "jdbc:pointbase://localhost:9093/spokedb"; private static final String m_SUser = "pbpublic"; private static final String m_SPassword = "pbpublic"; private static final String PUB = "Pub1"; private static final String SUB = "Sub1"; private static final String SPOKENAME = "Spoke1"; private static final String m_HubURL = "tcp://localhost:8123";
public void configureSpoke1() { try { // First get an instance of the SyncManager SyncManager l_SyncManager = SyncManager.getInstance(m_SURL, m_SDriver, m_SUser, m_SPassword); // Check if the Spoke already exists Spoke l_Spoke = l_SyncManager.getSpoke(SPOKENAME); if(l_Spoke == null) { // Create the Spoke from the SyncManager l_Spoke = l_SyncManager.createSpoke(SPOKENAME); // Save the URL to connect to the hub l_Spoke.saveHubURL(m_HubURL); } // Subscribe to Publication PUB. This should get all the SyncTables from the Publication // Check if the Subscription already exists Subscription l_Sub = l_Spoke.getSubscription(SUB); if(l_Sub == null) { SyncDataSource l_DataSource = l_SyncManager.getSyncDataSource(SyncDataSource.DEFAULT); // Get all the tablenames from schema "SCOTT" String[] tableNames = l_DataSource.getAllTableNames("SCOTT"); // Create a new Subscription l_Sub = l_Spoke.newSubscription(SUB, SyncDataSource.DEFAULT, PUB, tableNames); // Save the Subscription l_Spoke.subscribe(l_Sub); } // Get the full snapshot from the Hub l_Spoke.getSnapshot(SUB); } catch(Exception e) { // Handle the exception here } }
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 32
TP
Présentation du TP Objectif : développer une classe Java qui accèdent via
HTTP à un flux SyncML, interpréter ce flux et appliquer les commandes de synchronisation
L’application « Novinfo » :
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 33
TP
Modèle Objet
DBManager InfoSync
Parser
SyncMLHandler
SyncOperationsSyncOperation
HttpServlet
MIDlet
Vector
Info
Novinfo
Form
InfoForm
SyncAgent
startSync()
add() delete() update()
retrieveAll()
setDocumentHandler()
HttpConnection
SyncML
parse()
create() add()
getSyncOperations()
PointBase Micro DB
JDBC
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 34
TP
Utilisation de PointBase Unisync Remplacement de la tache précédente par une
synchronisation entre client (spoke) et serveur (hub) PointBase
Création d’un interface MIDP Ajout d’un composant de saisie d’une info
Réf. : IVF/NO/0029 v. 1.0© 2002 - ImproveIntroduction 35
Référence
IMPROVE74/80, rue Roque de Fillol
92800 PUTEAUX
Mail : [email protected] : http://www.improve.fr
Informations techniqueshttp://www.application-servers.com
http://www.improve-technologies.comhttp://wireless.java.sun.com
http://www.syncml.orghttp://www.pointbase.com