У меня есть базовый 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, поэтому, возможно, что-то важное изменилось в сервлетах или настройке проекта. Большое спасибо за любую помощь и советы.