Vous êtes sur la page 1sur 51

Des solutions de

synchronisation de données
Webinaire du 18 décembre 2018

(c) Patrick Prémartin / developpeur-pascal.fr


Au menu du jour

• Introduction
• C’est quoi une donnée ?
• Cas pratiques et solutions
• Synchro à l’intérieur d’une fiche avec Live Bindings
• Synchro sur le réseau local et en Bluetooth avec App Tethering
• Synchro via Internet avec DataSnap
• Synchro via Internet avec les composants TCP/IP
• Cas client : l’application Intelli7 3.x et son cloud maison
• Conclusion
• Questions / réponses

(c) Patrick Prémartin / developpeur-pascal.fr


Introduction

(c) Patrick Prémartin / developpeur-pascal.fr


Introduction

• Présentation de la société Olf Software


https://www.olfsoftware.fr
• Présentation de Patrick Prémartin
https://www.linkedin.com/in/patrickpremartin/
• Les différentes versions de Delphi
https://www.embarcadero.com/fr/products/delphi
• Voir ou revoir les webinaires précédents
https://vasur.fr/webinairesdelphi

(c) Patrick Prémartin / developpeur-pascal.fr


A propos de Olf Software

• Depuis octobre 2001 la société de services Olf Software propose des


prestations de conseil, développement et formation sur les
technologies liées au web et au développement logiciel.

• La société édite également des livres, des sites Internet et des


logiciels.

• Site web principal : https://olfsoftware.fr

(c) Patrick Prémartin / developpeur-pascal.fr


Organisme de formation

• Olf Software propose des formations en lien avec Delphi.

• Des formations inter entreprises sont organisées régulièrement et


annoncées sur https://se-former-a-delphi.fr/

• Des formations intra entreprise personnalisées sont faisables sur demande


partout en France et en Europe.

• Olf Software est un organisme de formation professionnelle enregistré en


préfecture et référencé sur Datadock.
Nos formations peuvent être prises en charge par les OPCA.

(c) Patrick Prémartin / developpeur-pascal.fr


Et votre hôte pour ce webinaire

• Ancien utilisateur de Turbo Pascal, amoureux de Delphi depuis toujours,


développeur web depuis NCSA Mosaic…

• Prestataire et formateur à travers sa société Olf Software.

• Editeur du blog https://developpeur-pascal.fr/

• MVP Embarcadero depuis octobre 2017.

• Auteur d’articles, de livres, webinariste et parfois même conférencier.

(c) Patrick Prémartin / developpeur-pascal.fr


Les versions de Delphi

• Plusieurs licences de Delphi existent (vendu seul ou dans RAD Studio):


• Academic : pour les établissements d’enseignement et leurs étudiants
• Community Edition : gratuit pour tous, en licence commerciale limitée
• Professional, Enterprise, Architect : pour les entreprises, selon leurs besoins

• Pour toutes informations sur les licences et les tarifs contactez la


société Barnsten sur https://www.barnsten.com/fr/

(c) Patrick Prémartin / developpeur-pascal.fr


Les webinaires précédents

• Je participe régulièrement à des webinaires organisés par la société


Barnsten. Une page leur est consacrée sur le blog à l’adresse
https://vasur.fr/webinairesdelphi

• Vous y trouverez les rediffusions en vidéos lorsqu’elles sont


disponibles, un PDF de mes présentations, le lien vers les sources des
exemples présentés et des informations complémentaires.

(c) Patrick Prémartin / developpeur-pascal.fr


C’est quoi une donnée ?

(c) Patrick Prémartin / developpeur-pascal.fr


C’est quoi une donnée ?

• On parle de données d’une manière générale mais il en existe


plusieurs types dans différents types de stockages.

• Les données peuvent être textuelles (avec ou sans encodage) ou


binaires.

• Les types de stockages peuvent être des flux, des variables, des
fichiers ou des bases de données.

(c) Patrick Prémartin / developpeur-pascal.fr


Les variables et flux de données

• D’une façon générale on n’échange pas directement des variables ou


des flux mais ils peuvent servir de support au transfert d’informations
selon les technologies et composants utilisés.

• Les flux (TStream et ses descendants) sont omniprésents dans la RTL


