Squeak.ru - шаблоны программирования

Вызовы App Engine UserService в исключении потока сервлета - Eclipse java

У меня есть базовый java-проект Google App Engine в Eclipse, который использует GWT. Я следовал инструкциям, чтобы настроить SDK ядра приложения и последнюю версию GWT в Eclipse и установить путь переменных среды в Windows, чтобы он указывал на корневую папку SDK.

Когда сервлет входа вызывается путем нажатия ссылки входа на стартовой странице (как определено в файле web.xml), вызов направляется в мой класс обработчика HttpServlet, как и ожидалось. Так что работает нормально. В коде я создаю UserService с помощью фабричного метода, но затем любой вызов, такой как isUserLoggedIn() или createLoginURL(), приводит к исключению. Я надеюсь, что проблема очевидна, но я потратил часы, пытаясь понять, что вызывает эту проблему, но безуспешно :(

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    UserService userService = UserServiceFactory.getUserService();
    if (userService.isUserLoggedIn()) {

Вот вывод консоли, когда происходит вызов isUserLoggedIn():

java.lang.IllegalStateException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.users.UserServiceImpl.getCurrentEnvironmentOrThrow(UserServiceImpl.java:152)
at com.google.appengine.api.users.UserServiceImpl.isUserLoggedIn(UserServiceImpl.java:96)

Знакомо ли это всем, кто использует этот тип среды разработки? Я надеюсь, что это простая настройка в файле конфигурации проекта или xml или что-то, что мне не хватает. Я успешно запускал аналогичный код несколько лет назад, но только вернулся к работе с GAE, поэтому, возможно, что-то важное изменилось в сервлетах или настройке проекта. Большое спасибо за любую помощь и советы.


  • Не могли бы вы добавить более подробную информацию о том, как вы запускаете свое веб-приложение? Используете ли вы облачные инструменты для Eclipse? Или старый (и недавно объявленный устаревшим) подключаемый модуль Google для Eclipse? 07.07.2017
  • Извините, я пропустил ваш дополнительный вопрос. Я установил Cloud Tools для Eclipse, хотя признаю, что процесс установки/настройки для получения инструментов движка приложения плюс GWT и Objectify был немного запутанным. Есть ли способ сказать? Возможно что-то не так. Когда я отлаживаю, я выбираю «Режим разработки GWT с опцией Jetty». 10.07.2017

Ответы:


1

Чтобы использовать API App Engine, вы должны запускать/отлаживать свои приложения локально, используя Сервер приложений для разработки. В Eclipse щелкните проект правой кнопкой мыши и выберите Запустить от имени > App Engine или Отладить как > App Engine. Дополнительные сведения см. в документации.

Чтобы включить GWT, вам нужно настроить GWT SDM Builder, щелкнув проект правой кнопкой мыши и выбрав Настроить > Включить GWT SDM Builder.

11.07.2017
  • Спасибо. Ваш совет продвинул меня намного дальше. Я использовал режим разработки Debug As GWT с Jetty. После многочисленных попыток я, наконец, смог загрузить отладку App Engine после включения GWT SDM Builder. Да! Существует так много вариантов отладки, включая Jetty, Legacy, App Engine или без них. Это может сбивать с толку, поскольку в большинстве онлайн-документаций подключаемый модуль описывается без учета новых облачных инструментов для Eclipse. Я так и не нашел ссылки на конструктор GWT SDM, так что спасибо за это! Я не понимаю, почему все эти отладочные конфиги создаются по умолчанию. Я думаю, я могу удалить старые стильные? 13.07.2017
  • Однако у меня все еще возникают проблемы с моим брандмауэром Norton в Windows. Я должен найти способ разрешить ему пропускать весь трафик на локальный сервер и сервер Google. Также вижу 2 сервера, перечисленных в окне запуска. Один на localhost:8080, а другой на 127.0.0.1:9876. Я сделаю еще несколько настроек и тестов конфигурации и продолжу здесь позже. Сейчас он работает наполовину, что намного лучше, чем раньше. 13.07.2017
  • У меня был отладчик, работающий в пятницу, и теперь в понедельник, когда ничего не изменилось, я не могу заставить сервер localhost ответить. Я нажимаю Debug->App Engine, затем, когда я открываю localhost:8080, я получаю ошибку HTTP 503 и служба недоступна. Затем, когда я пытаюсь запустить снова, я продолжаю получать сообщение об ошибке «порт уже используется». Поэтому я не могу понять, что является причиной этого. Я проверил все свойства проекта и конфигурации отладки и в настоящее время застрял. Переход с плагина Google Eclipse на Google Cloud Tools — непростая задача, а документация очень легкая. 17.07.2017
  • Я попал в аналогичную ситуацию. Перезапуск Eclipse исправил это — к сожалению, в моем случае, так как я пытался воспроизвести это :-( 18.07.2017
  • Кстати: если у вас есть какие-либо предложения по улучшению документации, пожалуйста, отправьте файл issue на GitHub. проект. Или дайте странице отзыв с 1 звездой: это побудит оставить отзыв. 18.07.2017
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...