Hibernate-reactive: "рдЖрд░рдПрдХреНрд╕" рдирд╛рдо рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдорд╛рд░реНрдЪ 2020  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: hibernate/hibernate-reactive

Rx рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдпрд╛рдиреА RxJava) рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо рдХреЛ "рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рд░рд┐рдПрдХреНрдЯрд┐рд╡" рдпрд╛ рдХрд┐рд╕реА рднреА рдЕрдЧреНрд░рд┐рдо рднреНрд░рдо рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рдмрджрд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рддреЗрдЬреА рд╕реЗ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

//I want to try out Mutiny
Mutiny.SessionFactory sessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
Mutiny.Session session = sessionFactory.openReactiveSession();
Mutiny.Query = session.createQuery(hql);

рдпрд╛:

//I want to try it out with CompletionStage
Stage.SessionFactory sessionFactory = emf.unwrap(Stage.SessionFactory.class);
Stage.Session session = sessionFactory.openReactiveSession();
Stage.Query = session.createQuery(hql);

рдФрд░ рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ Mutiny рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

import static org.hibernate.reactive.mutiny.Mutiny.*;

...

SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
Session session = sessionFactory.openReactiveSession();
Query = session.createQuery(hql);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧ рдСрдЯреЛ-рдЖрдпрд╛рдд рдХреЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдиреНрдп рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВред)

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@emmanuelbernard WDYT?

рд╣рд╛рдБ, рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЛрдб рдирд╛рдо рдерд╛ред

рдареАрдХ рд╣реИ рддреЛ рд╣рдордиреЗ рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо рдореЗрдВ рдареЛрд╕ рд╣реЛрдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИ!

рдореИрдВрдиреЗ рдЗрд╕реЗ рдореБрдЭреЗ рд╕реМрдВрдкрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдЬрдм рддрдХ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЖрдкрддреНрддрд┐ рди рд╣реЛред

рдореИрдВ рдЗрд╕реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ

рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдХрд┐рд╕рдореЗрдВ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?

hibernate-reactive рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛

>

+1 рд╕реЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рд░рд┐рдПрдХреНрдЯрд┐рд╡

рдмреБрдзрд╡рд╛рд░, 1 рдЕрдкреНрд░реИрд▓, 2020 рдХреЛ рд╕реБрдмрд╣ 7:45 рдмрдЬреЗ рдбреЗрд╡рд┐рдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

hibernate-reactive рдмрд╣реБрдд рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛

>

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/hibernate/hibernate-rx/issues/77#issuecomment-607292426 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AADJJTIRGWQNUSN7FC3WCSLRKNHRJANCNFSM4LX6AEVQ
.

рдпрд╣ рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ ReactiveSession рдПрдХ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛...

рдореБрдЭреЗ HibernateRX : "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓" рд╣реЛрдирд╛ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдпрд╣ RxJava рдХрд╛ рдЯреНрд░реЗрдбрдорд╛рд░реНрдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдареАрдХ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╣рдЬрд╛рд░ рдмрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рддреНрд░ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдкреНрд░рдХрд╛рд░? рдЖрдкрдХреЗ рдХреАрдмреЛрд░реНрдб рдореЗрдВ рд╕реНрдкреЗрд╕ рдмрдЯрди рдирд╣реАрдВ рд╣реИ? :)

рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдирд╛рдо рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрддрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛? рдпрд╛ рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реИ?
рд╢рд╛рдпрдж рд╣рдо рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ R рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣рд╛рдВ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ (рдмреЗрдЭрд┐рдЭрдХ рдХреБрдЫ рдЕрд▓рдЧ рд╕реБрдЭрд╛рдПрдВ):

  1. org.hibernate.rx.RxSession (рд╡рд░реНрддрдорд╛рди)
  2. org.hibernate.rx.Session
  3. org.hibernate.reactive.ReactiveSession
  4. org.hibernate.reactive.Session
  5. org.hibernate.reactive.RSession
  6. org.hibernate.rx.RSession

