2

GWTアプリを作成しようとしていますが、ローカルのpostgreSQLデータベースを使用しています。私はEclipseJunoでGWT2.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>

どこが間違っているのかわかりません。誰かplzが私を助けることができますか!?

4

3 に答える 3

0

何が問題なのかわかりません。しかし、エラーメッセージは、GoogleAppEngineが有効になっていることを示唆しているようです。これは、Google App Engineにデプロイする場合にのみ必要であり、Google AppEngineでPostgreSqlを実行できないため、明らかに他の何かのために開発しているため、意味がありません。

さらに、finallyステートメントにcloseを配置してデータベース接続を閉じ、特定のデータ型を返すことをお勧めします。つまり、ListではなくArrayListです。それ以外の場合、コンパイラはListのすべてのサブクラスのコードを生成します。これは、コンパイル時にコンパイラが使用されるサブクラスを認識できないためです。

于 2012-12-03T20:59:33.553 に答える
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 に答える
0

serviceImplクラスの先頭に@RemoteServiceRelativePathアノテーションを追加する必要があります。

https://developers.google.com/web-toolkit/doc/latest/tutorial/RPCを参照する か、google eclipseプラグインをインストールしている場合は、サンプルコードを使用して新しいプロジェクトを作成し、サンプルコードも参照できます。 。

于 2012-12-13T17:20:11.643 に答える