et les librairies de Delphi et C++Builder. Ils permettent de basculer des
données vers des zones mémoires et les traiter sans se préoccuper de
leur type d’origine.

(c) Patrick Prémartin / developpeur-pascal.fr


Les fichiers

• Les fichiers sont l’un des deux conteneurs de données que l’on
échange le plus.

• On peut transférer directement les fichiers ou leur contenu selon la


technologie et le besoin.

• Le cas le plus courant d’échange de fichiers que nous utilisons tous au


quotidien c’est Internet puisque ce n’est que du transfert de fichiers
du serveur vers le butineur.

(c) Patrick Prémartin / developpeur-pascal.fr


Les bases de données

• Avec les fichiers ce sont les bases de données qui sont l’autre conteneur de
données qui s’échange le plus ou dont on synchronise les contenus.

• Certaines bases de données sont stockées sous forme de fichiers


facilement échangeable (comme SQLite ou Interbase).

• Certaines bases de données permettent d’elles-mêmes la réplication de


leurs contenus ou la synchronisation de données en fonction des
utilisateurs (Interbase avec ses change views par exemple).

• Il y a aussi des bases qui ne permettent pas de se synchroniser seules.

(c) Patrick Prémartin / developpeur-pascal.fr


Qu’allons-nous synchroniser ?

• Dans les exemples de technologies que j’ai choisis de vous montrer


aujourd’hui nous allons faire un peu de tout, mais pas forcément de
façon automatique.

• Un peu de codage ne peut pas faire de mal et permet surtout de faire


ce que l’on veut quand on veut.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratiques
et solutions

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 1 : des fichiers sont créés sur un logiciel et doivent être transférés
à un autre sur le même ordinateur.

=> Enregistrer le fichier dans un dossier, parcourir ce dossier


régulièrement depuis l’autre logiciel.
=> Utiliser un socket en localhost entre les deux programmes.
=> Utiliser du client/serveur en TCP/IP entre les deux programmes.
=> Utiliser AppTethering qui simplifie grandement les choses
(quand on n’a pas de problème avec le firewall de l’ordinateur).

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 2 : des fichiers sont créés sur un logiciel et doivent être transférés
à un autre logiciel ailleurs sur le même réseau local.

=> Utiliser du client/serveur en TCP/IP entre les deux programmes si


celui devant recevoir le fichier est localisable.
=> Utiliser AppTethering qui simplifie grandement les choses
(quand on n’a pas de problème avec le firewall des ordinateurs).

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 3 : des fichiers sont créés sur un logiciel et doivent être transférés
à un autre logiciel ailleurs sur Internet.
=> Si les deux ordinateurs peuvent dialoguer directement le plus
simple est de faire du client/serveur avec WebBrocker, DataSnap ou
RAD Serveur.
=> Si les deux ordinateurs ne peuvent pas discuter, on peut passer par
un serveur intermédiaire, un envoi d’email avec pièce jointe, un
transfert FTP, un envoi en POST à un site web ou un stockage du
fichier sur un cloud.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 4 : des fichiers sont créés sur un logiciel et doivent être transférés
à un autre logiciel sur des appareils à proximité mais sans réseau
TCP/IP.

=> On peut utiliser des sockets en bluetooth si les deux appareils sont
équipés.
=> On peut utiliser AppTethering en bluetooth (mais il fonctionne en
BT classique donc pas sur iOS qui n’a que du BT LE).

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 5 : on désire dupliquer une base de données.

=> Le plus simple reste de transférer la base de données en tant que


fichier si on peut en conserver le format et qu’on reste sur la même
base.
=> On peut faire un dump de la base et l’exporter/réimporter tout
simplement grâce aux composants de FireDAC. L’échange des
informations restant équivalent à un transfert de fichier.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 6 : on désire accéder en temps réel à une base de données


distante.

=> Si le moteur de base de données ne le permet pas, que l’on est sur
un réseau TCP/IP, le plus pratique est d’utiliser DataSnap.
=> On peut aussi développer une API en REST pour accéder aux
données à distance si le langage utilisé des deux côtés n’est pas le
même.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 7 : on désire travailler sur une base de données en conditions de


