динамический сервер движка приложения не работает должным образом в режиме разработки - PullRequest
0 голосов
/ 09 августа 2011

Эта проблема была протестирована и возникает в режиме разработки (Eclipse ...).

У меня есть один настроенный бэкэнд (в файле backends.xml):

<backends>
    <backend name="example">
        <class>B8</class>
        <options>
            <instances>1</instances>
            <public>false</public>
            <dynamic>true</dynamic>
        </options>
    </backend>
</backends>

КакВы видите, что он явно установлен как «динамический».

Это мой web.xml:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <servlet>
        <servlet-name>backend_test</servlet-name>
        <servlet-class>BackendTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>backend_test</servlet-name>
        <url-pattern>/_ah/start</url-pattern>
    </servlet-mapping>

</web-app>

.. просто обычная точка входа сервлета в бэкэнд.

И вот код Java бэкэнда:

import java.io.IOException;

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

@SuppressWarnings("serial")
public class BackendTest extends HttpServlet
{

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException
    {
        System.out.println("Backend started!");

        // ............

        System.out.println("Backend terminating!");
    }
}

Теперь, когда я нажимаю F11 и начинаю отлаживать приложение, это вывод в консоли:

INFO: The server is running at http://localhost:8888/
Backend started!
Backend terminating!

Если я понимаю эта строка документа правильно не должна запускаться, пока я не запросю /_ah/start (http).В нем четко сказано:

Когда вы запускаете динамический бэкэнд, App Engine позволяет ему принимать трафик, но запрос / _ah / start не отправляется экземпляру, пока он не получит свой первый пользовательский запрос.

Еще один побочный эффект, связанный с этой проблемой, заключается в том, что серверная часть, кажется, никогда не «останавливается», я имею в виду, что она остается в «запущенном» состоянии (как я вижу в области администрирования на http://127.0.0.1:8888/_ah/admin/backends).
После того, как он был прерван (в приведенном выше коде, как это четко напечатано в консоли), не должен ли он быть отключен через несколько минут?(Я жду около 20 минут).

Что я делаю не так?

Кстати, моя конечная цель - запустить некоторый код в контексте "Backend", как запустить«Задача».Я хочу "Backend" из-за питания ЦП / ОЗУ и отсутствия ограничений по времени.

Пожалуйста, просветите меня.Спасибо!

1 Ответ

2 голосов
/ 09 августа 2011

SDK не всегда точно отражает производственную среду.Запуск и завершение работы бэкэндов, вероятно, будет одной из областей, в которых это происходит.

Если вы обнаружите, что бэкэнд ведет себя так, как ожидается в рабочей среде, сообщите об ошибке для SDK.

...