рд░рд┐рдореЛрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ (RPC) Android рдкрд░ рдХрдорд╛рдВрдб рдкреИрдЯрд░реНрди

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛



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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрд╢рд╛ рдХреА рдЧрдИ рдереА рдХрд┐ рдордВрдЪ EJB рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрдЫ рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрд░реЛрддреЛрдВ рдиреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА EJB Android рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рднрд╛рд░реА рд╣реИред рд╡реЗрдм рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, ksoap2-android рдврд╛рдВрдЪреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рдереАред

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

рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд▓реЛрдВ рддрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЖрд░рдкреАрд╕реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ? рддрд▓рд╛рд╢ рдЬрд╛рд░реА рд░рд╣реАред рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдиреЗ JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ JSON рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╛рдВрдХрди рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЧрдиреНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рд▓рдЧрд╛ , рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдЦрд┐рд░реА рдЙрдореНрдореАрдж рдЬреАрдбрдмреНрд▓реНрдпреВрдЯреА-рдЖрд░рдкреАрд╕реА рддрдХрдиреАрдХ рдереАред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ рдХрд┐ рдЪреВрдВрдХрд┐ GWT рдФрд░ Android рдПрдХ рдирд┐рдЧрдо рдХреА рд╕рдВрддрд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрднрд╡рддрдГ Android рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ GWT-RPC рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓реАред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХ gwt-phonegap рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рдЖрд░рдкреАрд╕реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдкрд╛ рд╕рдХрд╛ рд╣реВрдБред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд╣рди рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЕрдм рдореИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдлрд┐рд░ рдореБрдЭреЗ GWT рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪрдирд╛ рдкрдбрд╝рд╛, рдЕрд░реНрдерд╛рдд рдЙрд╕ рдЕрджреНрднреБрдд gwt-dispatch рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдирд┐рдкрдЯрдирд╛ рдерд╛ред рдПрдХ рд╣рдмреНрд░ рдкрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рдерд╛ред Gwt-dispatch рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ GWT RemoteServiceServlet рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░реНрд╡рд▓реЗрдЯ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЛ рд░реАрдореЗрдХ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдХреА рддрд░рдл, http рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред

рдореИрдВрдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛, рдФрд░ GWT рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдВрдЪрд╛рд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдЕрдм рд╕рднреА рдПрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ GWT IsSerializable рдХреЗ рдмрдЬрд╛рдп рдирд┐рдпрдорд┐рдд Serializable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдерд╛ред рдХрдИ рджрд┐рдиреЛрдВ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкрд░рд┐рдгрд╛рдо рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ http-dispatch рдирд╛рдордХ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рдирдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ gwt-dispatch рдврд╛рдБрдЪрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ рдФрд░, рдЙрдореНрдореАрдж рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХрдо рд╕реЗ рдХрдо рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рдореЗрд░реЗ рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рд╕рдлрд▓ рд░рд╣реЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреА рдорджрдж рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдпрд╣реАрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдкрд╛рдардХ рдЕрднреА рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдЖрдП рдереЗред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣рд┐рд╕реНрд╕рд╛



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

рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ http-рдбрд┐рд╕реНрдкреИрдЪ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд┐рдВрдЧ рдХрдорд╛рдВрдб рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдорд╛рдВрдб рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдордирдорд╛рдиреА рд╡рд╕реНрддреБ рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдЙрд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рднрд╛рдЧ



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрджреЗрд╢ рдХрд╛ рдкрд░рд┐рдгрд╛рдоред рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ net.customware.http.dispatch.sared.Result рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░рд╛ рдкрд░рд┐рдгрд╛рдо AbstractSimpleResult рд╕рд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рдЙрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

PingActionResult.java
import net.customware.http.dispatch.shared.AbstractSimpleResult; public class PingActionResult extends AbstractSimpleResult<Object> { private static final long serialVersionUID = 1L; public PingActionResult(Object object) { super(object); } } 


рдЕрдм рд╣рдо рд╕реАрдзреЗ рдХрдорд╛рдВрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдмрджрд▓реЗ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдХреЛ рдЬреЗрдиреЗрд░рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ net.customware.http.dispatch.sared.Action рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рд╕реЗ PingActionResult рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ deserialized рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, PingActionResult рдореЗрдВ рд▓рд┐рдкрдЯреЗред рдЪреВрдВрдХрд┐ рд╣рдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд░рд╛рдЬреНрдп рдХреЗ рдХрдИ рдорд╛рдорд▓реЗ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкрдиреА рдЯреАрдо рдореЗрдВ рдЕрд╢рдХреНрдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдиреЗ рдФрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рднреА рдЬреЛрдбрд╝реЗрдВрдЧреЗред