рдХреЛрдИ рдЕрдиреНрдп рд╕реБрдЭрд╛рд╡?

рдореЗрд░реА рдХреЛрдИ рдордЬрдмреВрдд рд╡рд░реАрдпрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдирд╛рдо рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрддрдирд╛ рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рд╕реБрдкрд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

  1. class AbstracRxtEntityPersister extends RxEntityPersister
  2. class AbstracReactivetEntityPersister extends ReactiveEntityPersister

рдпрд╣ рдЕрднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдХрднреА-рдХрднреА рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИрдВ
RxAbstractEntityPersister

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд┐рдХрд▓реНрдк 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛: org.hibernate.reactive.ReactiveSession
рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреЗрд╣рддрд░ рд╕реБрдЭрд╛рд╡ рдпрд╛ рдордЬрдмреВрдд рд░рд╛рдп рд╣реИрдВред

рдореИрдВ 3 рд▓рд┐рдП рднреА рд╡реЛрдЯ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж @vietj рдХреА рднреА рдХреЛрдИ рд░рд╛рдп рд╣реИ?

рд╣рд╛рдБ, рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдЦреАрдВрдЪрд╛ рдФрд░ рдореИрдВ рдЖрдк рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ: ReactiveSession рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдореЛрдВ рдХреА рдХрдореА рд╕реЗ рдирдлрд░рдд рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╣реИрдХ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рд╣реЛрдЧрд╛ Reactive.Session , Reactive.Query , рдЖрджрд┐, рдХреБрдЫ Reactive рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╕реНрдерд┐рд░ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрднреА рдХрд┐рд╕реА рдФрд░ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 2 рдФрд░ 4 рдкрд╕рдВрдж рд╣реИрдВ:

  • org.hibernate.rx.Session
  • org.hibernate.reactive.Session

рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдмрддрд╛рдПрдВ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ "рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓" рд╣реИрдВред рдпрджрд┐ рд╣рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ Rx/Reactive рдЬреЛрдбрд╝рдирд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд░реНрдЧреЛрдВ рдХреЛ рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдЧрд░рд┐рдХреЛрдВ рдХреА рддрд░рд╣ рдмрдирд╛ рджреЗрддрд╛ рд╣реИред

рдЧреИрд░-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рдорд╛рди рд╡рд░реНрдЧ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрджрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рджреЛрдиреЛрдВ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рд░ рдЬрдЧрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдирд╛рдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ), рд▓реЗрдХрд┐рди AFAIK рдЬреЛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╣реЛрдирд╛?

рдореБрдЭреЗ рд╡рд┐рдХрд▓реНрдк 2 рдФрд░ 4 рдкрд╕рдВрдж рд╣реИрдВ:

  • org.hibernate.rx.Session
  • org.hibernate.reactive.Session

рдПрдлрдЯреАрдЖрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рднреА рдареАрдХ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕реНрд╡рдд: рдЖрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рдХрд╛ рдЬреЛрдЦрд┐рдо рдмрдврд╝рд╛рддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рддреНрд░ рдХреЗ рдХрдИ рд╕реНрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  • MutinySession рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд▓рд┐рдП
  • StagedSession рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ CompletionStage
  • рдЖрджрд┐

рдбрдмреНрд▓реНрдпреВрдбреАрд╡рд╛рдИрдЯреА?

рдХреНрдпрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡рд╛рджреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрд╡рд╛рджреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ?

"рдореБрдЦреНрдп" рдПрдкреАрдЖрдИ рдореЗрдВ Query рд╕рдордХрдХреНрд╖реЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ "рдЖрд░рдПрдХреНрд╕" рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреА рдЕрдВрдЧреВрдареА рд╣реИ, рдФрд░ рдпрд╣ рдЖрд░рдПрдХреНрд╕рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ _рд╕реНрд╡рд╛рдорд┐рддреНрд╡_ рдирд╣реАрдВ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛ рд╣реИ - рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд╛рдо рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред

