Mało znany ficzer GWT

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 List getSessions();

}

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.

4 myśli na temat “Mało znany ficzer GWT

  1. 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.

  2. 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.

  3. Przykładowa aplikacja albo z tutoriala google, albo generowana w pluginie do Eclipse z tego korzysta 😉

  4. Tylko, że ja jestem zapóźniony w rozwoju z GWT i ugrzęzłem dość długo na 1.4. Teraz nadrabiam braki 🙂

Napisz odpowiedź

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax