Mało znany, bo nie wymieniany w książkach. Mianowicie kto używa adnotacji @RemoteServiceRelativePath, khe? Pewno niewielu z was. Co daje nam ta adnotacja? Otóż w tradycyjnym sposobie tworzenia połączenia wykorzystujemy rzutowanie na ServiceDefTarget i wywołanie metody ServiceDefTarget#setServiceEntryPoint(java.lang.String). Przykładowy kod wygląda zatem tak:
Listing 1. Klasycznie tworzony serwis
public static HttpSessionAccessorAsync makeHttpSessionAccessorAsync() { HttpSessionAccessorAsync httpSessionAccessorAsync = GWT.create(HttpSessionAccessor.class); ServiceDefTarget endpoint = (ServiceDefTarget) httpSessionAccessorAsync; endpoint.setServiceEntryPoint(GWT.getHostPageBaseURL() + "security/admin/SessionAdminService"); return httpSessionAccessorAsync; }
Jeżeli jednak w naszym interfejsie HttpSessionAccessor dokonamy małej poprawki:
Listing 2. Poprawiony interfejs
import java.util.List; import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; /** * The Interface HttpSessionAccessor. */ @RemoteServiceRelativePath("security/admin/SessionAdminService") public interface HttpSessionAccessor extends RemoteService { /** * Destroy session. * * @param httpSessionDTO * the http session dto */ public void destroySession(HttpSessionDTO httpSessionDTO); /** * Destroy session. * * @param id * the id */ public void destroySession(String id); /** * Gets the session by id. * * @param id * the id * * @return the session by id */ public HttpSessionDTO getSessionById(String id); /** * Gets the sessions. * * @return the sessions */ public ListgetSessions(); }
Dodając adnotację to nasz kod metody fabrykującej znacząco się uprości:
Listing 3. Nowa wersja kodu
public static HttpSessionAccessorAsync makeHttpSessionAccessorAsync() { return GWT.create(HttpSessionAccessor.class); ; }
Od razu lepiej prawda? Oczywiście tradycyjna droga nadpisze wartość z adnotacji, ale to jest akurat rozsądne.
Nie wymieniany w książkach? Hmm… pewnie stare książki masz 😉 Ja co prawda żadnej książki do GWT nie czytałem, ale dokumentacja na ich stronach jest porządna. Ta adnotacja działa już od GWT… chyba 1.5. Nie wiem dokładnie od której wersji, ale na pewno od wielu miesięcy.
Książki „GWT w Praktyce” i „Google Web Toolkit Solutions: More Cool & Useful Stuff” nie ma 🙂 Ja na to tez nabiłem sie w dokumentacji.
Przykładowa aplikacja albo z tutoriala google, albo generowana w pluginie do Eclipse z tego korzysta 😉
Tylko, że ja jestem zapóźniony w rozwoju z GWT i ugrzęzłem dość długo na 1.4. Teraz nadrabiam braki 🙂