Cod: JVA-074
Durata: 36 ore
Durata: 36 ore
Descriere
In cadrul cursului nostru ne concentram pe abordarea reactiva si functionala in ceea ce priveste programarea cu Java (pentru a imbunatatii performanta in backend). Trainingul include tematici legate de non-blocking input/output NIO2, asynchronous promises CompletableFuture, reactive programming libraries RxJava si Reactor, async DB access interface R2DBC si altele. Discutam si despre streaming protocol SSE, reactive Spring Data repositories, WebClient, WebSocket and RSocket protocols.Subiecte curs
Functional Java- Interfete functionale
- Method references
- Data streams
- Map/filter/reduce
- Aggregation functions
- Reducerea procesarii paralele si secventiale
- Consumers chaining
- Stream collectors
Executor framework. Fork Join pool
- Folosirea executors
- Future interface
- Utilizarea Callable interface
- Anularea sarcinilor
- ForkJoin framework
- Crearea de ForkJoin pool si sarcini
- Parallel Streams in Java 8+
- ForkJoin vs. Parallel streams vs. Sequental benchmarks
Non-blocking Input/Output
- Diferente majore intre Java NIO si IO
- NIO Channel vs. Stream
- Stream Oriented vs. Buffer Oriented
- Blocking vs. Non-blocking IO
- Java NIO Buffer
- Java NIO Channel
- Direct buffer
- Mapped file buffer
- Java NIO Selector
- Asynchronous I/O with NIO
- File lock
- Production-ready NIO server
- Netty server architecture
Asynchronous Java (Completable Future)
- Probleme legate de synchronous code
- Arhitectura NodeJS
- Procesarea paralela a data flow
- Metode CompletableFuture sync si async
- Metode combining, composing, si quicker win
- Handling exceptions in CompletableFuture
- Cancellation of CompletableFuture
- Utilizarea CompletableFuture pentru Data Flow
Reactive programming
- Ce este reactivitatea?
- Elemente de baza RxJava: Observer si Observable
- Java 9 Reactive Streams
- Side effect methods
- Error handling
- Hot and cold observables
- Shared and connectable observables
- Disposing observables
- Reactive operators (full catalog)
- Subjects
- RxJava concurrency (Schedulers)
- Backpressure and flowables
- Testing reactive streams
Project Reactor
- Reactor Maven dependencies
- Flux/Mono Reactor operators
- Handling backpressure with Reactor
- Reactor Schedulers
- Parallel Flux
- Wrapping a synchronous blocking calls
- Testing with Reactor
- Reactor processors
Spring WebFlux and practical reactive programming
- Reactive access to DB
- Reactive R2DBC drivers
- Spring Data reactive repository
- Pagination support
- WebFlux: Functional-based controllers
- Spring REST controllers returning reactive results (Mono/Flux)
- Spring REST controllers returning SSE
- WebClient: retrieving reactive data from the server
- SSE si WebSocket protocols
- Utilizarea WebSocket to pass/retrieve JSON data
- Utilizarea WebSocket to pass/retrieve binary data
- Protocolul RSocket
- RSocket controller: server side
- RSocket client cu JSON si binary data exchange
- RSocket cu load balancing
- RSocket cu weighted load balancing
- Folosirea reactive streams cu message broker (RabbitMQ)
- Spring Data MongoDB repository
- Reactive benchmarks: R2DBC vs JDBC si WebFlux vs Web MVC
- Architecture si Patterns ale reactive programming
Obiective
- Oferim o introducere in programarea asincrona si reactiva
- Exemple legate de modul in care sunt folosite programarea asincrona si reactiva
Public tinta
- Programatori Java
- Arhitecti software Java
Cerinte curs
- Cunostinte bune de Java (cunostinte legate de Spring sunt utile)