рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╖,
рдЬрд╛рд╡рд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЙрдиреНрдЪ
рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдВрддрд┐рдо рд╕рд╛рдордЧреНрд░реА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрддреНрддрд░рджрд╛рдпреА рдЙрддреНрддрд░рджрд╛рдпреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдордВрдЪрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред
рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдЙрднрд░рддреЗ рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдирд╛рдо рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрджреНрдзрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдирд╛-рдЙрдиреНрдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдЧрд╛рддрд╛рд░ рд╡рд░реНрддрдорд╛рди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди "рдСрдмреНрдЬрд░реНрд╡рд░" рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рдХреЛрдИ рд░рд╛рдЬреНрдп рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп, рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдШрдЯрдирд╛ рдХреЗ рднреЗрдЬрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рд╣реИред
рд▓рдЧрднрдЧ рд╕рднреА рднрд╛рд╖рд╛рдПрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рдЕрдкрдиреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдИрдИ 8 рдФрд░ рдЬрд╛рд╡рд╛ 8 рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬреЗрдПрдПрдХреНрд╕-рдЖрд░рдПрд╕ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬреЗрдЯ рдореИрдиреАрдлреЗрд╕реНрдЯреЛрдЬреЗрдЯ рдореИрдирд┐рдлреЗрд╕реНрдЯреЛ рдореЗрдВ рдЪрд╛рд░ рдореВрд▓рднреВрдд рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрдХ рдЖрд╡реЗрджрди рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛, рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдЙрддреНрддрд░рджрд╛рдпреА, рд▓рдЪреАрд▓рд╛ (рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдХреЗрд▓реЗрдмрд▓), рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕рдВрджреЗрд╢-рдЪрд╛рд▓рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд▓рдХреНрд╖реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрддрд░рджрд╛рдпреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рдзрд╛рдЧрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдзрд╛рдЧрд╛ рдореВрд▓ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИред рдЬрдм рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереНрд░реЗрдб рдПрдХ рдЕрдбрд╝рдЪрди рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдиреА рдкреВрд░реНрд╡ рдЬрд╡рд╛рдмрджреЗрд╣реА рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЬрд╡рд╛рдмрджреЗрд╣реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд╡реЗрджрди рдХреЛ рдорд╛рдкрдиреАрдп рдФрд░ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╕реНрдЯреЗрдиреЗрдмрд▓ рдХреЛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдЯреЛ-рд░рд┐рдХрд╡рд░реА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдХреЗрд▓реЗрдмрд▓, рд▓рдЪреАрд▓рд╛ рдФрд░ рдЙрддреНрддрд░рджрд╛рдпреА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ 8 рдФрд░ рдЬрд╛рд╡рд╛ рдИрдИ 8. рдореЗрдВ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред рдЬрд╛рд╡рд╛ рдиреЗ
CompletableFuture
рдФрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдСрдл
CompletableFuture
рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рдЬрд╛рд╡рд╛ рдиреЗ рдЬреЗрд╕реАрдПрд╕-рдЖрд░рдПрд╕ рдореЗрдВ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред
JAX-RS 2.1 рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИрдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдИрдИ 8 рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдИрдИ рдПрдкреАрдЖрдИ рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
JAX-RS 2.1 рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде REST рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ред JAX-RS рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдирд╡реЙрдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдордХрд╛рд▓рд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рднреЗрдЬреЗрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1
Response response = ClientBuilder.newClient() .target("http://localhost:8080/service-url") .request() .get();
рд╕рдВрд╕реНрдХрд░рдг 2.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, JAX-RS рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд┐рдиреЗрдо рдкрд░ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирд╡реЙрдХрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд╕
async()
рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреЙрд▓ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2
Future<Response> response = ClientBuilder.newClient() .target("http://localhost:8080/service-url") .request() .async() .get();
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирд╡реЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреНрд░рдХрд╛рд░
javax.ws.rs.core.Response
рдХрд╛ рдПрдХ
Future
рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреЛрд▓рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ,
future.get()
рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде
future.get()
, рдпрд╛ рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЬрд┐рд╕реЗ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рджреЛрдиреЛрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреАрдЬреЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдпрджрд┐ рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЛ рд╕рдореВрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЗрди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдорд┐рдиреАрдорд╛ рдореЗрдВ рд╕рд╢рд░реНрдд рдорд╛рдорд▓реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
JAX-RS 2.1 рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирдП JAX-RS рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ API рдХреЗ рд╕рд╛рде рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд┐рд▓реНрдб рдХреЗ рджреМрд░рд╛рди
rx()
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3 рдореЗрдВ,
rx()
рд╡рд┐рдзрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдореМрдЬреВрдж рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдЗрдирд╡реЙрдХрд░ рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЯрд╛рдЗрдк рдХрдВрдкреНрд▓реАрд╢рдирд╕реНрдЯреЗрдЬ.рдЖрд░рдПрдХреНрд╕
CompletionStage.rx()
рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирд╡реЙрдХрд░ рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдирд╡реЙрдХрд░ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3
CompletionStage<Response> response = ClientBuilder.newClient() .target("http://localhost:8080/service-url") .request() .rx() .get();
CompletionStage<>
рдЬрд╛рд╡рд╛ 8 рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред рдпрд╣ рдПрдХ рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдмрдбрд╝реЗ рдЧрдгрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред JAX-RS рдХреЛ рд╣рд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЬрд╛рд╡рд╛ 8 рд░рд┐рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ
AcceptAsync()
рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4
response.thenAcceptAsync(res -> { Temperature t = res.readEntity(Temperature.class);
рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ REST рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝рдирд╛рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг JAX-RS рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдореИрдВ рдПрдХ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдПрдХ рдЧрдВрддрд╡реНрдп рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рддрд╛рдкрдорд╛рди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд┐рдВрджреБ рдкрд░ рд╕реНрдерд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛ред рдЧрдВрддрд╡реНрдпреЛрдВ рдХрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЪрд┐рддреНрд░ 1 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЪрд┐рддреНрд░рд╛ 1. рдЧрдВрддрд╡реНрдп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрддрд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдмрд╕ рдбреЛрдореЗрди рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдПрдВред 5 рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐
Forecast
рд╡рд░реНрдЧ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ
Location
рдФрд░
Temperature
рд╡рд░реНрдЧреЛрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5
public class Temperature { private Double temperature; private String scale;
рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реВрдЪреА рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП,
ServiceResponse
рд╡рд░реНрдЧ
ServiceResponse
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6
public class ServiceResponse { private long processingTime; private List<Forecast> forecasts = new ArrayList<>(); public void setProcessingTime(long processingTime) { this.processingTime = processingTime; } public ServiceResponse forecasts(List<Forecast> forecasts) { this.forecasts = forecasts; return this; }
ListRes 7 рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП
LocationResource
/location
рдирдореВрдирд╛ рдкрде рдХреЗ рд╕рд╛рде рд▓реМрдЯреЗ рддреАрди рдирдореВрдирд╛ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 7
@Path("/location") public class LocationResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response getLocations() { List<Location> locations = new ArrayList<>(); locations.add(new Location("London")); locations.add(new Location("Istanbul")); locations.add(new Location("Prague")); return Response.ok(new GenericEntity<List<Location>>(locations){}).build(); } }
ListResource 8 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдХ рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП 30 рдФрд░ 50 рдХреЗ рдмреАрдЪ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рддрд╛рдкрдорд╛рди рдорд╛рди рджреЗрддрд╛ рд╣реИред рдПрдХ рд╕реЗрдВрд╕рд░ рд░реАрдб рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 500 рдПрдордПрд╕ рд╡рд┐рд▓рдВрдм рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8
@Path("/temperature") public class TemperatureResource { @GET @Path("/{city}") @Produces(MediaType.APPLICATION_JSON) public Response getAverageTemperature(@PathParam("city") String cityName) { Temperature temperature = new Temperature(); temperature.setTemperature((double) (new Random().nextInt(20) + 30)); temperature.setScale("Celsius"); try { Thread.sleep(500); } catch (InterruptedException ignored) { ignored.printStackTrace(); } return Response.ok(temperature).build(); } }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ
ForecastResource
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рд╕реНрд░реЛрдд (рд╕реВрдЪреА 9 рджреЗрдЦреЗрдВ), рдЬреЛ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдлрд┐рд░, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдбрд┐рдЧреНрд░реА рд╕реЗрд▓реНрд╕рд┐рдпрд╕ рдореЗрдВ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9
@Path("/forecast") public class ForecastResource { @Uri("location") private WebTarget locationTarget; @Uri("temperature/{city}") private WebTarget temperatureTarget; @GET @Produces(MediaType.APPLICATION_JSON) public Response getLocationsWithTemperature() { long startTime = System.currentTimeMillis(); ServiceResponse response = new ServiceResponse(); List<Location> locations = locationTarget .request() .get(new GenericType<List<Location>>(){}); locations.forEach(location -> { Temperature temperature = temperatureTarget .resolveTemplate("city", location.getName()) .request() .get(Temperature.class); response.getForecasts().add( new Forecast(location).setTemperature(temperature)); }); long endTime = System.currentTimeMillis(); response.setProcessingTime(endTime - startTime); return Response.ok(response).build(); } }
рдЬрдм рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЧрдВрддрд╡реНрдп рдХреЗ рд░реВрдк рдореЗрдВ
/forecast
рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10. рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдПрдХ рдХреЗ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓реЗрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп 1.533 рдПрдордПрд╕ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рддрд╛рдкрдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз 1.5 рддрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдордПрд╕ред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10
{ "forecasts": [ { "location": { "name": "London" }, "temperature": { "scale": "Celsius", "temperature": 33 } }, { "location": { "name": "Istanbul" }, "temperature": { "scale": "Celsius", "temperature": 38 } }, { "location": { "name": "Prague" }, "temperature": { "scale": "Celsius", "temperature": 46 } } ], "processingTime": 1533 }
рдЕрдм рддрдХ, рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд╣рд╛рдВ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 11 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реЗрд╡рд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 11
@Path("/reactiveForecast") public class ForecastReactiveResource { @Uri("location") private WebTarget locationTarget; @Uri("temperature/{city}") private WebTarget temperatureTarget; @GET @Produces(MediaType.APPLICATION_JSON) public void getLocationsWithTemperature(@Suspended final AsyncResponse async) { long startTime = System.currentTimeMillis();
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
ForecastReactiveResource
рдХреЗ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдореЗрдВ
ForecastReactiveResource
рдореИрдВ рдкрд╣рд▓реЗ JAX-RS рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЙрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рд╡рд╛ рдИрдИ 8 рдХреЗ рд▓рд┐рдП рдПрдХ рдРрдб-рдСрди рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓
rx()
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдХреЙрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдореИрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рдЪрд░рдг рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рд╡реЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рд╕рдорд╛рдкрди рдЪрд░рдг рдореЗрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓
forecastCS
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЙрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
forecastCS
ред
рдФрд░ рдЕрдм, рдЪрд▓реЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЪрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░
tempCS
рд╡реИрд░рд┐рдПрдмрд▓
tempCS
, рдлрд┐рд░ рд╕реЗ JAX-RS рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬреЛ рд╢рд╣рд░ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рддрд╛рдкрдорд╛рди рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ, рдореИрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
resolveTemplate()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
resolveTemplate()
, рдФрд░ рдпрд╣ рдореБрдЭреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд╢рд╣рд░ рдХрд╛ рдирд╛рдо рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирдП
Forecast
рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реБрдП
CompletableFuture.completedFuture()
рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдБред рдореИрдВ рдЗрд╕ рднрд╡рд┐рд╖реНрдп рдХреЛ
tempCS
рдЪрд░рдг рдХреЗ рд╕рд╛рде
tempCS
рд╣реВрдВ рддрд╛рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдЧрд░рд╛рдиреА рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рдкрдорд╛рди рдореВрд▓реНрдп рд╣реЛред
рдкреВрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп
CompletableFuture.allOf()
11 рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рд╡рд┐рдзрд┐
forecastCS
рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдЪрд░рдг рд╕реВрдЪреА рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЪрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рдкреВрд░реНрдг рднрд╡рд┐рд╖реНрдп рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИ рдЬрдм рд╕рднреА рдЙрдкрд▓рдмреНрдз рдкреВрд░реНрдг рднрд╡рд┐рд╖реНрдп рдХреА рд╡рд╕реНрддреБрдПрдВ рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИрдВред
рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
ServiceResponse
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдкреВрд░реНрдг рднрд╡рд┐рд╖реНрдп рдмрдирд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░
forecastCS
рд╕реВрдЪреА рдХреЗ рд╕рд╛рде
forecastCS
рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕реЗрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реВрдВред
рдмреЗрд╢рдХ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкрдХреНрд╖ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ; рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдХреЛ рддрдм рддрдХ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдзрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рднреЗрдЬрддрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд╕реЗрдВрдЯреЗрдб рдЗрд╡реЗрдВрдЯреНрд╕ (SSE) рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рддрд╛рдкрдорд╛рди рдорд╛рди рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛред
ForecastReactiveResource
рдЙрддреНрдкрд╛рджрди рдХрд╛ рд╕рдВрдХреЗрддред рд╕реНрд░реЛрдд рдПрдХ рд╕реВрдЪреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 12 рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп 515 рдПрдордПрд╕ рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рддрд╛рдкрдорд╛рди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд░рдирдЯрд╛рдЗрдо рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 12
{ "forecasts": [ { "location": { "name": "London" }, "temperature": { "scale": "Celsius", "temperature": 49 } }, { "location": { "name": "Istanbul" }, "temperature": { "scale": "Celsius", "temperature": 32 } }, { "location": { "name": "Prague" }, "temperature": { "scale": "Celsius", "temperature": 45 } } ], "processingTime": 515 }
рдирд┐рд╖реНрдХрд░реНрд╖рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реНрдерд╛рди рдФрд░ рддрд╛рдкрдорд╛рди рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдпрд╛ред рдлрд┐рд░, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдЪрд▓рд╛ рдЧрдпрд╛ рддрд╛рдХрд┐ рд╕реЗрд╡рд╛ рдХреЙрд▓ рдХреЗ рдмреАрдЪ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЬрд╛рд╡рд╛ EE 8 рдореЗрдВ JAX-RS рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреНрд▓рд╛рдЗрдВрдЯ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрд╛рд╡рд╛ 8 рдореЗрдВ рдЙрдкрд▓рдмреНрдз
CompletableFuture
рдФрд░
CompletableFuture
рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╢рдХреНрддрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдвреАрд▓реЗ рдзрдиреНрдпрд╡рд╛рдж рдХреЛ рддреЛрдбрд╝рддреА рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╕реЗ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ; рдпрд╣ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрдЯреЗрдЬ рдЬреИрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓ рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдЕрдВрдд
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред