Practical RxJava

100 %
0 %
Information about Practical RxJava

Published on September 24, 2015

Author: SpringCentral

Source: slideshare.net

1. SPRINGONE2GX WASHINGTON, DC Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Practical RxJava By Simon Baslé @simonbasle

2. @Couchbase

3. the Plan & Goals

4. RxJava 101

5. migrate a Legacy application RxJava 101

6. migrate a Legacy application learn Operators of interest RxJava 101

7. migrate a Legacy application learn Operators of interest 9 steps + Q&A RxJava 101

8. Why?

9. Blocking it’s Evil, m’kay?

10. Blocking it’s Evil, m’kay?

11. we need asynchronous code

12. we need reactive asynchronous code

13. we need parallelisable asynchronous code

14. we need composable asynchronous code

15. we need readable asynchronous code

16. but how ?

17. Futures<T>?Callbacks?

18. Futures<T>?Callbacks? too easy to block (get) complex beyond 1 level of composition no composition have you heared of Callback Hell?

19. DocumentService.find("userId", new Callback<List<Document>>() { public void onSuccess(List<Document> result) { final List<String> jsonList = new ArrayList<String>(10); int taken = 0; for (Document doc : result) { if (taken >= 10) break; if (!doc.isStarred()) continue; taken++; final CountDownLatch rendezVous = new CountDownLatch(3); final JsonObject jsonBuffer = new JsonObject(); jsonBuffer.appendInt("id", doc.getId()); jsonBuffer.append("text", doc.getText()); CommentService.findForDoc(doc, new Callback<List<Comment>>() { public void onSuccess(List<Comment> comments) { final JsonObject commentArray = JsonObject.createArray(); CountDownLatch userLatch = new CountDownLatch(comments.size()); for (Comment c : comments) { JsonObject cj = new JsonObject(); cj.append("content", c.getText()); cj.append("date", c.getDate()); UserService.find(c.getUserId(), new Callback<User>() { public void onSuccess(User user) { cj.append("author", user.getName()); cj.append("nickname", user.getLogin()); Futures<T>?Callbacks? too easy to block (get) complex beyond 1 level of composition no composition have you heared of Callback Hell?

20. RxJava 101

21. RxJava 101

22. Netflix OpenSource

23. dual of Iterable - Iterator

24. Iterable - Iterator becomes Observable - Observer

25. Iterable - Iterator becomes Observable - Observer “Pull” “Push”

26. compose

27. compose asynchronous programs based on events

28. compose asynchronous programs based on events using observable sequences

29. the Reactive Manifesto reactivemanifesto.org

30. reactive-streams.org standardize on the jvm

31. reactive-streams.org standardize on the jvm akka - reactor - rxjava

32. Show Me how it works !

33. interface Observer<T>

34. interface Observer<T> onNext(T data)

35. interface Observer<T> onNext(T data) onCompleted()

36. interface Observer<T> onNext(T data) onCompleted() onError(Throwable t)

37. interface Observer<T> onNext(T data) onCompleted() onError(Throwable t)

38. Observable<T>

39. Observable<T> compose & chain a stream

40. Observable<T> subscribe an Observer<T>

41. so much Choice, you’ll see!

42. still lost… time to practice

43. The Legacyapp

44. Wow pool API? Much Legacy!

45. Doge Mining Pool Client (UI?) Rest Controller Rest Controller Rest Controller Rest Controller Service Service Service External API External API External APIDB L E G A C Y (sort of)

46. Doge Mining Pool Client (UI?) Rest Controller Rest Controller Rest Controller Rest Controller Service Service Service External API External API External APIDB

47. Doge Mining Pool Client (UI?) Rest Controller Rest Controller Rest Controller Rest Controller Service Service Service External API External API External APIDB

48. simple Creation1

49. Observable Factories ● just ● from ● create

50. Map

51. Revert back to Blocking ● toBlocking ● choose what item to return (first/last/single…)

52. Single

53. SingleOrDefault

54. Transform2

55. flatMap

56. reduce

57. Filter3

58. filter

59. Take

60. takeUntil

61. Count4

62. count

63. Side Effects5

64. doOnXXX ● doOnNext ● doOnError ● doOnCompleted ● doOnEach

65. Combine6

66. Level: Simple Concat

67. Level: Intermediate Merge

68. Level: Advanced Zip

69. Live & Let Dieand Retryoo7

70. Retry

71. a note on Hot vs Cold

72. OnErrorReturn

73. Chain8

74. Useful Operators ● zipWith ○ similar to zip but called from stream A instead of statically ○ combine both rates to get the final one

75. Oh Hey! ! WARNING - Incoming Product Owner !

76. "this free exchange rate API crashes too often, make it so we switch to an alternative paid API when it’s the case" - the Product Owner

77. "this free exchange rate API crashes too often, make it so we switch to an alternative paid API when it’s the case" - the Product Owner

78. "oh yeah and if you could go on and track costs of these calls it would be great" - the Product Owner, pouring himself a coffee Much Surprise Such Requirements wow

79. The Plan ● AdminService ○ add method+variable to track cost for this month ● ExchangeRateService ○ rate retrieval method similar to current one ○ use endpoint from exchange.nonfree.api.baseUrl ● switch thanks to OnErrorResumeNext ● use side effects ○ log when we switch & track the cost

80. OnErrorResumeNext

81. Clean-up Controllers9

82. Asynchronous Response ● prepare a DeferredResult<T> ○ that will be returned without blocking ● subscribe on stream ○ onNext: inject T via setResult ○ onError: create a DogePoolException and inject it via setErrorResult

83. This could be Generalized ● using ReturnValueHandler and a simple adapter of Observable to DeferredResult ● each time an Observable is returned, it’ll be converted into this adapter ○ WebAsyncUtils.getAsyncManager(...). startDeferredResultProcessing(...)

84. Testing ● using mockMvc’s andReturn() to get a MvcResult ○ assert status().isOk() and request().asyncStarted() ● trigger the async processing ○ mockMvc.perform(asyncDispatch(mvcResult)) ● from this point assert as before

85. TakeAway

86. Nonblocking code

87. without Callbacks

88. with a minimum of visual cluter

89. readable and understandable

90. Hope you loved it!

91. Q&A

92. Unless otherwise indicated, these slides are © 2013-2015 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Learn More. Stay Connected. @springcentral Spring.io/video To play with the workshop: http://bit.ly/PracticalRx 93

93. ➔ RxJava Logo and Marble Diagrams - ReactiveX Documentation http://reactivex.io ➔ Cat Attack - Static416 on Flickr ➔ Stormtroopers Series - J.D. Hancock http://photos.jdhancock.com/series/stormtroopers.html ➔ Blackhole with Corona - NASA on Wikimedia ➔ Ice & Fire Showdown - HOA420 on Wikimedia ➔ Gobot Toys- Tom Prankerd on Wikimedia ➔ Coffee Filter - Unsplash on Pixabay ➔ Abacus - Succo on Pixabay ➔ Still from Office Space - Copyright, 20th Century Fox By By-Nc By Cc0 By-Sa By Cc0 Cc0 © Credits (1/2)

94. ➔ Hand Reaching - Kinseykick on Pixabay ➔ Sidecar Motocross - Jean-Daniel Echenard on Flickr ➔ Twin Falls - Blese on Flickr ➔ Tumbeast Gnawing on Servers - Matthew Inman on Wikimedia ➔ Trap - Anticiv on Flickr ➔ Kane Cleaning Supplies - Collinanderson on Flickr ➔ Chain - Stomchak on Wikimedia ➔ Takeaway - Edimburgh Blog on Flickr ➔ The End Sands - Elektro-Plan on Pixabay Cc0 By-Nd By-Nc By By-Sa By By By Cc0 Credits (2/2)

Add a comment

Related pages

Practical RxJava - Jfokus

Doge Mining Pool Client (UI?) Rest Controller Rest Controller Rest Controller Rest Controller Service Service Service External API External API External API
Read more

Practical RxJava workshop v1 // Speaker Deck

A workshop to discover RxJava by migrating an application from classical blocking code to nonblocking reactive code. Skeleton for the workshop is on http ...
Read more

Practical RxJava workshop // Speaker Deck

v2 of the Practical RxJava workshop, first presented at JFokus 2016
Read more

GitHub - simonbasle/practicalRx: A RxJava workshop to ...

README.md Practical RxJava Workshop README. This project is the skeleton (and solution) for the PracticalRxjava workshop. The aim of the workshop is to ...
Read more

EQF-2815 Practical RxJava ∞ Devoxx

Java SE BOF 1: Thursday at 14:00 - 17:00: You already have heard about RxJava but wish for a practical and concrete ...
Read more

RxJava Essentials - Packt Publishing | Technology Books ...

Over 60 practical recipes on data exploration and analysis. ... RxJava Essentials. Essentials ... Create your first RxJava-powered Android app;
Read more

Reactive Programming using RxJava and Akka | Mrudul ...

... I found few practical tutorials but they never explained. ... Reactive Programming using RxJava and Akka. Dec 8, 2014. 3,285 views; 34 Likes; 5 Comments;
Read more