javagwtgwt-rpcgwt2

IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser


My GWT Project was working fine but today, after some changes and adding new fetures one async call is not executed. The exception is "This application is out of date, please click the refresh button on your browser." all other async calls are executed.

 An IncompatibleRemoteServiceException was thrown while processing this call.
 com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser. ( Blocked attempt to access interface 'com.client.FInterface', which is not implemented by 'com.server.FServiceImpl'; this is either misconfiguration or a hack attempt )
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:252)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:206)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)

Client :

     public void onClick(ClickEvent event) {

                            fService.getRepositories(repocallback);

        }
    });

Interface

   @RemoteServiceRelativePath("init")
  public interface FInterface extends RemoteService{    

    FCollection getRepositories();
 }

AsyncInterface

  public interface FInterfaceAsync {
void getRepositories(AsyncCallback<FCollection> repositoryCallback);
}

Service

   public class FService implements FInterfaceAsync {
FInterfaceAsync service =(FInterfaceAsync)GWT.create(FInterface.class);
ServiceDefTarget endpoint = (ServiceDefTarget) service;

    public FService(){
    endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "init");
     }
        }

Server

 public class FServiceImpl extends RemoteServiceServlet implements  FInterface {

       public FilnetFolderCollection getRepositories() {
       } 

 }

XML :

   <servlet>
   <servlet-name>FServlet</servlet-name>
  <servlet-class>com.server.FServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
  <servlet-name>FServlet</servlet-name>
  <url-pattern>/FServiceImpl</url-pattern>
  </servlet-mapping>

Somebody help me to fix this problem.


Solution

  • This error is thrown if the Javascript code that is running in the browser is a different version as Javascript deployed on the server. In that case in the JavaScript code in the browser calls a method on the server via Async and that method's number of parameters or parameter types have changed on the server this method is not present as the GWT server side can't find a method with that number of parameters or types, since the methods on the server are newer. This can happen if the browser still has the GWT Javascript cached and when you start the browser it won't load the new JavaScript files from the server, but takes the local files from cache. By forcing the browser with Ctrl-F5 to refresh the local cached version in the browser will be gone as the new version from the server will be retrieved and this problem should be fixed. In production this problem can be caused if the cache settings of the webserver or java server not set to invalidate the nocache file. See also http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html#perfect_caching