Java 将GWT RequestFactory与Grails一起使用时的类加载器问题
为了让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
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()));