为了让 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()));
至
private static final RequestFactoryInterfaceValidator validator = new RequestFactoryInterfaceValidator(
log, new RequestFactoryInterfaceValidator.ClassLoaderLoader(
Thread.currentThread()
.getContextClassLoader()));
否则,它不会找到我的 Domain 类(它们显然不在 GrailsRootLoader 中,而是在 Thread 的类加载器中)。
现在我想将我的 GWT servlet 恢复为 Google 发布的官方二进制文件,我想知道如何在 Grails 中修复不正确的 ClassLoader 或在不更改 GWT 源的情况下使 RequestFactoryServlet 正常工作。