Работающий сервер Glassfish JAX-RS на GAE не работает - PullRequest
0 голосов
/ 04 июля 2018

Короче говоря, я написал сервер GlassFish в моем Intellij IDEA, однако я заметил, что мне потребуется сервер для его развертывания, поэтому я провел некоторое исследование и обнаружил, что Google App Engine (Google Cloud Platform) будет будь способ идти.

Я использовал плагин Google Cloud Tools для Intellij, чтобы добавить поддержку App Engine (Standard). Все прошло гладко, я выбрал военный файл для развертывания и Google Cloud Project для его развертывания, однако, когда я отправил запрос GET на URL (например, localhost:8080/cases/all), я получил сообщение об ошибке 404. Обычно это возвращает массив JSON, заполненный объектами JSON.

Я получил класс приложения следующим образом:

@ApplicationPath("/")
public class Server extends Application{

    /**
     * Returns all the classes in the server.
     * @return Set of all classes used in server.
     */
    @Override
    public final Set<Class<?>> getClasses() {
        HashSet h = new HashSet<Class<?>>();
        // Add classes to h
        return h;
    }
}

Мой web.xml и мой appengine-web.xml, расположенные в ./web/WEB-INF, выглядят соответственно:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

</web-app>

И

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <runtime>java8</runtime>
  <threadsafe>true</threadsafe>
</appengine-web-app>

Запуск сервера Glassfish локально работает без проблем. Как только я пытаюсь развернуть стандартный (локальный) сервер GAE, он не работает. Я больше не могу получить доступ к путям, каждый путь возвращает 404 и это сообщение в консоли Intellij (при попытке доступа (/ case / all):

jul 04, 2018 3:38:24 AM com.google.appengine.tools.development.jetty9.LocalResourceFileServlet doGet
WARNING: No file found for: /cases/all

Тип развертываемого мной артефакта Web Application: Exploded.

Есть идеи, что я могу делать не так?

1 Ответ

0 голосов
/ 04 июля 2018

Вы разрабатываете на GlassFish, который предоставляет полный API Java EE (включая JAX-RS), но развертываете к GAE, который (согласно сообщению журнала) использует Eclipse Jetty под прикрытием. Jetty не предоставляет все API-интерфейсы Java EE, поэтому нет ничего для обработки ваших аннотаций JAX-RS и предоставления указанных вами путей.

Если вам действительно необходимо выполнить развертывание в GAE, я бы порекомендовал вам найти реализацию JAX-RS, которая может быть связана с вашим приложением (должен делать Джерси, что является той же реализацией, которую использует GlassFish). Вы также должны проверить это локально, развернув на Jetty вместо GlassFish.

Если вы предпочитаете использовать GlassFish, то лучше использовать AWS Elastic Beanstalk, который должен поддерживать GlassFish 4.0 .

Третьим вариантом будет использование пользовательской опции GAE , которая позволяет вам использовать свой собственный Dockerfile. Payara Micro (облегченный сервер приложений, производный от GlassFish Web Edition) сможет запустить ваше приложение, и для него есть публичный Dockerfile , что означает, что вы можете создать свой собственный Dockerfile следующим образом:

FROM payara/micro
COPY myApp.war $DEPLOY_DIR

Payara Micro обнаружит ваш файл WAR и автоматически развернет его. По умолчанию путь к вашему приложению будет включать имя файла WAR (например, http://localhost:8080/myApp/cases/all), поэтому, если вы хотите, чтобы он развертывался без имени файла в пути, переименуйте файл в ROOT.war.

Надеюсь, это поможет.

...