рдЕрдиреБрдмрдВрдз рд╕рдВрд░рдЪрдирд╛ рдкрд░

рдореБрдЭреЗ Session рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЧреЗрд╡рд┐рди рдиреЗ рдмрддрд╛рдпрд╛, рдпрд╣ рдСрдЯреЛ рдкреВрд░реНрдгрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдЕрдзрд┐рднрд╛рд░ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП +1:

  • MutinySession , RxJava2Session , JDKReactiveSession (рд╕рдорд╛рдкрди рдЪрд░рдг рдФрд░ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП)
  • SessionMutiny , SessionRxJava2 рдЖрджрд┐

рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрдЯрд░реНрди рд╣реИ reactiveSession.forMutiny().[...] , reactiveSession.forJDK().[...] рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рджреБрдГрд╕реНрд╡рдкреНрди рдХрд╛ рдирд░рдХ рдмрдирд╛ рджреЗрдЧрд╛ред reactiveSession.unwrap(MutinySession.class) рдореВрд▓реНрдп рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИред

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдВрдХ:

  • Rx рдХреЗ 3 рд╕рдВрд╕реНрдХрд░рдг рдЕрд╕рдВрдЧрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
  • CompletionStage рдХрд╛ рднрд╛рдИ рдлреНрд▓реЛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ JDKReactiveSession
  • RxJava рдореЗрдВ рдХрдИ рдПрдХрд╛рдзрд┐рдХ рдФрд░ рдХрдИ рдПрдХрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ RxJavaXSession рд╡рд┐рдзрд┐ "рдУрд╡рд░рд▓реЛрдбреЗрдб" рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬреИрд╕реЗ fetchAsSingle() рдЖрджрд┐

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Query рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдордХрдХреНрд╖ рднреА рд╣реЛрдЧрд╛ред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╣реБрдЖ рдХрд┐ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реИрдкрд░ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ Uni<String>

рдирд╛рдо рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдУрдЖрд░рдПрдо рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдареАрдХ рд╣реИ hibernate-orm-reactive рд▓реЗрдХрд┐рди @FroMage "Panache Rx" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдЬрд╛рддрд╛ рд╣реИ?

@emmanuelbernard рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Session рдФрд░ SessionFactory рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рд╣реИ:

RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class);
RxSession session = sessionFactory.openRxSession();

рдореИрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рд╣реВрдВред

JDKReactiveSession

рдЙрд╣ред рдпрд╣ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рднрдпрд╛рдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреЛрдб рдореЗрдВ рдЗрддрдиреА рдмрд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Query рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рдордХрдХреНрд╖ рднреА рд╣реЛрдЧрд╛ред

рд╣рд╛рдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ RxQuery рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рддреЗрдЬреА рд╕реЗ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

//I want to try out Mutiny
Mutiny.SessionFactory sessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
Mutiny.Session session = sessionFactory.openReactiveSession();
Mutiny.Query = session.createQuery(hql);

рдпрд╛:

//I want to try it out with CompletionStage
Stage.SessionFactory sessionFactory = emf.unwrap(Stage.SessionFactory.class);
Stage.Session session = sessionFactory.openReactiveSession();
Stage.Query = session.createQuery(hql);

рдФрд░ рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ Mutiny рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдмрд╕ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ:

import static org.hibernate.reactive.mutiny.Mutiny.*;

...

SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
Session session = sessionFactory.openReactiveSession();
Query = session.createQuery(hql);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧ рдСрдЯреЛ-рдЖрдпрд╛рдд рдХреЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдиреНрдп рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВред)

рдпрд╣ рд╢рд╛рдирджрд╛рд░ рджрд┐рдЦрддрд╛ рд╣реИ @gavinking

@gavinking рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХрд╛ рдЕрдВрддрд┐рдо рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рд╡рд░реНрдЧ рдСрдЯреЛ-рдЖрдпрд╛рдд рдХреЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреЗ рдЕрдиреНрдп рдиреБрдХрд╕рд╛рди рднреА рд╣реИрдВред)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП?

