2011-01-04 7 views
3

私はGWTを初めて使用しています。私はそこにmysqlサーバーと接続しようとしています。続きmysqlでGWTを使用する

は私のプロジェクト階層である:

プロジェクト名はhelloで、パッケージ名はcom.helloです。デフォルトGWTによって は

  1. com.hello.client
  2. com.hello.server

エントリポイントを含むメインjavaファイルをcom.hello.sharedある3つのフォルダを作成しますGWTはhello.javaという名前でcom.hello.clientフォルダにあります

mysqと接続するために必要なコードをすべて含むクラスdb_conn(ファイル名はdb_conn.java)を作成しました。 lデータベース。このファイルはcom.hello.serverフォルダに置かれています。 (com.hello.clientフォルダにあり、GWTのためのメインエントリポイントが含まれています)私がしようとしているとき、私はimport com.hello.server.*;

によってクラスの上にインポートしたhello.javaファイル内のコード

package com.hello.server; 

import java.sql.Connection; 
import java.sql.DriverManager; 

public class db_conn 
{ 
    public Connection con; 

    public db_conn() 
    { 

    } 

    public String ConnectToDB() 
    { 
     try 
     { 
      String host   = "localhost"; 
      String db   = "test"; 
      String driver  = "com.mysql.jdbc.Driver"; 
      String user   = "root"; 
      String pass   = "pwd"; 

      Class.forName(driver).newInstance(); 
      con = DriverManager.getConnection(host+db, user, pass); 

      return "Connected to Database"; 
     } 
     catch(Exception ex) 
     { 
      return ex.toString(); 
     } 

    } 
} 

は次のとおりhello.javaにonModuleLoad()db_connクラスからConnectToDB()機能を使用するために、それは私に次のエラーを与えている:

com.hello.server.db_conn can not be found in source packages. Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly.

コードスニップペットのウィンドウにdb_connクラスが表示されますが、このクラスを使用するとエラーになります。 私は正確な問題を把握することができません。助けてください。

おかげ

答えて

8

あなたのクライアントファイルのみGWTは、実際にはJavaScriptにコンパイルできるコードが含まれている必要があります。したがって、クライアントコードから

import com.hello.server.*

を削除する必要があります。かわりに、クライアントコードにサービスインターフェイスを追加し、このインターフェイスをサーバーに実装する必要があります。

だからあなたのプロジェクトのレイアウトは、(JavaScriptにしてコンパイルした)この

  • クライアントコード

    com/hello/client/HelloService.java
    com/hello/client/HelloServiceAsync.java

  • ものJavaScriptにコンパイルされ、サーバーとクライアント間で共有RPCコード(のようなものになってしまうはずです)

    com/hello/shared/HelloModel.java

  • HelloServiceHelloModel(MySQL接続を参照)。

    com/hello/server/HelloServiceImpl.java

+0

私はここでクライアントコードを参照していません。 –

+2

合意。問題は、クライアントコードがデータベースコードを参照していることです。 'onModuleLoad()'はクライアント側で実行されます。 –

1

ラースに同意します。安定性とセキュリティの理由から、クライアントコードからデータベースに接続することは本当にありません。ここで「懸念の分離」を適用してください。クライアントはサーバーコードを呼び出す必要があり、サーバーコードはデータベースを呼び出す必要があります。ですから、GWTでサービスメソッドを作成し、クライアントから呼び出す方法について読んでください。

1

クライアントはDBと直接通信できません。代わりに、サーバーにコマンドを送信するいくつかのインターフェイスコード(サービス)と話す必要があります。サーバーはコマンドを読み取り、DB操作に変換して実行し、サービスを再度使用して結果をクライアントに返します。

this tutorial for an exampleを参照してください。

+0

リンクありがとう! –

0

私は同じ問題に直面しています。私はそれのための解決策を見つけた幸い、それは非常に簡単です。

私はGWTプロジェクトを作成しながら、プロジェクトを命名しながら、あなたは、Googleのアプリケーションエンジンを「OFF TICK」を確認し、あなたのアプリケーションを聞かせてあなたは、Eclipse IDEを使用していると仮定し、あなたに

  1. を手順を教えてみましょうGoogle Web Tool KITで実行します(これにより、データベース接続時に発生するバグ、つまり過渡的なエラーが解決されます)。

  2. (クラスが見つかりません)のようなエラー/例外がある場合は、SQLコネクタjarファイルをインポートしていることを確認してください。 次の操作を行います

    後藤あなた:WAR - LIB> - - > WEBINF >が、これはクラスが見つからないバグを解決するために起こっている、LIB内のSQLコネクタのファイルを貼り付けます。

関連する問題