为了让 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 或使 RequestFactoryServlet 正常工作而不更改 GWT 源。
最佳答案
我希望 GWT 2.3 能够解决您的问题:
http://code.google.com/p/google-web-toolkit/issues/detail?id=6092
关于java - 将 GWT RequestFactory 与 Grails 一起使用时的类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5699754/