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

}</httpsessiondto>

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.