Использование GWT с mysql

Я новичок в ГВТ. Я пытаюсь подключиться к серверу mysql.

Ниже приведена иерархия моих проектов:

Имя проекта — hello, а имя пакета — com.hello. По умолчанию GWT создает 3 папки, которые

  1. com.hello.client
  2. com.hello.server
  3. com.hello.shared

Основной java-файл, содержащий точку входа для GWT, находится в папке com.hello.client с именем hello.java.

Я создал класс db_conn (имя файла db_conn.java), который содержит весь необходимый код для подключения к базе данных mysql. Этот файл находится в папке com.hello.server. Ниже приведен код

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 (который находится в папке com.hello.client и содержит основную точку входа для GWT) я импортировал класс выше с помощью import com.hello.server.*;

Когда я пытаюсь использовать функцию ConnectToDB() из класса db_conn в onModuleLoad() в hello.java, это дает мне следующую ошибку:

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, но когда я использую этот класс, возникает ошибка. Я не могу понять точную проблему. Пожалуйста помоги.

Спасибо


person Vinod Maurya    schedule 04.01.2011    source источник


Ответы (4)


Ваши клиентские файлы должны содержать только тот код, который GWT может скомпилировать в JavaScript. Таким образом, вы должны удалить

импортировать com.hello.server.*

из клиентского кода. Вместо этого вы должны добавить интерфейс службы в клиентский код, а затем реализовать этот интерфейс на сервере.

Таким образом, ваш макет проекта должен выглядеть примерно так:

  • #P5# <блочная цитата> #P6#
  • #P7# <блочная цитата> #P8#
  • #P9# <блочная цитата> #P10#
person Lars Tackmann    schedule 04.01.2011
comment
Согласованный. Проблема в том, что ваш клиентский код ссылается на код базы данных. 'onModuleLoad()' выполняется на стороне клиента. - person Don Branson; 04.01.2011

Согласен с Ларсом. Вы действительно не хотите подключаться к своей базе данных из клиентского кода, среди прочего, из соображений стабильности и безопасности. Примените «разделение интересов» здесь. Клиент должен вызывать код сервера, а код сервера должен вызывать базу данных. Итак, читайте в GWT о создании сервисных методов и их вызове из клиента.

person Don Branson    schedule 04.01.2011

Клиент не может напрямую общаться с БД. Вместо этого он должен обращаться к некоторому интерфейсному коду (службам), который отправляет команды на сервер. Сервер считывает команды, преобразует их в операции БД, выполняет их, а затем снова использует службы для отправки результатов обратно клиенту.

Пример см. в этом руководстве.

person Aaron Digulla    schedule 04.01.2011

Я столкнулся с той же проблемой. К счастью, я нашел решение для этого, это очень просто.

Позвольте мне рассказать вам шаги

  1. Я предполагаю, что вы используете Eclipse IDE, поэтому при создании проекта GWT убедитесь, что при именовании вашего проекта вы «ОТМЕЧАЕТЕ» движок Google APPLICATION и позволяете вашему приложению работать в KIT веб-инструмента Google (это устраняет ошибку, возникающую при подключении к базе данных, что-то вроде ошибки перехода).

  2. Если у вас возникла ошибка/исключение, например (класс не найден), убедитесь, что вы импортировали файл jar соединителя SQL. Выполните следующие действия:

    перейдите к вашему: WAR -> WEBINF -> lib -> вставьте файлы соединителя SQL внутри lib, это решит, что класс не найден ошибка.

person baidya    schedule 02.08.2012