mobilité (avec coupures de connexion possibles).
=> L’utilisation de FireDAC avec un cache des données et de leurs
modifications est le plus simple si le driver de la base de données
existe sur la plateforme utilisée.
=> Si la première solution n’est pas possible on doit passer par du
transfert de bases (dump en JSON, XML ou BIN) et synchroniser
ensuite les mises à jour s’il y en a, soit à la main quand elles sont
compliquées, soit par transfert du journal des mises à jour.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas pratique et solutions

• Cas 8 : on travaille à plusieurs sur des bases de données non centralisées


(des bases locales ou des bases différentes) et on désire synchroniser ce
que l’on fait.
=> C’est le cas le plus complexe, mais il peut se régler en pensant
correctement la structure de la base de données et en mettant en place un
système de réplication des mises à jour.
=> On peut soit passer par un serveur intermédiaire qui sert de référence
pour la base, soit utiliser AppTethering pour connecter tout le monde
ensemble (si on est en réseau local) et s’échanger les journaux de mises à
jour des données.
(c) Patrick Prémartin / developpeur-pascal.fr
Synchro à l’intérieur d’une
fiche avec Live Bindings

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec Live Bindings

• La technologie Live Bindings est destinée à synchroniser des données


entre composants d’une même fiche.

• Les Live Bindings sont utilisés soit à la main à travers un expert, soit
visuellement à travers le concepteur Live Bindings présent sur le
concepteur de fiches VCL et FMX.

• Live Bindings fonctionne sur les propriétés de composants


compatibles.

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec Live Bindings

• Pour en savoir plus sur Live Bindings :


https://vasur.fr/livebindings

• Vous y trouverez des vidéos, des liens vers la documentation


officielle, les excellents tutoriaux de Serge Girard et quelques articles
complémentaires.

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro à l’intérieur d’une
fiche avec Live Bindings
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro sur le réseau local et
en Bluetooth avec App Tethering

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec App Tethering

• App Tethering est une technologie destinée à dialoguer simplement


entre applications développées avec Delphi ou C++Builder.

• La connexion s’établit soit en bluetooth (sauf iOS) soit en UDP&TCP


sur le réseau local.

• Le tout est géré par une série de composants présents dans l’unité
System.Tether :
http://docwiki.embarcadero.com/Libraries/Rio/en/System.Tether

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec App Tethering

• Grâce à l’App Tethering on peut synchroniser des propriétés de composants


entre plusieurs logiciels, échanger des messages ponctuels ou sous forme
de flux et faire du RPC (Remote Procedure Call) en exécutant des actions à
distance.

• Plusieurs exemples d’applications utilisant l’App Tethering sont disponibles


dans les exemples fournis par Embarcadero.

• Un tutoriel bien conçu a été écrit en 2015 par Malcolm Groves à la sortie
des composants AppTethering. Il est disponible à cette adresse :
http://www.malcolmgroves.com/blog/?p=1842

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec App Tethering

• Chaque logiciel doit avoir un TTetheringManager qui gère le type


d’accès au réseau (IP ou BT), le broadcast auprès des autres appareils
visibles et les appairages.

• Ensuite les logiciels peuvent avoir un ou plusieurs


TTetheringAppProfile qui s’occupent des échanges d’informations et
de la synchronisation des données partagées.

• Le dialogue s’effectue soit automatiquement, soit par l’intermédiaire


de messages passant par le manager.

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro sur le réseau local et
en Bluetooth avec App Tethering
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro via Internet
avec DataSnap

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec DataSnap

• La technologie DataSnap a été créée pour permettre d’accéder à tout type


de données à distance en créant une source de données qui se connecte en
réseau à un serveur, lui-même connecté à la vraie source de données.

• DataSnap permet également de gérer du RPC et de faire des appels de


procédures et fonctions à distance.

• La documentation est disponible sur


http://docwiki.embarcadero.com/RADStudio/Rio/en/Developing_DataSna
p_Applications
(c) Patrick Prémartin / developpeur-pascal.fr
La synchro avec DataSnap

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro via Internet
avec DataSnap
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro via Internet avec
les composants TCP/IP

(c) Patrick Prémartin / developpeur-pascal.fr


La synchro avec TCP/IP

• Avec Delphi et C++Builder on a des composants permettant de


travailler directement avec les sockets, HTTP ou REST. On peut par
conséquent faire tout ce qu’on veut à la main.