@ рдбреЗрд╡рд┐рдб рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдбреАрдИ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдерд┐рд░ рдЖрдпрд╛рдд рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред)

@emmanuelbernard рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Session рдФрд░ SessionFactory рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рд╣реИ:

RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class);
RxSession session = sessionFactory.openRxSession();

рдореИрдВ рдЗрд╕ рдкреИрдЯрд░реНрди рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рд╣реВрдВред

JDKReactiveSession

рдЙрд╣ред рдпрд╣ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рднрдпрд╛рдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХреЛрдб рдореЗрдВ рдЗрддрдиреА рдмрд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдлреАрдбрдмреИрдХ рд╕реЗ, рд▓реЛрдЧ CompletionStage рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ RxJava рдпрд╛ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдЧрд░реАрдм рдЖрджрдореА рдХреА рдкрд╕рдВрдж рд╣реЛрдЧрд╛ред

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдлреАрдбрдмреИрдХ рд╕реЗ, рд▓реЛрдЧ рдХрдВрдкреНрд▓реАрд╢рдирд╕реНрдЯреЗрдЬ рд╕реЗ рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ RxJava рдпрд╛ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдЧрд░реАрдм рдЖрджрдореА рдХреА рдкрд╕рдВрдж рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИ? :-рдбреА

рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдлреАрдбрдмреИрдХ рд╕реЗ, рд▓реЛрдЧ CompletionStage рдирдлрд░рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ RxJava рдпрд╛ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдЧрд░реАрдм рдЖрджрдореА рдХреА рдкрд╕рдВрдж рд╣реЛрдЧрд╛ред

рдЬрд╝рд░реВрд░, рдореБрдЭреЗ рднреА рдЗрд╕рд╕реЗ рдирдлрд░рдд рд╣реИред

рдЖрдИрдбреАрдИ рдЖрдорддреМрд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рдЖрдпрд╛рдд рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

рдпрд╣ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рдмрд┐рдВрджреБ рд╣реИ, рдХрд┐ рдЖрдк Session рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ static Mutiny.Session рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдбреАрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ Mutiny.Session ред рдФрд░ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдЖрдпрд╛рдд рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдирд╛рдо рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдУрдЖрд░рдПрдо рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдареАрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ- @FroMage "

рд╣рд╛рдВред рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЛрдбрдиреЗрдо рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд рдмрд┐рдВрджреБ рд╣реИ, рдХрд┐ рдЖрдк рд╕рддреНрд░ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдИ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдордЬрдмреВрдд рд╣реИ: рд╡реЗ рдЕрднреА рднреА Mutiny.SessionFactory рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд╣рдореЗрдВ рд╢рд╛рдпрдж рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЖрдпрд╛рдд рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рднрд▓реЗ рд╣реА рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд╛рд╣рд┐рдП) .

@FroMage рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред IntelliJ рдореЗрдВ Settings > Code Style > Java > Imports рдкрд░ рдЬрд╛рдПрдВ ред рдЧреНрд░рд╣рдг рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд╣реИред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╡рд┐рджреНрд░реЛрд╣ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдкреАрдЖрдИ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд╛рдХреА рдХреБрдЫ compat рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ CompletionStage/Flow рд╕рдВрд╕реНрдХрд░рдг :-)

рдЕрджреНрдпрддрди рдХрд░реЗрдВ: рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреНрдпрд╛ рдпрд╣ рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдореНрдкреЗрдЯ рдореЗрдВ рд╕реЗрдВрдХрдирд╛ рд╣реИ? рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рджреНрд░реЛрд╣ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдкрд░ (рдмрд▓реНрдХрд┐ рдЫреЛрдЯрд╛) рдмреЛрдЭ рдбрд╛рд▓реЗрдВ, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░реЗрдВред

