我的gwt項目有一些問題,我使用eclipselink和hsqldb作爲數據庫。GWT異步調用總是失敗
這裏是我的代碼: 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
}
});
但它失敗每次有這樣的警告:
WARNING: No file found for: /project/employeeService
所以,我怎麼能正確調用此方法?
EmployeeService.java
package com.example.client.service;
@RemoteServiceRelativePath("employeeService")
public interface EmployeeService extends RemoteService{
public void createemployee();
}
EmployeeServiceAsync.java
package com.example.client.service;
public interface EmployeeServiceAsync {
void createemployee(AsyncCallback<Void> callback);
}
EmployeeServiceImpl
package com.example.server.ServiceImpl;
public class EmployeeServiceImpl extends RemoteServiceServlet implements EmployeeService {
private static final long serialVersionUID = 1L;
public void createemployee() {
javax.persistence.EntityManagerFactory emf = Persistence.createEntityManagerFactory("ronfPU");
javax.persistence.EntityManager em = emf.createEntityManager();
try {
// Create new Employee
em.getTransaction().begin();
Employee e1 = new Employee();
e1.setName("admin");
e1.setSurname("admin");
e1.setUsername("admin");
e1.setPassword("admin");
em.persist(a1);
em.getTransaction().commit();
} finally {
em.close();
}
}
}
員工類存儲在com.example.shared.entity中;我認爲的persistence.xml和project.gwt.xml都OK,但我不知道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>
首先應該是,如果我理解正確的話,從@RemoteServiceRelativePath("employeeService")
派生; 而<servlet-class>
派生自存儲在服務器端的類,它擴展了RemoteServiceServlet; <servlet-mapping>
應該是<servlet-name>
,在這裏,在<url-pattern>
,我不知道我寫了什麼。
您如何建議正確運行此代碼?先謝謝你!
如果我將''設置爲'/ project/employeeService'我在控制檯中看到一個新錯誤:'SEVERE:javax.servlet.ServletContext log:分派傳入RPC調用時的異常 com.google.gwt.user.server .rpc。UnexpectedException:Service方法'public abstract void com.example.client.service.EmployeeService.createemployee()'拋出一個意外的異常:javax.persistence.PersistenceException:在嘗試以下發現的實現之後,沒有可用於「ronfPU」的持久性提供程序:org。 datanucleus.api.jpa.PersistenceProviderImpl'。你有什麼想法是什麼?謝謝 –
Ciotto
啊,「ronfPU」是設置在persistence.xml中的 –
Ciotto
一次發生一個錯誤。您修正了「找不到:/ project/employeeService」錯誤的文件,對嗎?現在,如果您有其他問題,請隨時提出另一個問題。 –