• Web Brocker, DataSnap et RAD Server sont disponibles pour gérer la


partie serveur si on veut travailler avec les composants HTTP ou REST
mais on peut aussi développer en PHP ou n’importe quel autre
langage.

(c) Patrick Prémartin / developpeur-pascal.fr


Synchro via Internet avec
les composants TCP/IP
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Cas client : Intelli7 3.x
et son cloud maison

(c) Patrick Prémartin / developpeur-pascal.fr


Intelli7 et son cloud maison

• Intelli7 est un cas intéressant pour les contraintes que l’on a mis dans
le projet en terme de données et de réplication.

• Le logiciel a été développé sous Delphi avec FireMonkey.

• Il fonctionne sous Windows, Mac et sur tablettes pour iOS et Android.

• Chaque utilisateur a des droits différents et ses propres données mais


il leur est possible d’en transférer à d’autres utilisateurs.

(c) Patrick Prémartin / developpeur-pascal.fr


Intelli7 et son cloud maison

• Le logiciel travaille avec des fichiers chiffrés, INI, JSON, texte ou


images.

• Chaque utilisateur doit avoir accès à ses fichiers de façon instantanée


(ou quasiment) et à ses mises à jour quel que soit l’appareil sur lequel
il travaille.

• Il a été nécessaire de verrouiller l’arborescence de stockage pour


éviter les erreurs de manipulations, les virus, ransomwares et autres
malwares.

(c) Patrick Prémartin / developpeur-pascal.fr


Intelli7 et son cloud maison

• La solution choisie a tout simplement été de stocker les fichiers en


base de données. C’est le plus pratique pour éviter les manipulations
extérieures et ça donne des possibilités de réplications selon le
moteur de base choisi.

• Sur les différents appareils exécutant le logiciel nous sommes partis


sur des bases SQLite.

• La synchronisation se fait ensuite avec un ou plusieurs serveurs selon


des critères internes.

(c) Patrick Prémartin / developpeur-pascal.fr


Intelli7 et son cloud maison

• Je parle de réplication mais en fait c’est plus de la synchronisation de


modifications gérée à travers une structure de base de données
spécifique et une API gérée côté Delphi et côté PHP sur les serveurs.

• Nous avons donc créé un mini cloud maison pour chaque utilisateur,
synchronisé en temps réel entre tous les appareils du même
utilisateur et son serveur de référence.

• Les mêmes fonctionnalités d’accès et d’édition des fichiers dans les


« clouds » sont disponibles sous Delphi et en PHP.

(c) Patrick Prémartin / developpeur-pascal.fr


Intelli7 et son cloud maison

• Les fichiers sources du programme ne sont pas diffusables. Une


version indépendante de la librairie gérant ce cloud maison est
envisagée.

• Pour le moment je ne peux que vous montrer comment tout ceci


s’articule à travers une démonstration.

(c) Patrick Prémartin / developpeur-pascal.fr


Cas client : Intelli7 3.x
et son cloud maison
Démonstration

(c) Patrick Prémartin / developpeur-pascal.fr


Conclusion

(c) Patrick Prémartin / developpeur-pascal.fr


Conclusion

• J’ai choisi quelques techniques permettant de faire des échanges


d’informations et de synchroniser des choses entre logiciels à partir
de fonctionnalités fournies dans Delphi.

• Ce n’est pas un choix exhaustif.

• J’aurais aussi pu parler des fonctions de cache et de journalisation


incluses dans les composants FireDAC, de RAD Server, d’Interbase et
ses change views, de TMS Echo, de TMS RemoteDB ou de plein
d’autres solutions pour échanger et synchroniser des données.

(c) Patrick Prémartin / developpeur-pascal.fr


Conclusion

• Ce webinaire et les sources des démos seront rapidement mis à


disposition sur le blog https://developpeur-pascal.fr

• Les prochains événements en live :


=> les meetups et présentations continuent en 2019

• Les prochains événements en ligne :


=> les dates et sujets seront annoncés début janvier

• Surveillez vos emails et la page https://www.barnsten.com/fr/events


(c) Patrick Prémartin / developpeur-pascal.fr
Questions / réponses

(c) Patrick Prémartin / developpeur-pascal.fr

Vous aimerez peut-être aussi