рд╣рд╛рдп рд╣рдмрд░, рд╣рдо рд╕реНрдХреВрд▓ рдСрдл рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рд╣реЗрдбрд╣рдВрдЯрд░ 2018 рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рд╕реНрдирд╛рддрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдЗрд╕ рд╕рд╛рд▓ рдореИрдВрдиреЗ рдПрдЪрдПрдЪ рд╕реНрдХреВрд▓ рдСрдл рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рд╕реЗ рд╕реНрдирд╛рддрдХ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЙрд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдерд╛ред рд╕реНрдХреВрд▓ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░, рдореИрдВрдиреЗ рдПрдХ рд▓рдбрд╝рд╛рдХреВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдПрдХ рдЧрд╛рдЗрдб) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХреИрд╕реЗ рддрд░реНрдХ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╕реНрдХреЗрд▓реЗрдмрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред рд╕рднреА рд▓реЗрдЦ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓реЗ, рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдирдП рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдкреБрд░рд╛рдиреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╡реНрдпрд╛рдкрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдпрд╛ рддреЛ IoC рдХрд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рд╡реЗ рдкреБрд░рд╛рддрди рдереЗ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдЯрди xml рдХреЙрдиреНрдлрд┐рдЧ рдФрд░ jsp рдкрд░ рдПрдХ рджреГрд╢реНрдп рд╢рд╛рдорд┐рд▓ рдерд╛ред рдореИрдВрдиреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рд╕реНрддрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрд░реНрдерд╛рддреНред рдХреБрдЫ рдХреИрд╡рд┐рдЯреАрдЬрд╝ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рд╢реВрдиреНрдп, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рд╕реНрдХреВрд▓ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрд╡рдпрдВ-рд╕рд┐рдЦрд╛рдпрд╛ рдЙрддреНрд╕рд╛рд╣реА рднреА рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рджрд┐рдпрд╛ (рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди)
рдЯреАрдо - 5 рд▓реЛрдЧред рд╢рдмреНрдж 3 рдорд╣реАрдиреЗ рдХрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдбреЗрдореЛ рд╣реИред рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдПрдЪрдЖрд░ рдХреЗ рд╕рд╛рде рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдкреНрд░реЛрдмреЗрд╢рдирд░реА рдкреАрд░рд┐рдпрдб (IS) рдХреЛ рдЕрдм рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдХрд░реНрдордЪрд╛рд░реА рд╕рд╛рдордиреЗ рдЖ рд░рд╣рд╛ рд╣реИ, рдПрдЪрдЖрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдиреЗрддрд╛ рдХреЛ рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рджрд┐рди рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕ рджрд┐рди рдХрд░реНрдордЪрд╛рд░реА рдХрд╛рдо рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдПрдЪрдЖрд░ рдПрдХ рд╕реНрд╡рд╛рдЧрдд рдмреИрдардХ рдЖрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХрдВрдкрдиреА рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╕реМрдВрдкрддрд╛ рд╣реИред 1.5 рдФрд░ 3 рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдЪрдЖрд░, рдиреЗрддрд╛ рдФрд░ рдХрд░реНрдордЪрд╛рд░реА рдХреА рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдФрд░ рдЕрдВрддрд┐рдо рдмреИрдардХ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдлрд▓рддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рдкрд░рд┐рдгрд╛рдо рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрддрд┐рдо рдмреИрдардХ рдХреЗ рдмрд╛рдж, рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рдПрдХ рдореБрджреНрд░рд┐рдд рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА ("рдЖрдИрдкреА рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ" рдХреА рд╢реИрд▓реА рдореЗрдВ рдкреНрд░рд╢реНрди) рд╕реМрдВрдкреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡реАрдПрдЪрдЖрдИ рдХреЗ рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдЖрд░ рдореЗрдВ рдПрдЪрдЖрд░ рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдбрд┐рдЬрд╝рд╛рдЗрди
рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдирд╛рдо, рд╡рд┐рднрд╛рдЧ, рдкреНрд░рдмрдВрдзрдХ, рдЖрджрд┐), рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рдмрджрд▓рдирд╛, рд╕рдВрд▓рдЧреНрди рдлрд╛рдЗрд▓реЗрдВ (рдЖрдИрдкреА, рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдкрд░ рдХрд╛рд░реНрдп) рдФрд░ рдХрд░реНрдордЪрд╛рд░реА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЖрдИрдкреА тАЛтАЛрдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕реНрддрд░ред рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ 8 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЕрд░реНрдерд╛рддреН:
- рдЪрд░рдг 1 - рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рдЬреЛрдбрд╝рдирд╛: рдпрд╣ рдПрдЪрдЖрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдирдП рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдФрд░ рдЕрдВрддрд┐рдо рдмреИрдардХ рдХреЗ рд▓рд┐рдП рддреАрди рдХреИрд▓реЗрдВрдбрд░ рдПрдЪрдЖрд░ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
- рджреВрд╕рд░рд╛ рдЪрд░рдг - рдЖрдИрдкреА рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдордиреНрд╡рдп: рдЖрдИрдкреА рдкрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рд╕рд┐рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рднрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдЪрдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдЪрдЖрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЪрд░рдг рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдирд┐рд╢рд╛рди рджреЗрддрд╛ рд╣реИред
- рддреАрд╕рд░рд╛ рдЪрд░рдг - рд╕реНрд╡рд╛рдЧрдд-рдмреИрдардХ: рдПрдЪрдЖрд░ рдПрдХ рдмреИрдардХ рдЖрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ "рд╕реНрдЯреЗрдЬ рдкреВрд░рд╛" рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИред
- рдЪреМрдерд╛ рдЪрд░рдг - рдЕрдВрддрд░рд┐рдо рдмреИрдардХ: рддреАрд╕рд░реЗ рдЪрд░рдг рдХреЗ рд╕рдорд╛рди
- 5 рд╡реАрдВ рд╕реНрдЯреЗрдЬ - рдПрдХ рдЕрдВрддрд░рд┐рдо рдмреИрдардХ рдХреЗ рдкрд░рд┐рдгрд╛рдо: рдПрдЪрдЖрд░ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдкреЗрдЬ рдкрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рднрд░рддрд╛ рд╣реИ рдФрд░ "рдЕрдЧрд▓рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред
- 6 рд╡реАрдВ рдЪрд░рдг - рдЕрдВрддрд┐рдо рдмреИрдардХ: рддреАрд╕рд░реЗ рдЪрд░рдг рдХреЗ рд╕рдорд╛рди
- 7 рд╡реАрдВ рдЪрд░рдг - рдЕрдВрддрд┐рдо рдмреИрдардХ рдХреЗ рдкрд░рд┐рдгрд╛рдо: рдкрд╛рдВрдЪрд╡реЗрдВ рдЪрд░рдг рдХреЗ рд╕рдорд╛рди
- 8 рд╡рд╛рдВ рдЪрд░рдг - рдЖрдИрдкреА рдХрд╛ рд╕рдорд╛рдкрди: рдЖрдИрдкреА рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рдИ-рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рдХреЗ рд░реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд┐рдВрдХ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬреАрд░рд╛ рдореЗрдВ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдмреАрдорд╛ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рдореЗрдВ рд╣рд╛рде рд╕реЗ рдХрд╛рдо рдорд┐рд▓рд╛ рд╣реИ)ред
рд╕рднреА рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдордВрдЪ рдХреЛ рд╕рдорд╛рдкреНрдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЗрд▓ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЖрддреА рд╣реИред рдЕрдВрдд рд╕рдордп рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЕрдВрддрд░рд┐рдо рдмреИрдардХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрд╡рдХрд╛рд╢ рдкрд░ рд╣реЛрддреА рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдмреИрдардХ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХрд╛рдЧрдЬ / рдмреЛрд░реНрдбреЛрдВ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рддреИрдпрд╛рд░ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реЛрдВрдЧреЗред
рд╢реЛрд╖рдг
рд╕реНрдХреВрд▓ рдХрд╛ рдПрдХ рд▓рдХреНрд╖реНрдп рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдереАред
рдХрд╛рд░реНрдп рдкрд░ рдХрд╛рдо рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рдЧрд▓рддрд┐рдпреЛрдВ / рд╡рд┐рдирд┐рдордп рдЕрдиреБрднрд╡реЛрдВ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдо рд╕реЗ рджреВрд╕рд░реЗ рдЫрд╛рддреНрд░ рдХреЛ рд╕рдореАрдХреНрд╖рд╛ 1 рдХреЗ рд▓рд┐рдП рджреЗрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж review_2 рдЖрддрд╛ рд╣реИ - рдпрд╣ рдХрд╛рд░реНрдп рджреЛ рдЖрдХрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо review_1 рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реА рдореЗрдВ govnokod рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдорд╛рдирд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЪрд░рдг рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрдХреВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреИрдорд╛рдирд╛ рдорд╛рдирд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдЕрдм рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдЖрд╡реЗрджрди рдХрд┐рд╕реА рднреА рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╣рд░ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╕рд╕реНрддреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (100 рд░реВрдмрд▓ / рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП) рдЦрд░реАрджреА, рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рд╕рдм рдХреБрдЫ рдореБрдлреНрдд рдореЗрдВ рдФрд░ рдлреИрд╢рдиреЗрдмрд▓ рддрд░реАрдХреЗ рд╕реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдбреЙрдХрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рдЪреБрдирд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ (рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реНрдХреВрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ), рдпрд╣ рдЗрддрдиреА рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдЧрд┐рддреБрдм рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрдм рдПрдХ рдирдИ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ (рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ), рдХреЛрдб рдХреЛ рдЬрд╛рд░ рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдбрд╝ рдореЗрдВ рдЯреНрд░реИрд╡рд┐рд╕ рдЬреИрдо рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдЪрдХрддреНрддреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдбреЛрдореЗрди www.adaptation.host рднреА рдЦрд░реАрджрд╛ рд╣реИ рддрд╛рдХрд┐ рдбреЗрдореЛ рдкрд░ рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдПрдХ рдмрджрд╕реВрд░рдд рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдкрдВрдЬреАрдХреГрдд рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдордиреЗ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ (рдореЗрд▓ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП), рдЕрдкрд╛рдЪреЗ (рдирдЧрдиреЗрдХреНрд╕ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд╛рдЪреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдерд╛) рдФрд░ рдЬреАрд░рд╛ (рдкрд░реАрдХреНрд╖рдг) рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ред рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдереЗ рдЬреЛ http (# 2k18, # microservices) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВрдЧреЗред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ "рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╣реЗрдбрд╣рдВрдЯрд░ рд╕реНрдХреВрд▓ рдореЗрдВ" рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЬрд╛рд╡рд╛ рдмрд╛рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
рдмреИрдХрдПрдВрдб
0. рдкрд░рд┐рдЪрдп
рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
- рдЬреЗрдбреАрдХреЗ 1.8;
- рдорд╛рд╡реЗрди 3.5.2;
- рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЯреНрд╕ 9.6;
- рд╣рд╛рдЗрдмрд░рдиреЗрдЯ 5.2.10;
- рдЬреЗрдЯреА 9.4.8;
- рдЬрд░реНрд╕реА 2.27ред
рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ hh рд╕реЗ NaB 3.5.0 рд▓рд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЗрдбрд╣рдВрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕рдореЗрдВ рдЬреЗрдЯреА, рдЬрд░реНрд╕реА, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдПрдореНрдмреЗрдбреЗрдб рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЯреНрд╕ рд╣реИрдВ, рдЬреЛ рдЧреАрдердм рдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдореИрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдБрдЧрд╛: рдЬреЗрдЯреНрдЯреА рдПрдХ рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдЖрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдЬрд░реНрд╕реА - рдПрдХ рдврд╛рдВрдЪрд╛ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ RESTful рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ; рд╣рд╛рдЗрдмрд░рдиреЗрдЯ - рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдЖрд░рдПрдо; рдорд╛рд╡реЗрди рдПрдХ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд▓реЗрдХреНрдЯрд░ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рджреЛ рдЗрдХрд╛рдЗрдпрд╛рдВ рдЬреЛрдбрд╝реАрдВ: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдПрдХ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ, рд╕рд╛рде рд╣реА рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде OneToMany / ManyToOne рд▓рд┐рдВрдХред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ рдФрд░ mvan рдХреНрд▓реАрди рдЗрдВрд╕реНрдЯреЙрд▓ рдПрдХреНрдЬрд╝реАрдХреНрдпреВрдЯрд┐рд╡ рд░рди рдХрд░реЗрдВ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдореЗрдВ рдЬрд╛рд╡рд╛ред рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛:
- рд╕реЗрд╡рд╛рдПрдВ - рдЖрд╡реЗрджрди рдореЗрдВ рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рд╕рднреА рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдпрд╣рд╛рдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ, рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╕рдВрд╕рд╛рдзрди - рдпреВрдЖрд░рдПрд▓ рд╣реИрдВрдбрд▓рд░реНрд╕, рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╕реАрдорд╛ рдХреЗ рдмреАрдЪ рдХреА рдПрдХ рдкрд░рддред рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рд╡реИрдзрддрд╛ рдФрд░ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдирд╣реАрдВ, рдпрд╣рд╛рдВ рдЕрдиреБрдорддрд┐ рд╣реИред
- рдбреАрдПрдУ (рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ) - рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдкрд░рддред рддрд╛рдУ рдореЗрдВ рдХреЗрд╡рд▓ рдореВрд▓ рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ, рд╕рднреА рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЧрд┐рдирдирд╛, рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛, рд╣рдЯрд╛рдирд╛ред
- рдЗрдХрд╛рдИ - рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ ORM рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рд╕реАрдзреЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- Dto (рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ) - рдЗрдХрд╛рдИ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ, рдХреЗрд╡рд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рд╕рд╛рдордиреЗ) рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдбреЗрдЯрд╛ рд╕реЗ json рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рднреЗрдЬрдирд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
1. рдЖрдзрд╛рд░
рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, рдЖрдкрдХреЛ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдкрд╛рд╕ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдорд╛рдорд▓рд╛ рд╕рд░рд▓ рд╣реЛ рдФрд░ рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдЪрдПрд╕рдХреНрдпреВрдПрд▓рдбреАрдмреА рд▓рд┐рдпрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╣рдорд╛рд░реЗ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛, рдкреНрд░реЛрдбрдХреНрд╕рди рд╕реЗ рдкреНрд░реЛрдбрдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ):
@Bean(destroyMethod = "shutdown") DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("db/sql/create-db.sql") .build(); }
рдореИрдВрдиреЗ create-db.sql рдлрд╛рдЗрд▓ рдореЗрдВ рдЯреЗрдмрд▓ рдХреНрд░рд┐рдПрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдИред рдЖрдк рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╣рд▓реНрдХреЗ in_memory рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрджрд┐ рдЖрдк hibernate.hbm2ddl.auto=create
рдирд┐рд░реНрджрд┐рд╖реНрдЯ hibernate.hbm2ddl.auto=create
hibernate.properties рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ hibernate.hbm2ddl.auto=create
рд╣реИрдВ, рддреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕реНрд╡рдпрдВ рдЗрдХрд╛рдИ рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрдХрд╛рдИ рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдмрд┐рдирд╛ рдлрд╛рдЗрд▓ рдХреЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред
db/sql/create-db.sql
:
CREATE TABLE employee ( id INTEGER IDENTITY PRIMARY KEY, first_name VARCHAR(256) NOT NULL, last_name VARCHAR(256) NOT NULL, email VARCHAR(128) NOT NULL ); CREATE TABLE resume ( id INTEGER IDENTITY PRIMARY KEY, employee_id INTEGER NOT NULL, position VARCHAR(128) NOT NULL, about VARCHAR(256) NOT NULL, FOREIGN KEY (employee_id) REFERENCES employee(id) );
2. рдЗрдХрд╛рдИ
entities/employee
:
@Entity @Table(name = "employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Integer id; @Column(name = "first_name", nullable = false) private String firstName; @Column(name = "last_name", nullable = false) private String lastName; @Column(name = "email", nullable = false) private String email; @OneToMany(mappedBy = "employee") @OrderBy("id") private List<Resume> resumes;
entities/resume
:
@Entity @Table(name = "resume") public class Resume { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "employee_id") private Employee employee; @Column(name = "position", nullable = false) private String position; @Column(name = "about") private String about;
рдПрдВрдЯрд┐рдЯреАрдЬ рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ, рдмрд▓реНрдХрд┐ рдкреВрд░реЗ рдкреИрд░реЗрдВрдЯ / рдЪрд╛рдЗрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдХрд░реНрдордЪрд╛рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд░рд┐рдЬреНрдпреВрдореЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП ... рдЗрд╕реЗ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдиреЛрдЯреЗрд╢рди @OneToMany(mappedBy = "employee")
рдФрд░ @ManyToOne(fetch = FetchType.LAZY)
рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ред ред рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓рд┐рдЦрдиреЗ / рдкрдврд╝рдиреЗ рдХреЗ рд▓реЗрдирджреЗрди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЙрдиреНрд╣реЗрдВ рд╕реЗрд╡рд╛ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред FetchType.LAZY
рд╕реНрдерд╛рдкрдирд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реА рд╕рдВрдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд▓реЗрди-рджреЗрди рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рд▓реЗрдирджреЗрди рдореЗрдВ рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рд▓рд┐рдХ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХрд░реНрдордЪрд╛рд░реА рдЗрдХрд╛рдИ рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: FetchType.LAZY
рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдбреАрдмрдЧ рдореЗрдВ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рд╕реЗрд╡рд╛ рд╕реЗ рд▓реМрдЯрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрджрд┐ рд╣рдордиреЗ рд▓реЗрди-рджреЗрди рдореЗрдВ рдХрд░реНрдордЪрд╛рд░реА рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд▓реЗрди-рджреЗрди рдХреЗ рдмрд╛рд╣рд░ рдХрд░реНрдордЪрд╛рд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдПрдХ LazyInitializationException
рд╣реЛ рд╕рдХрддреА рд╣реИред
3. рджрд╛рдУ
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, EmployeeDao рдФрд░ ResumeDao рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдпрд╣рд╛рдВ рджреВрдВрдЧрд╛
EmployeeDao
:
public class EmployeeDao { private final SessionFactory sessionFactory; @Inject public EmployeeDao(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public void save(Employee employee) { sessionFactory.getCurrentSession().save(employee); } public Employee getById(Integer id) { return sessionFactory.getCurrentSession().get(Employee.class, id); } }
@Inject
рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдбрд╛рдУ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рдЬреАрд╡рди рдореЗрдВ, рдПрдХ рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдиреА, рдЬрд┐рд╕рдиреЗ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕рд▓ рдХрд┐рдпрд╛ рдерд╛, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░реЗрдЦрд╛рдВрдХрди рдмрдирд╛рдпрд╛ рдФрд░, рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдУрдПрд╡реА рдХреЛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЬрд╛рд╡рд╛ рдЧрд╛рдЗрдб рдореЗрдВ, рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреБрдЫ рдкрд╛рдЧрд▓ рд▓рдЧ рд░рд╣реЗ рдереЗред рдФрд░ рд╕реНрдХреВрд▓ рдореЗрдВ, рд╢рд╛рдпрдж, рдпрд╣ рд╡рд┐рд╖рдп рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ, IMHO рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ DI рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рд╛рдордЧреНрд░реА рд╣реИред рдпрджрд┐ рдЖрдк рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдорд╣реАрдиреЗ рдЖрдк рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн-рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдирдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ / рд╕реЗрд╡рд╛рдУрдВ / рддрд╛рдУ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдореИрдкрд┐рдВрдЧ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ рджреВрд╕рд░реЛрдВ рдореЗрдВ рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ / рддрд╛рдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд╕рдВрдд рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдбреАрдЖрдИ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред
4. рдбрддреЛ
Dto, рдЬреИрд╕реЗ dao, рдХрд░реНрдордЪрд╛рд░реА рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВред рд╣рдо рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдХрд░реНрдордЪрд╛рд░реА рд╕рдордЭрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рджреЛ рд╡рд░реНрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: EmployeeCreateDto
рдмрдирд╛рддреЗ рд╕рдордп, рдЖрд╡рд╢реНрдпрдХ рдХрд░реНрдордЪрд╛рд░реА; EmployeeDto
рд░рд╕реАрдж рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб id
рдФрд░ resumes
)ред id
рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдмрд╛рд╣рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░, рд╣рдо email
рджреНрд╡рд╛рд░рд╛ рдЗрдХрд╛рдИ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЦреЛрдЬ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВред рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рд░рд┐рдЬреНрдпреВрдореЗ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд░реНрдордЪрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП resumes
рдлрд╝реАрд▓реНрдбред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ dto рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд╕рднреА рд░рд┐рдЬреНрдпреВрдореЗ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ getResumesByEmployeeEmail, рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ ORM рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдирд╛ред
EmployeeCreateDto
:
public class EmployeeCreateDto { public String firstName; public String lastName; public String email; }
EmployeeDto
:
public class EmployeeDto { public Integer id; public String firstName; public String lastName; public String email; public List<ResumeDto> resumes; public EmployeeDto(){ } public EmployeeDto(Employee employee){ id = employee.getId(); firstName = employee.getFirstName(); lastName = employee.getLastName(); email = employee.getEmail(); if (employee.getResumes() != null) { resumes = employee.getResumes().stream().map(ResumeDto::new).collect(Collectors.toList()); } } }
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЙрдЯреЛ рдореЗрдВ рддрд░реНрдХ рд▓рд┐рдЦрдирд╛ рдЗрддрдирд╛ рдЕрд╢реЛрднрдиреАрдп рд╣реИ рдХрд┐ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ public
рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рдЬрд╛рдПред
5. рд╕реЗрд╡рд╛
EmployeeService
:
public class EmployeeService { private EmployeeDao employeeDao; private ResumeDao resumeDao; @Inject public EmployeeService(EmployeeDao employeeDao, ResumeDao resumeDao) { this.employeeDao = employeeDao; this.resumeDao = resumeDao; } @Transactional public EmployeeDto createEmployee(EmployeeCreateDto employeeCreateDto) { Employee employee = new Employee(); employee.setFirstName(employeeCreateDto.firstName); employee.setLastName(employeeCreateDto.lastName); employee.setEmail(employeeCreateDto.email); employeeDao.save(employee); return new EmployeeDto(employee); } @Transactional public ResumeDto createResume(ResumeCreateDto resumeCreateDto) { Resume resume = new Resume(); resume.setEmployee(employeeDao.getById(resumeCreateDto.employeeId)); resume.setPosition(resumeCreateDto.position); resume.setAbout(resumeCreateDto.about); resumeDao.save(resume); return new ResumeDto(resume); } @Transactional(readOnly = true) public EmployeeDto getEmployeeById(Integer id) { return new EmployeeDto(employeeDao.getById(id)); } @Transactional(readOnly = true) public ResumeDto getResumeById(Integer id) { return new ResumeDto(resumeDao.getById(id)); } }
рд╡реЗ рд▓реЗрдирджреЗрди рдЬреЛ рд╣рдореЗрдВ LazyInitializationException
(рдФрд░ рди рдХреЗрд╡рд▓) рд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВред рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдореЗрдВ рд▓реЗрдирджреЗрди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣рдм рдкрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рд░реНрдп (рдФрд░ рдкрдврд╝реЗрдВ ... ) рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рдирд┐рдпрдд рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реАред
6. рд╕рдВрд╕рд╛рдзрди
рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реА рд╕рдВрд╕реНрдерд╛рдПрдБ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
EmployeeResource
:
@Path("/") @Singleton public class EmployeeResource { private final EmployeeService employeeService; public EmployeeResource(EmployeeService employeeService) { this.employeeService = employeeService; } @GET @Produces("application/json") @Path("/employee/{id}") @ResponseBody public Response getEmployee(@PathParam("id") Integer id) { return Response.status(Response.Status.OK) .entity(employeeService.getEmployeeById(id)) .build(); } @POST @Produces("application/json") @Path("/employee/create") @ResponseBody public Response createEmployee(@RequestBody EmployeeCreateDto employeeCreateDto){ return Response.status(Response.Status.OK) .entity(employeeService.createEmployee(employeeCreateDto)) .build(); } @GET @Produces("application/json") @Path("/resume/{id}") @ResponseBody public Response getResume(@PathParam("id") Integer id) { return Response.status(Response.Status.OK) .entity(employeeService.getResumeById(id)) .build(); } @POST @Produces("application/json") @Path("/resume/create") @ResponseBody public Response createResume(@RequestBody ResumeCreateDto resumeCreateDto){ return Response.status(Response.Status.OK) .entity(employeeService.createResume(resumeCreateDto)) .build(); } }
Produces(тАЬapplication/jsonтАЭ)
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ json рдФрд░ dto рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд╣реА рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рдПрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП pom.xml рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>${jersey.version}</version> </dependency>
рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдиреНрдп рдЬреЛрдВрд╕-рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдЕрдорд╛рдиреНрдп рдореАрдбрд┐рдпрд╛ рдЯрд╛рдЗрдк рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред
7. рдкрд░рд┐рдгрд╛рдо
рдЪрд▓рд╛рдПрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ ( mvn clean install exec:java
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ mvn clean install exec:java
)ред рдкреЛрд░реНрдЯ рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рддрд╛ рд╣реИ рд╕реЗрд╡рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдХрдВрд╕реЛрд▓ рдХреЛ рддреБрдЪреНрдЫ рд╕рдордЭрдХрд░ рдкреЛрд╕реНрдЯрдореИрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
curl --header "Content-Type: application/json" \ --request POST \ --data '{"firstName": "Jason", "lastName": "Statham", "email": "jasonst@t.ham"}' \ http://localhost:9999/employee/create curl --header "Content-Type: application/json" \ --request POST \ --data '{"employeeId": 0, "position": "Voditel", "about": "Opyt raboty perevozchikom 15 let"}' \ http://localhost:9999/resume/create curl --header "Content-Type: application/json" --request GET http://localhost:9999/employee/0 curl --header "Content-Type: application/json" --request GET http://localhost:9999/employee/0
рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдмреИрдХрдПрдВрдб рдорд┐рд▓рд╛ рдЬреЛ рдПрдкреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдм рдЖрдк рдлрд╝реНрд░рдВрдЯ рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдлреЙрд░реНрдо рдбреНрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдиреАрдВрд╡ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ рд╕реНрд╡рдпрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╡рд┐рдХреА рдЯреИрдм рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдЬреАрдердм рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрд╢реЛрдзрд┐рдд рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:


рдорд▓реНрдЯреА-рдорд┐рд▓рд┐рдпрди-рдбреЙрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдереЛрдбрд╝рд╛ рдирдо рджрд┐рдЦрддрд╛ рд╣реИ, рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╣рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдордиреЗ рд╢рд╛рдо рдХреЛ рдХрд╛рдо / рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рдж рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛ред
рдпрджрд┐ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрдкреНрдкрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рд╕рд╛рдордиреЗ, рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдФрд░ рдЙрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ рдореЗрд▓ / рд╡рд╕рд╛ / рдбреЙрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдИ рдереАрдВред
рдкреБрдирд╢реНрдЪ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╕реНрдХреВрд▓ рд╕реЗ рдЭрдЯрдХрд╛ рд▓рдЧрдиреЗ рдХреЗ рдмрд╛рдж, рдЯреАрдо рдХреЗ рдмрд╛рдХреА рд╕рджрд╕реНрдп рдПрдХрддреНрд░ рд╣реЛ рдЧрдП рдФрд░ рдЙрдбрд╝рд╛рдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЕрдиреБрдХреВрд▓рди 2.0 рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдПрдХ рд╣реА рд╣реИ - рдЧрдВрднреАрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдирд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪреА рдЧрдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ рдФрд░ рдмрд╛рдЬрд╛рд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдХреА рдЬрд╛рдПред рдЖрдк рдЙрд╕реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрд╛рдо рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреВрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рд╣рдореЗрдВ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!
рдмрди
hoc ioc рд╡реАрдбрд┐рдпреЛ рд▓реЗрдХреНрдЪрд░