2

我正在尝试创建一个 GWT 应用程序,并且正在使用本地 postgreSQL 数据库。我在 eclipse Juno 上使用 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>

要打开与数据库的连接,我在 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>

我不明白我错在哪里。有人可以帮助我吗!?

4

3 回答 3

0

我不确定问题是什么。但错误消息似乎表明您启用了 google appengine。这没有任何意义,因为只有在您想在 Google 应用引擎上部署时才需要它,而且您显然是在为其他东西开发,因为您无法在 Google 应用引擎上运行 PostgreSql。

此外,确保通过将 close 放在 finally 语句中来关闭数据库连接,并且更喜欢返回特定的数据类型;即 ArrayList 而不是 List。否则编译器将为 List 的所有子类生成代码,因为在编译时编译器无法知道将使用哪个子类。

于 2012-12-03T20:59:33.553 回答
0

您需要在 serviceImpl 类的开头添加 @RemoteServiceRelativePath 注释。

请参考https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC 或者如果你已经安装了 google eclipse 插件,使用示例代码创建一个新项目,你也可以参考示例代码.

于 2012-12-13T17:20:11.643 回答
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) { //你的查询 }

于 2012-12-03T18:18:11.600 回答