Проблема с GWT позади обратного прокси - или nginx или апач

Хорошо, я запустил некоторые мои собственные тесты.

  • , Если Вы не объявляете, Ваш собственный конструктор в подклассе, пытаясь инстанцировать его бросит фатальную ошибку, потому что это пытается назвать конструктора суперкласса.
  • В случае соединения с БД при возможном возврате (в PHP, так или иначе) mysqli экземпляра или ресурса, возвращенного mysql_connect() функция (или некоторая другая ссылка на некоторый другой RDBMS), пока Вы отмечаете частный экземпляр, нет никакой угрозы кого-то разделяющего его на подклассы и вмешивающийся в ссылку.
  • , Поскольку я сослался на прежде, если кто-то действительно хочет переопределить Ваше поведение и установить многочисленные связи, они могли бы точно также сделать это путем записи нового класса.
16
задан Don Branson 16 October 2009 в 14:04
поделиться

3 ответа

Я почти уверен, что правильный ответ здесь - исправить источник и отправить отчет об ошибке. Другой вариант - запустить приложение GWT по адресу / на вашем сервере.

Я бы предпочел первое, но второе тоже должно работать. Если вам действительно нужно разделить вещи на несколько контекстов, используйте другой номер порта?

3
ответ дан 30 November 2019 в 21:54
поделиться

Я столкнулся с аналогичной проблемой, успешным решением было заставить все сериализованные объекты реализовать интерфейс IsSerializable GWT (в дополнение к стандартному интерфейсу Serializable). Если вы читаете сообщение, в нем говорится, что «будет использоваться устаревшая, совместимая с 1.3.3 политика сериализации» - совместимая с 1.3.3 политика требует, чтобы все ваши сериализованные объекты реализовали интерфейс IsSerializable, поэтому, добавив его, все заработало.

У меня действительно есть опасения, что устаревшая политика не будет поддерживаться в будущих версиях GWT, поэтому я также ищу лучший способ обхода проблемы.

2
ответ дан 30 November 2019 в 21:54
поделиться

У меня такая же проблема, и я открыл отчет об ошибке:

http://code.google.com/p/google-web-toolkit/issues/detail?id=4817

Проблема в том, что он был помечен как "As Design", поэтому я не думаю, что он будет исправлен.

Я нашел для себя следующее решение. Я расширил класс RemoteServiceServlet и заставил GWT загружать файл политики сериализации, начиная с ContextName вместо URL. Затем я расширил свой сервис своим классом вместо класса RemoteServiceServlet. Таким образом, приложение будет отвязано от URL, с которого оно будет вызываться.

Вот мой пользовательский класс:

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.ParseException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.gwt.user.server.rpc.SerializationPolicy;
import com.google.gwt.user.server.rpc.SerializationPolicyLoader;

public class MyRemoteServiceServlet extends RemoteServiceServlet
{
    @Override
    protected SerializationPolicy doGetSerializationPolicy(HttpServletRequest request, String moduleBaseURL, String strongName)
    {
        return MyRemoteServiceServlet.loadSerializationPolicy(this, request, moduleBaseURL, strongName);
    }


    /**
      * Used by HybridServiceServlet.
      */
      static SerializationPolicy loadSerializationPolicy(HttpServlet servlet,
      HttpServletRequest request, String moduleBaseURL, String strongName) {
    // The serialization policy path depends only by contraxt path
    String contextPath = request.getContextPath();

    SerializationPolicy serializationPolicy = null;


    String contextRelativePath = contextPath + "/";



      String serializationPolicyFilePath = SerializationPolicyLoader.getSerializationPolicyFileName(contextRelativePath
          + strongName);

      // Open the RPC resource file and read its contents.
      InputStream is = servlet.getServletContext().getResourceAsStream(
          serializationPolicyFilePath);
      try {
        if (is != null) {
          try {
        serializationPolicy = SerializationPolicyLoader.loadFromStream(is,
            null);
          } catch (ParseException e) {
        servlet.log("ERROR: Failed to parse the policy file '"
            + serializationPolicyFilePath + "'", e);
          } catch (IOException e) {
        servlet.log("ERROR: Could not read the policy file '"
            + serializationPolicyFilePath + "'", e);
          }
        } else {
          String message = "ERROR: The serialization policy file '"
          + serializationPolicyFilePath
          + "' was not found; did you forget to include it in this deployment?";
          servlet.log(message);
        }
      } finally {
        if (is != null) {
          try {
        is.close();
          } catch (IOException e) {
        // Ignore this error
          }
        }
      }

    return serializationPolicy;
      }
}
8
ответ дан 30 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: