我正在尝试创建一个GWT应用程序,我正在使用本地postgreSQL数据库。 我在Eclipse Eclipse上使用GWT 2.4。 我以这种方式实现了服务器端实现(TaskServiceImpl):
public class TaskServiceImpl extends ServiceImpl implements TaskService {
@Override
public List<Task> getAllTasks() {
em = this.getEntityManager();
Query q = em.createQuery("SELECT x FROM Task x");
List<Task> list = createList(q.getResultList().toArray(),
new ArrayList<Task>(), em);
em.close();
return list;
}
这是客户端的数据库连接类:
public class DatabaseConnection {
public static final TaskServiceAsync taskService;
static {
taskService = GWT.create(TaskService.class);
}
}
我现在尝试以这种方式运行getAllTask()
public void onModuleLoad() {
DatabaseConnection.taskService.getAllTasks(new AsyncCallback<List<Task>>() {
@Override
public void onSuccess(List<Task> result) {
System.out.println("Success!");
}
@Override
public void onFailure(Throwable caught) {
System.out.println("Fail!");
}
});
}
总是返回“失败!”并给我这个错误:
com.google.appengine.tools.development.LocalResourceFileServlet doGet 警告:找不到以下文件:/ fantapgl / task
这是我的web.xml
<servlet>
<servlet-name>taskServiceImpl</servlet-name>
<servlet-class>fieldProject.server.service.TaskServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taskServiceImpl</servlet-name>
<url-pattern>/fantaPGL/task</url-pattern>
</servlet-mapping>
打开与DB的连接我在persistence.xml中有这个代码:
<properties>
<property name="openjpa.jdbc.DBDictionary" value="postgres" />
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema()"/>
<property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver"/>
<property name="openjpa.ConnectionURL" value="jdbc:postgresql://localhost:5432/db" />
<property name="openjpa.ConnectionUserName" value="postgres" />
<property name="openjpa.ConnectionPassword" value="password" />
</properties>
我不明白我哪里错了。有人可以帮助我!?
答案 0 :(得分:0)
在执行查询之前:
1)使用jdbc驱动程序
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Your PostgreSQL JDBC Driver is missing! "
+ "Include in your library path!");
e.printStackTrace();
return "error";
}
2)连接数据库
Connection connection = null;
connection =
DriverManager.getConnection( "jdbc:postgresql://127.0.0.1:5432/"YourDB",
"admin",
"pass" );
3)然后执行查询
if(connection!= null){// Your query}
答案 1 :(得分:0)
我不确定问题是什么。但错误消息似乎表明你启用了谷歌appengine。这没有任何意义,因为如果你想部署在Google应用引擎上,你只需要这样做,并且你显然正在开发其他东西,因为你无法在Google appengine上运行PostgreSql。
Futhremore,确保通过将close放在finally语句中来关闭数据库连接,并且更喜欢返回特定的数据类型;也就是说,ArrayList而不是List。否则,编译器将为List的所有子类生成代码,因为在编译时编译器无法知道将使用哪个子类。
答案 2 :(得分:0)
您需要在serviceImpl类的开头添加@RemoteServiceRelativePath注释。
请参阅https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC 或者如果您已经安装了google eclipse插件,请使用示例代码创建一个新项目,您也可以参考示例代码。