【问题标题】:GWT file not found trouble during database connection数据库连接期间未发现 GWT 文件故障
【发布时间】:2012-12-03 16:57:27
【问题描述】:

我正在尝试创建一个 GWT 应用程序,并且正在使用本地 postgreSQL 数据库。 我在 eclipse Juno 上使用 GWT 2.4。 我用这种方式实现了Server端的实现(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>

我不明白我错在哪里。谁能帮帮我!?

【问题讨论】:

  • 你没有在你的代码中包含它,但是你有@RemoteServiceRelativePath注解吗?
  • 您还没有打开数据库连接并进行连接?
  • 对于连接,我在 persistence.xml 中使用了上面的代码,抱歉 Woojah 你对 @RemoteServiceRelativePath 注释是什么意思?

标签: database gwt servlets connection web.xml


【解决方案1】:

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

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

【讨论】:

  • 所以你的意思是我必须停用 G 应用引擎?它是默认激活的,我没有给予它重要性。您建议的从 List 到 ArrayList 的更改是必要的还是只是实现代码的更好方法?
  • 是的,如果您不为 appengine 开发,则您需要停用应用引擎(如果已启用),因为它会执行与 G 应用引擎限制相关的额外检查。使用 ArrayList 不是必需的,但非常推荐使用,因为 List 的所有子类将被添加到生成的代码中(这意味着脚本的最终用户需要更大的下载量)。
  • 所以我停用了 GAE 并重新创建了项目,现在我遇到了这个问题:Starting Jetty on port 8888 [WARN] EXCEPTION java.lang.ClassNotFoundException: com.google.api.server.spi.SystemServiceServlet 显然还有许多其他以 at java.lang.ClassLoader.findClass(ClassLoader.java:358) 开头的行
  • Google 插件在启用 GAE 时确实生成了许多东西。在 web.xml 中的其他配置项中(请参阅stackoverflow.com/questions/12796589/…),您只需删除这些依赖项,因为它们不相关。
  • 非常感谢 Hilbrand,您说得对,GAE 是主要问题。 OpenJPA 不适用于 GAE,基本上如果 GAE 被激活,我们必须使用 datanucleos
【解决方案2】:

执行查询之前:

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) { //你的查询 }

【讨论】:

  • 我忘了发布我是如何建立连接的......我尝试了你的建议,但连接类型是“com.google.cloud.sql.jdbc.Connection”?因为现在我有一个“com.google.cloud”无法解决的错误。那是要添加的额外库吗?还是G应用引擎的云?因为使用 PostgreSQL,我不认为 google.cloud 会起作用
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 2011-10-14
    • 2021-03-17
    • 1970-01-01
    • 2014-10-21
    • 2017-12-07
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多