PingAction.java
 public class PingAction implements Action<PingActionResult> { private static final long serialVersionUID = 1L; private Object object; //      private boolean generateException; //   null    private boolean nullResult; public PingAction(Object object) { this.object = object; } public PingAction(boolean nullResult, boolean generateException) { this.generateException = generateException; this.nullResult = nullResult; } public Object getObject() { return object; } public void setObject(Object object) { this.object = object; } public boolean isGenerateException() { return generateException; } public void setGenerateException(boolean generateException) { this.generateException = generateException; } public boolean isNullResult() { return nullResult; } public void setNullResult(boolean nullResult) { this.nullResult = nullResult; } } 


рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдордиреЗ рдЙрд╕ рднрд╛рдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЕрдкрдиреА рдкрд┐рдВрдЧрдПрдХреНрд╢рди рдЯреАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд░реНрдЧ рдХреЛ net.customware.http.dispatch.server.ActionHandler рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ SimpleActionHandler рд╣реИ рдЬреЛ рдирдП рд╣реИрдВрдбрд▓рд░ рд▓рд┐рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ActionHandler рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ

PingActionHandler.java
 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import net.customware.http.dispatch.server.ExecutionContext; import net.customware.http.dispatch.server.SimpleActionHandler; import net.customware.http.dispatch.shared.ActionException; import net.customware.http.dispatch.shared.DispatchException; import net.customware.http.dispatch.test.shared.PingAction; import net.customware.http.dispatch.test.shared.PingActionResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.Inject; import com.google.inject.Provider; public class PingActionHandler extends SimpleActionHandler<PingAction, PingActionResult> { protected final Logger log = LoggerFactory.getLogger(getClass()); @Override public PingActionResult execute(PingAction action, ExecutionContext context) throws DispatchException { try { //      if (action.isGenerateException()) { throw new Exception("Generated exception"); //    null  } else if (action.isNullResult()) { return null; //       } else { Object object = action.getObject(); log.debug("Received object " + object); return new PingActionResult(object); } } catch (Exception cause) { log.error("Unable to perform ping action", cause); //     ,  //       .  //    ActionException,   //   http-dispatch throw new ActionException(cause); } } // rollback         ,  //  BatchAction. ,      //   . @Override public void rollback(PingAction action, PingActionResult result, ExecutionContext context) throws DispatchException { log.debug("PingAction rollback called"); } } 


рдЕрдм рд╣рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡рд▓реЗрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реА рдмрд╛рд░, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рдирд╛ рдЬреВрдБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЛ net.ustomware.http.dispatch.server.standard.AbstractStandardDispatchServlet рдпрд╛ AbstractSecureDispatchServlet рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░рд╛ рдорд╛рдирдХ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд▓реЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

StandardDispatcherTestService.java
 import net.customware.http.dispatch.server.BatchActionHandler; import net.customware.http.dispatch.server.DefaultActionHandlerRegistry; import net.customware.http.dispatch.server.Dispatch; import net.customware.http.dispatch.server.InstanceActionHandlerRegistry; import net.customware.http.dispatch.server.SimpleDispatch; import net.customware.http.dispatch.server.standard.AbstractStandardDispatchServlet; import net.customware.http.dispatch.test.server.handler.PingActionHandler; /** */ public class StandardDispatcherTestService extends AbstractStandardDispatchServlet { private static final long serialVersionUID = 1L; private Dispatch dispatch; public StandardDispatcherTestService() { // Setup for test case InstanceActionHandlerRegistry registry = new DefaultActionHandlerRegistry(); registry.addHandler( new BatchActionHandler() ); registry.addHandler(new PingActionHandler()); dispatch = new SimpleDispatch( registry ); } @Override protected Dispatch getDispatch() { return dispatch; } } 


рдпрд╣рд╛рдБ, рд╣рдорд╛рд░реЗ PingActionHandler рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рд╣рдо рдорд╛рдирдХ BatchActionHandler рдХреЛ рднреА рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмреИрдЪ рдмреИрдЪ рдХрдорд╛рдВрдб рдкреИрдХреЗрдЬ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдм web.xml рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд▓реЗрдЯ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ
web.xml
 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>DispatchServlet</servlet-name> <servlet-class>net.customware.http.dispatch.test.server.standard.StandardDispatcherTestService</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatchServlet</servlet-name> <url-pattern>/standard_dispatch</url-pattern> </servlet-mapping> </web-app> 


рдпрд╣ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╣реИред

рдЧреНрд░рд╛рд╣рдХ



рдЪрд▓реЛ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░реЗрдВ рдХрд┐ http-dispatch рдлреНрд░реЗрдорд╡рд░реНрдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдСрдкрд░реЗрд╢рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдорд╛рдирдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ net.customware.http.dispatch.client.standard.StandardDispatchServiceAsync рдпрд╛ SecureDispatchServiceAsync рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдореЗрд░реЗ рдЫреЛрдЯреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реАред рдЗрд╕ рдмрд╛рд░ рд╣рдо net.customware.http.dispatch.client.android.AndroidStandardDispatchServiceAsync рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЖрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдкрд░, EDT рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 public <R extends Result> void execute( final Action<R> action, final AsyncCallback<R> callback) { //  -"edt"    "edt"  final Handler uiThreadCallback = new Handler(); new Thread() { @Override public void run() { final Object result = getResult(action); //  ╤Ц  "edt" ,   //   final Runnable runInUIThread = new Runnable() { @Override public void run() { HttpUtils.processResult(result, callback); } }; uiThreadCallback.post(runInUIThread); } }.start(); } 


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

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ, DispatchAsync рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБред рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 DispatchAsync dispatch = new StandardDispatchAsync( new DefaultExceptionHandler(), new AndroidStandardDispatchServiceAsync(DISPATCH_URL_STANDARD)); 


рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП AsyncCallback рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

 AsyncCallback<PingRequestResult> callback = new AsyncCallback<PingRequestResult>() 


рдФрд░ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

 public void onSuccess(PingRequestResult result) 


рдФрд░

 public void onFailure(Throwable caught) 


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

рдлрд┐рд░ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВ:

 dispatcher.execute(pingRequest, callback); 


рд╣рдо RPCUtils рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдкрд░реАрдХреНрд╖рдг рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде DISPATCH_URL рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрджреНрдпрдкрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ JBoss Openshift рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдПрдХ рддреИрдирд╛рдд рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред

RPCUtils.java
 import java.util.ArrayList; import java.util.List; import net.customware.http.dispatch.client.AsyncCallback; import net.customware.http.dispatch.client.DefaultExceptionHandler; import net.customware.http.dispatch.client.DispatchAsync; import net.customware.http.dispatch.client.android.AndroidSecureDispatchServiceAsync; import net.customware.http.dispatch.client.android.AndroidStandardDispatchServiceAsync; import net.customware.http.dispatch.client.guice.SecureDispatchModule; import net.customware.http.dispatch.client.secure.CookieSecureSessionAccessor; import net.customware.http.dispatch.client.standard.StandardDispatchAsync; import net.customware.http.dispatch.test.shared.PingRequest; import net.customware.http.dispatch.test.shared.PingRequestResult; public class RPCUtils { protected static final String DISPATCH_URL_STANDARD = "http://httpdispatch-ep.rhcloud.com/standard_dispatch"; static DispatchAsync dispatch = new StandardDispatchAsync( new DefaultExceptionHandler(), new AndroidStandardDispatchServiceAsync(DISPATCH_URL_STANDARD)); public static DispatchAsync getDispatchAsync() { return dispatch; } //     public static void runBasicStringTest(LogWrapper log) { String testObject = "Test String Object"; PingRequest pingRequest = new PingRequest(testObject); testCommon(pingRequest, log); } //      ArrayList<String> public static void runBasicListTest(LogWrapper log) { List<String> testList = new ArrayList<String>(); testList.add("one"); testList.add("two"); PingRequest pingRequest = new PingRequest(testList); testCommon(pingRequest, log); } //     null public static void runNullSubObjectTest(LogWrapper log) { PingRequest pingRequest = new PingRequest(null); testCommon(pingRequest, log); } //  null  public static void runNullObjectTest(LogWrapper log) { PingRequest pingRequest = new PingRequest(true, false); testCommon(pingRequest, log); } //       public static void runExceptionTest(LogWrapper log) { PingRequest pingRequest = new PingRequest(false, true); testCommon(pingRequest, log); } private static void testCommon(PingRequest pingRequest, final LogWrapper log) { final long start = System.currentTimeMillis(); log.log("Sending object: " + pingRequest.getObject()); DispatchAsync dispatcher = getDispatchAsync(); AsyncCallback<PingRequestResult> callback = new AsyncCallback<PingRequestResult>() { @Override public void onSuccess(PingRequestResult result) { if (result == null) { log.log("Received null at " + (System.currentTimeMillis() - start) + "ms"); } else { log.log("Received result: " + result.get() + " at " + (System.currentTimeMillis() - start) + "ms"); } } @Override public void onFailure(Throwable caught) { log.log("Received exception: " + caught.getMessage() + " at " + (System.currentTimeMillis() - start) + "ms"); } }; dispatcher.execute(pingRequest, callback); } } 


LogWrapper.java
 public interface LogWrapper { void log(String text); } 


рдЕрдм рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдПрдБ

activity_main.xml
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Spinner android:id="@+id/actionTypeSP" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" /> <Button android:id="@+id/runBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/actionTypeSP" android:text="Run" /> <ScrollView android:id="@+id/scroller" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/runBtn" android:background="#FFFFFF" > <TextView android:id="@+id/logView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="3dp" android:scrollHorizontally="false" android:scrollbars="vertical" android:textSize="15sp" /> </ScrollView> </RelativeLayout> 


рдареАрдХ рд╣реИ, рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб

MainActivity.java
 import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends Activity { enum ActionType { BASIC_STRING_OBJECT("Basic Object Send/Receive"), BASIC_ARRAYLIST_OBJECT("Basic ArrayList Send/Receive"), NULL_SUB_OBJECT("Null argument Send/Receive"), NULL_OBJECT("Null Receive"), EXCEPTION("Remote Exception") ; String description; ActionType(String description) { this.description = description; } @Override public String toString() { return description; } } Spinner actionTypeSP; TextView logView; ScrollView scroller; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } void init() { initActionList(); logView = (TextView) findViewById(R.id.logView); scroller = (ScrollView) findViewById(R.id.scroller); initRunButton(); } void initActionList() { actionTypeSP = (Spinner) findViewById(R.id.actionTypeSP); ArrayAdapter<ActionType> dataAdapter = new ArrayAdapter<ActionType>( this, android.R.layout.simple_spinner_item, ActionType.values()); dataAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); actionTypeSP.setAdapter(dataAdapter); } void initRunButton() { Button runBtn = (Button) findViewById(R.id.runBtn); final LogWrapper log = new LogWrapper() { @Override public void log(String text) { MainActivity.this.log(text); } }; runBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ActionType actionType = (ActionType) actionTypeSP .getSelectedItem(); if (actionType != null) { switch (actionType) { case BASIC_STRING_OBJECT: RPCUtils.runBasicStringTest(log); break; case BASIC_ARRAYLIST_OBJECT: RPCUtils.runBasicListTest(log); break; case EXCEPTION: RPCUtils.runExceptionTest(log); break; case NULL_OBJECT: RPCUtils.runNullObjectTest(log); break; case NULL_SUB_OBJECT: RPCUtils.runNullSubObjectTest(log); break; default: break; } } } }); } void log(String str) { String text = logView.getText().toString(); text += str + "\n"; logView.setText(text); scroller.smoothScrollTo(0, logView.getBottom()); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ

AndroidManifest.xml
 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.customware.http.dispatch.test.client.android" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.INTERNET"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 


рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



рдЖрдкрдХреЛ рдКрдкрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд░рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рднреЗрдЬреЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реЙрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред рдЙрдкрд▓рдмреНрдз рдХреНрд░рд┐рдпрд╛рдПрдВ: рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬреЗрдВ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬреЗрдВ ArrayList <рд╕реНрдЯреНрд░рд┐рдВрдЧ> , рдЕрд╢рдХреНрдд рднреЗрдЬреЗрдВ, рдПрдХ рдЕрд╢рдХреНрдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВред

рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдореИрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

рд╕рдВрджрд░реНрдн



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреГрд╖реНрда: code.google.com/p/http-dispatch
Android рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди: http-dispatch.googlecode.com/files/HTTP_Dispatch_Test_Android.apk
рддреИрдпрд╛рд░ рд╡рд╛рд░: http-dispatch.googlecode.com/files/HTTP_Dispatch_Test_Server.war
рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП Android рдРрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ:
http-dispatch.googlecode.com/files/HTTP_Dispatch_Test_Android.zip

Gwt -dispatch рдлреНрд░реЗрдорд╡рд░реНрдХ: code.google.com/p/gwt-dispatch

рдкреБрдирд╢реНрдЪ
HTTP- рдкреНрд░реЗрд╖рдг рдореЗрдВ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ gwt-dispatch рдврд╛рдВрдЪрд╛, рдХрд╛рдлреА рд╡рд┐рд╡рд┐рдз рд╣реИред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдЕрдЧрд▓реА рдмрд╛рд░ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЧреБрдЗрд╕ рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдг рдФрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреГрд╖реНрда рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In148436/


All Articles