Проблемы компиляции GWT в Java (Google App Engine) - PullRequest
5 голосов
/ 01 декабря 2011

У меня странная проблема компиляции с использованием движка Google App в java с использованием eclipse. Когда я пытаюсь GWT скомпилировать мой код, я получаю сообщение об ошибке:

Compiling module beer.SQLBeer
   Validating newly compiled units
      Ignored 1 unit with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
   Finding entry point classes
      [ERROR] Errors in 'file:/C:/Users/Mark/workspace/SQLBeer/src/beer/client/SQLBeer.java'
         [ERROR] Line 12: The import com.google.appengine.api.rdbms cannot be resolved
         [ERROR] Line 13: The import com.google.apphosting cannot be resolved
         [ERROR] Line 14: The import com.google.cloud cannot be resolved
         [ERROR] Line 18: ServersServlet cannot be resolved to a type
         [ERROR] Line 22: The method doPost(HttpServletRequest, HttpServletResponse) of type SQLBeer must override or implement a supertype method
         [ERROR] Line 26: Connection cannot be resolved to a type
         [ERROR] Line 28: AppEngineDriver cannot be resolved to a type
         [ERROR] Line 29: Connection cannot be resolved to a type
      [ERROR] Unable to find type 'beer.client.SQLBeer'
         [ERROR] Hint: Previous compiler errors may have made this type unavailable
         [ERROR] Hint: 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
Exception in thread "UnitWriteThread" 

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

[ERROR] Line 22: The method doPost(HttpServletRequest, HttpServletResponse) of type SQLBeer must override or implement a supertype method

Я новичок в использовании GWT и Google App Engine для Eclipse, но я пытаюсь получить доступ к базе данных, созданной моей командой с помощью Google Cloud SQL. И я чувствую, что я подхожу ближе, если смогу преодолеть эти ошибки.

Код проекта

package beer.client;


import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.rdbms.AppEngineDriver;
import com.google.apphosting.utils.servlet.ServersServlet;
import com.google.cloud.sql.jdbc.Connection;


@SuppressWarnings("serial")
public class SQLBeer extends ServersServlet {


    @Override 
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        PrintWriter out = resp.getWriter();
        Connection c = null;
        try {
            DriverManager.registerDriver(new AppEngineDriver());
            c = (Connection) DriverManager
                    .getConnection("jdbc:google:rdbms://asu.edu:cst433team1:team1db/mysql");
            String fname = req.getParameter("fname");
            String content = req.getParameter("content");

            /**
             * This code appears to do the web form fun
             */
//          if (fname == "" || content == "") {
//              out.println("<html><head></head><body>You are missing either a message or a name! Try again! Redirecting in 3 seconds...</body></html>");
//          } else {
//              String statement = "INSERT INTO entries (guestName, content) VALUES( ? , ? )";
//              PreparedStatement stmt = c.prepareStatement(statement);
//              stmt.setString(1, fname);
//              stmt.setString(2, content);
//              int success = 2;
//              success = stmt.executeUpdate();
//              if (success == 1) {
//                  out.println("<html><head></head><body>Success! Redirecting in 3 seconds...</body></html>");
//              } else if (success == 0) {
//                  out.println("<html><head></head><body>Failure! Please try again! Redirecting in 3 seconds...</body></html>");
//              }
//          }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (c != null)
                try {
                    c.close();
                } catch (SQLException ignore) {
                }
        }
        //resp.setHeader("Refresh", "3; url=/beer.jsp");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

Любое предложение о том, что я мог бы сделать, чтобы исправить эти ошибки? Я пробовал разные варианты импорта, но, похоже, все они приводят к одним и тем же проблемам в компиляторе GWT.

РЕДАКТИРОВАТЬ: я изменил расширение на HttpServlet, и теперь ошибка немного отличается

Compiling module beer.SQLBeer
   Validating newly compiled units
      Ignored 1 unit with compilation errors in first pass.
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
   Finding entry point classes
      [ERROR] Errors in 'file:/C:/Users/Mark/workspace/SQLBeer/src/beer/client/SQLBeer.java'
         [ERROR] Line 13: The import com.google.appengine.api.rdbms cannot be resolved
         [ERROR] Line 14: The import com.google.cloud cannot be resolved
         [ERROR] Line 26: Connection cannot be resolved to a type
         [ERROR] Line 28: AppEngineDriver cannot be resolved to a type
         [ERROR] Line 29: Connection cannot be resolved to a type
      [ERROR] Unable to find type 'beer.client.SQLBeer'
         [ERROR] Hint: Previous compiler errors may have made this type unavailable
         [ERROR] Hint: 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
Exception in thread "UnitWriteThread" java.lang.RuntimeException: Unable to read from byte cache

1 Ответ

5 голосов
/ 01 декабря 2011

Во-первых, убедитесь, что это не проблема с classpath - это означает, что у вас нет всех необходимых jar-файлов в каталоге lib и в classpath.

Если это не удастся, убедитесь, что этот код не на стороне клиента (исходя из имени вашего пакета), который будет скомпилирован в JavaScript. Вы не хотите, чтобы это происходило с кодом подключения к базе данных, поэтому вы должны использовать этот код на стороне сервера.

См. Документацию по на стороне клиента & на стороне сервера код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...