RxJava est une des nombreuses implémentations du concept de reactive programming.
Ce concept est une extension du pattern Observer et permet la composition de séquences basées sur des évènements asynchrones. Rx apporte également de nouveaux opérateurs et une approche fonctionnelle du traitement des séquences.
Par Jérome Doucet et Romain Niveau, consultants chez Xebia
10. 3 méthodes principales
Pattern Observer
• OnNext
• Appelée après chaque évènement
• OnError
• Appelée lorsqu’une erreur survient
• OnCompleted
• Appelée à la fin de la séquence
10
19. Créations
Séquences
• Et il en existe pleins d’autres :
• just(), repeat(), repeatWhen(), defer(), range(), interval(),
timer(), empty(), error(), never().
• Une extension (rxjava-async) permet de créer des Observables
à partir de fonctions.
19
21. Inspection
Séquences
• Les séquences peuvent être inspectées.
• Les méthodes suivantes peuvent être utilisées :
• all(), contains(), exists(), isEmpty(), sequenceEquals()
21
23. Agrégation
Séquences
• RxJava propose des opérateurs d’agrégation courants
• Ils vont permettre de présenter la donnée sous une forme qui va
faciliter son exploitation
• Ils sont en partie inspirés d’opérateurs fonctionnels.
• Quelques exemples…
23
26. Agrégation
Séquences
• L’opérateur reduce est aussi présent, ainsi que d’autres
permettant de convertir la séquence en Collections (toList(),
toMap(), toSortedList(), …)
• Une extension (rxjava-math) permet de faire des agrégations
sur des nombres
• Deux autres opérateurs permettent de faire des agrégations sur
des String uniquement, join() et stringConcat()
26
31. Principes de base
Gestion d’erreurs
• Aucune exception levée hors de l’Observable par défaut
• Si onError lève une exception, celle ci remonte dans une OnErrorFailedException
• OnErrorNotImplementedException est levée si l’Observer n’a pas de onError
• CompositeException encapsule l’ensemble des exceptions
31
36. Combinaison de séquences
• Répond aux besoins de fusion entre plusieurs sources de
données.
• Permet d’arbitrer des sources de données concurrentes.
• Permet de corréler les événements issus de plusieurs sources
de données.
36
43. Scheduler
Concurrency
• Basée sur des Schedulers fourni par RxJava :
• computation()
• from(Executor)
• immediate()
• io()
• newTread()
• trampoline()
• Peuvent être utilisés directement
• Mais il existe des raccourcis
43
47. Conclusion
• Framework uniquement pour la gestion d’évènements
• Ne sert pas à faire des appels asynchrones
• Framework complexe qui demande du temps de prise en main
• Utilisé dans des outils open source: Hystrix, rx-vertx
47