Java 将GWT RequestFactory与Grails一起使用时的类加载器问题

Java 将GWT RequestFactory与Grails一起使用时的类加载器问题,java,gwt,grails,classloader,requestfactory,Java,Gwt,Grails,Classloader,Requestfactory,为了让GWT RequestFactory与Grails一起运行,我使用以下方法: class GwtController extends RequestFactoryServlet { public GwtController() { super() } def index = { doPost request, response } @Override public ServletContext getSe

为了让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

这在将应用程序部署到tomcat时起作用。但是,使用测试或开发模式时,情况并非如此。我需要调整GWT Servlet,以防止它使用错误的类加载器:

第46行我换了

private static final RequestFactoryInterfaceValidator validator =
  new RequestFactoryInterfaceValidator(log,
      new RequestFactoryInterfaceValidator.ClassLoaderLoader(
          ServiceLayer.class.getClassLoader()));

否则,它将找不到我的域类(这些类显然不在GrailsRootLoader中,而是在线程的类装入器中)


现在,我想将我的GWT servlet恢复为Google发布的官方二进制文件,我想知道如何在不改变GWT源代码的情况下修复Grails中不正确的类加载器或使RequestFactoryServlet正常工作。

我希望GWT 2.3能解决您的问题:


没有,因为ResolverServiceLayer使用的RequestFactoryInterfaceValidator仍在使用ServiceLayer.class.getClassLoader()-我现在将它作为一个bug进行归档。嗨,fabus,您是否设法将GWT RequestFactory与Grails后端一起使用?你有什么建议吗?我对GWT和Grails的结合很感兴趣,但将两者结合起来似乎并不容易。是的,我们有。诀窍是使用GWT2.4 RC1或使用ServiceLayer覆盖默认的RequestFactoryInterfaceValidator,如上所述。让我知道如果你有麻烦(或提出另一个问题)Tks法布斯。您是否使用grails gwt插件?或者您只是将GWT类放在grails的JavaSRC文件夹中?因为GWT和Grails有不同的文件夹结构,所以。。。。如果你愿意,我可以就此提出一个问题……是的,只要使用gwt插件,它就会为你创建/src/gwt
private static final RequestFactoryInterfaceValidator validator = new RequestFactoryInterfaceValidator(
  log, new RequestFactoryInterfaceValidator.ClassLoaderLoader(
      Thread.currentThread()
                        .getContextClassLoader()));