Проблема ClassLoader при использовании GWT RequestFactory с Grails - PullRequest
1 голос
/ 18 апреля 2011

Чтобы запустить 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.

1 Ответ

2 голосов
/ 18 апреля 2011

Я надеюсь, что GWT 2.3 решит вашу проблему:

http://code.google.com/p/google-web-toolkit/issues/detail?id=6092

...