рдХреНрд▓реЗрдореЗрдВрдЯ рд╡рд┐рджреНрд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдореНрдкреЛрд▓рд┐рди рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреНрд░реЛрд╣ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдЪрд░реНрдЪрд╛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рджреЗрд╡ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИред рд╣рдо рд╕рднреА Hibernate Reactive рд╕рд╛рде рдЬрд╛рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ ... рдареАрдХ рд╣реИ?

рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд░рд┐рдорд╛рдЗрдВрдбрд░, рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрдбрд╝рд╛ рд╕реВрддреНрд░ рд╣реИ (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛):

рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡, рдареАрдХ рд╣реИ?

:рд╢реИрдВрдкреЗрди:

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрдбрд╝рд╛ рд╕реВрддреНрд░ рд╣реИ (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛):

рдХреНрдпрд╛ рдмрдбрд╝рд╛ рд╕реВрддреНрд░ рд╣реИ, рдПрдХ рд╣реА рдИрдореЗрд▓ рд╣реИ;)

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЕрднреА рднреА рд╣рд╛рдЗрдмрд░рдиреЗрдЯрдЖрд░рдПрдХреНрд╕ рдмреЗрд╣рддрд░ рдкрд╕рдВрдж рд╣реИ - рдореИрдВ рдбрдмреНрд▓реНрдпреВ/рд╕рдиреЗ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЖрд░рдПрдХреНрд╕рдЬрд╛рд╡рд╛ рдХреЗ рдкрд╛рд╕ "рдЖрд░рдПрдХреНрд╕" рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдИрдПрдордУ рд╣рд╛рдЗрдмрд░рдиреЗрдЯрдЖрд░рдПрдХреНрд╕ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдирд╛рдо рд╣реИред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХ рдирд╛рдо рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдмрд╕ рдореЗрд░рд╛ $0.02 рдФрд░ рдореИрдВ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдереНрд░реЗрдб w/рдЗрд╕ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЕрднреА рднреА рд╣рд╛рдЗрдмрд░рдиреЗрдЯрдЖрд░рдПрдХреНрд╕ рдмреЗрд╣рддрд░ рдкрд╕рдВрдж рд╣реИ - рдореИрдВ рдбрдмреНрд▓реНрдпреВ/рд╕рдиреЗ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЖрд░рдПрдХреНрд╕рдЬрд╛рд╡рд╛ рдХреЗ рдкрд╛рд╕ "рдЖрд░рдПрдХреНрд╕" рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдИрдПрдордУ рд╣рд╛рдЗрдмрд░рдиреЗрдЯрдЖрд░рдПрдХреНрд╕ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдирд╛рдо рд╣реИред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХ рдирд╛рдо рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдмрд╕ рдореЗрд░рд╛ $0.02 рдФрд░ рдореИрдВ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдереНрд░реЗрдб w/рдЗрд╕ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ @aguibert рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ Rx рдирд╛рдо рдореЗрдВ x рдХрд╛ рдХреНрдпрд╛
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ https://en.m.wikipedia.org/wiki/Reactive_extensions

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЖрд░рдПрдХреНрд╕ рд╕рд┐рд░реНрдл "рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрддреНрдкрд╛рдж рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛред рдЖрдИрдПрдордУ рдЬреЛ рд╣рдо рдпрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЕрднреА рднреА рдЙрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдо рд╕рд╣рдорддрд┐ рдХреЗ рдХрд░реАрдм рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрднреА рднреА "рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡" рдирд╛рдо рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗ, рдореИрдВ рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВред

рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдЗрдореИрдиреБрдПрд▓ рдХреЗ рдИрдореЗрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреЛрдИ рд╡рд┐рджреНрд░реЛрд╣ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ :)

Hibernate Reactive рдпрд╣ рд╣реИ! рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж @murphye рдФрд░ рд╕рднреА

#111 . рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЧрдпрд╛

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

yaakov-berkovitch picture yaakov-berkovitch  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gavinking picture gavinking  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Thomodachi picture Thomodachi  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pqab picture pqab  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hantsy picture hantsy  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