Чтобы запустить GWT RequestFactory с Grails, я использую следующий подход:
class GwtController extends RequestFactoryServlet {
public GwtController() {
super()
}
def index = {
doPost request, response
}
@Override
public ServletContext getServletContext() {
return ServletContextHolder.servletContext
}
@Override
public ServletConfig getServletConfig() {
return new DummyServletConfig(getServletContext(),"grails");
}
}
, где DummyServletConfig - простая реализация ServletConfig
Это работает при развертыванииприложение для кота.Однако, используя режим тестирования или разработки, это не так.Мне было необходимо настроить сервлет GWT, чтобы он не использовал неправильный загрузчик классов:
В строке 46 я изменил
private static final RequestFactoryInterfaceValidator validator =
new RequestFactoryInterfaceValidator(log,
new RequestFactoryInterfaceValidator.ClassLoaderLoader(
ServiceLayer.class.getClassLoader()));
на
private static final RequestFactoryInterfaceValidator validator = new RequestFactoryInterfaceValidator(
log, new RequestFactoryInterfaceValidator.ClassLoaderLoader(
Thread.currentThread()
.getContextClassLoader()));
В противном случае он не найдет мои классы Домена (которые, очевидно, находятся не в GrailsRootLoader, а в загрузчике классов Thread).
Теперь я хотел бы вернуть свой сервлет GWT в официальный двоичный файл, выпущенный Google иИнтересно, как я могу исправить неправильный ClassLoader в Grails или заставить корректно работать RequestFactoryServlet без изменения источника GWT.