GWT использует другую парадигму по сравнению со всеми учебными CRUD-структурами, которые решают очень мало IMO. Думайте об этом как о старом добром Свинге. Связь уже встроена (GWT-RPC). Единственный способ улучшить его - ни одна из этих инфраструктур CRUD не предлагает - это создать несколько шаблонов (ваш собственный набор более богатых виджетов и т. Д.), Который работает с некоторыми унифицированными данными. И, конечно же, соответствующий код на сервере. Таким образом, вы можете использовать общие методы GWT-RPC и общие структуры данных для передачи данных, а не миллионы методов во всех этих интерфейсах. В противном случае GWT-RPC так же хорош, как и любая универсальная «среда» CRUD, в которой эти «миллионы» методов находятся на «фасаде сервиса».
Одна вещь, которую вы можете сделать, это "интегрировать" GWT-RPC с Spring MVC. Всего несколько строк кода - и вы можете реализовать свои службы GWT-RPC как стандартные Spring @Controllers. У них будет доступ ко всем компонентам с автопроводкой и т. Д. Что еще нужно? Через Spring вы можете получить доступ к чему угодно.
Итак, вот как вы это делаете:
public abstract class GwtRpcController extends RemoteServiceServlet implements Controller, ServletConfigAware {
private static Log log = LogFactory.getLog(GwtRpcController.class);
private ServletConfig servletConfig;
@Override
public ServletConfig getServletConfig() {
return servletConfig;
}
@Override
public void setServletConfig(ServletConfig servletConfig) {
try {
this.init(servletConfig);
} catch (ServletException e) {
throw new RuntimeException(e);
}
this.servletConfig = servletConfig;
}
@Override
protected void onAfterRequestDeserialized(RPCRequest rpcRequest) {
super.onAfterRequestDeserialized(rpcRequest);
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
super.doPost(request, response);
return null;
}
@Override
protected void doUnexpectedFailure(Throwable e) {
log.error(e.getMessage(), e);
}
}
И ваш сервис GWT-RPC:
@RemoteServiceRelativePath("gwtrpc/xxx")
public interface XxxService extends RemoteService {
...
}
@Controller
@RequestMapping(value = "xxx")
public class XxxServiceImpl extends GwtRpcController implements XxxService {
...
}
Убедитесь, что «gwtrpc / *» сопоставлен с сервлетом SpringDispatcher в web.xml. Обычно вы сопоставляете все ("/") с ним и делаете исключения для ресурсов, не относящихся к Spring, таких как CSS и т. Д., Поэтому вам не нужно ничего делать явно.