GrailsでGWTRequestFactoryを実行するために、私は次のアプローチを使用しています。
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サーブレットを調整する必要がありました。
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には存在しませんが、スレッドのクラスローダーに存在します)が見つかりません。
ここで、GWTサーブレットをGoogleがリリースした公式バイナリに戻したいのですが、Grailsの誤ったClassLoaderを修正したり、GWTソースを変更せずにRequestFactoryServletを正しく機能させるにはどうすればよいでしょうか。