Java GWT异步调用总是失败

Java GWT异步调用总是失败,java,gwt,callback,Java,Gwt,Callback,我的gwt项目有一些问题,我使用eclipselink和hsqldb作为数据库 这是我的密码: Project.java: package com.example.client; public class Project implements EntryPoint { private final EmployeeServiceAsync eService = (EmployeeServiceAsync) GWT.create(EmployeeService.class); [...] som

我的gwt项目有一些问题,我使用eclipselink和hsqldb作为数据库

这是我的密码: Project.java:

package com.example.client;
public class Project implements EntryPoint {

private final EmployeeServiceAsync eService = (EmployeeServiceAsync) GWT.create(EmployeeService.class);

[...] some GWT code


@Override
public void onModuleLoad() {

        eService.createemployee(new AsyncCallback<Void>() {
            @Override
            public void onFailure(Throwable caught) {
                Window.alert("Fail!");
            }
            @Override
            public void onSuccess(Void result) {
            //nothing
            }
        });
那么我怎样才能正确地调用这个方法呢

EmployeeService.java

package com.example.client.service;
@RemoteServiceRelativePath("employeeService")
public interface EmployeeService extends RemoteService{

public void createemployee();
}
package com.example.client.service;
public interface EmployeeServiceAsync {

void createemployee(AsyncCallback<Void> callback);
}
EmployeeServiceAsync.java

package com.example.client.service;
@RemoteServiceRelativePath("employeeService")
public interface EmployeeService extends RemoteService{

public void createemployee();
}
package com.example.client.service;
public interface EmployeeServiceAsync {

void createemployee(AsyncCallback<Void> callback);
}
Employee类存储在com.example.shared.entity中;我认为persistence.xml和project.gwt.xml是可以的,但我不确定web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
          http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5" xmlns="http://java.sun.com/xml/ns/javaee">

<!-- Servlets -->
<servlet>
<servlet-name>employeeServiceImpl</servlet-name>
<servlet-class>
  com.example.server.ServiceImpl.EmployeeServiceImpl
</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>employeeServiceImpl</servlet-name>
</servlet-mapping>

<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>Project.html</welcome-file>
<url-pattern>/com.example.client.Project/employeeService</url-pattern>
</welcome-file-list>

</web-app>

雇员服务公司
com.example.server.serviceinpl.employeeserviceinpl
雇员服务公司
Project.html
/com.example.client.Project/employeeService
第一个应该是,如果我理解正确的话,派生自
@RemoteServiceRelativePath(“employeeService”)
; 而
派生自存储在服务器端的类,该类扩展了RemoteServiceServlet<代码>应该与
相同,在这里,在
中,我不确定我写了什么


您建议如何正确运行此代码?提前谢谢你

为客户端服务异步存根生成代码时,它会获取
@RemoteServiceRelativePath
注释的值,并在其前面加上
GWT.getModuleBaseURL()
(这在中进行了解释)

GWT.getModuleBaseURL()
是您的
nocache.js
文件所在的“文件夹”。在标准设置中,这直接取决于模块的名称(
project.gwt.xml
和放入的包)或模块中的
重命名为
参数。根据错误消息,您的情况是
http://…/project/
(您的
nocache.js
位于
project/project.nocache.js

您必须调整web.xml文件中的
以匹配该URL,因此在您的情况下,它应该是
/project/employeeService


简而言之:使用
@RemoteServiceRelativePath
配置客户端代码将调用的URL,使用
配置服务“侦听”的URL;如果我将
设置为
/project/employeeService
,我会在控制台中看到一个新错误:
严重:javax.servlet.ServletContext log:Exception,在调度传入RPC调用com.google.gwt.user.server.RPC时发生异常void com.example.client.service.EmployeeService.createemployee()'引发了意外异常:javax.persistence.PersistenceException:在尝试以下发现的实现后,“ronfPU”没有可用的持久性提供程序:org.datanucleus.api.jpa.PersistenceProviderImpl
。你知道那是什么吗?Thanksah,“ronfPU”在persistence.xml中设置为
,每次一个错误。您修复了“找不到:/project/employeeService的文件”错误,对吗?现在,如果你有其他问题,请随意问另一个问题。