Лекция на Траян Илиев по време на пролетния семинар на BGOUG


java-lambda-expression

Пролетният семинар на Българската Група на Потребителите на ORACLE ще се проведе от 2 до 4 юни 2017 г. в хотел РИУ Правец Резорт.

На 2 юни петък от 10.30 ч. е лекцията на Траян Илиев от IPT с тема Non-blocking Asynchronous Stream Processing using CompletableFuture and Flow in Java 9.

Абстракт:
Поточната обработка на данни / събития / съобщения става предпочитан начин за постигане на оперативна съвместимост и комуникация в реално време при разпределените SOA / microservice / бази данни архитектури. Освен ламбда, Java 8 представи два нови приложни програмни интерфейса (API), които изрично се занимават с обработката на потоци от данни:

  • Stream – който е базиран на PULL и лесно се паралелизира;
  • CompletableFuture / CompletionStage – които позволяват съставянето на PUSH-базирани, неблокиращи, асинхронни data processing pipelines.

По отношение на функционалното реактивно програмиране (FRP) те изпълняват два основни вида потоци събития:

  • cold event streams – pull-базирани, изпълнявани мързеливо когато има търсене;
  • hot event streams – push-базирани, неблокираща асинхронна обработка на събития в реално време, по-сложни изисквания за синхронизация и синхронизацияуфериране, дроселиране, график и т.н.).

Java 9 ще осигури по-нататъшна поддръжка за поточна обработка на данни чрез разширяване на CompletableFuture с допълнителна функционалност– поддръжка за закъснения и изчаквания, по-добра поддръжка за подкласиране и нови методи за комунални услуги. Освен това Java 9 предоставя нов специален java.util.concurrent.Flow API за изпълнение на реактивни потоци, който позволява реактивно програмиране и оперативна съвместимост с библиотеки като Reactor, RxJava, RabbitMQ, Vert.x, Ratpack и Akka.
Презентацията ще обсъди новостите в Java 8 и Java 9, поддържащи обработката на поточни данни, описващи приложните програмни интерфейси (API), моделите и практическите подробности за внедряването на асинхронни тръбопроводи, обработката на грешки, многонишковото изпълнение, работата с специални нишки като GUI конец, оперативната съвместимост със съществуващи библиотеки и платформи.
Ще бъдат предоставени примери с помощта на:

  • Completable Future и Flow със JAX-RS 2.0 AsyncResponse,
  • unit-тестване на асинхронни REST услуги;
  • CDI 2.0 asynchronous observers (fireAsync / @ObservesAsync);
  • RabbitMQ, Reactor and RxJava integrations.