在数据库连接期间未发现GWT文件问题

时间:2012-12-03 16:57:28

标签: database gwt servlets connection web.xml

我正在尝试创建一个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>

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

3 个答案:

答案 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插件,请使用示例代码创建一个新项目,您也可以参考示例代码。