1. Обзор
В этом уроке мы рассмотрим основные функциональные возможности платформы Apache Microwave .
Microwave-это легкий фреймворк микросервисов от Apache , который очень хорошо работает с CDI, JAX-RS и API JSON. Его очень просто настроить и развернуть. Это также устраняет хлопоты по развертыванию тяжелых серверов приложений, таких как Tomcat, Glassfish, Wildfly и т. Д.
2. Зависимость Maven
Чтобы использовать микроволновку, давайте определим зависимость в pom.xml:
org.apache.meecrowave meecrowave-core 1.2.1
Проверьте наличие последней версии на Maven Central .
3. Запуск простого сервера
Я приказываю запустить микроволновый сервер, все, что нам нужно сделать, это написать метод main , создать экземпляр Microwave и вызвать метод main bake () :
public static void main(String[] args) { try (Meecrowave meecrowave = new Meecrowave()) { meecrowave.bake().await(); } }
Нам не нужен этот основной метод, если мы упаковываем приложение в виде дистрибутивного пакета; мы рассмотрим это в последующих разделах. Основной класс полезен при тестировании приложения из среды IDE.
В качестве преимущества при разработке в среде IDE, как только мы запускаем приложение с использованием основного класса, оно автоматически перезагружается с изменениями кода, что избавляет нас от необходимости снова и снова перезапускать сервер для тестирования.
Обратите внимание, что если мы используем Java 9, не забудьте добавить модули javax .xml.bind в виртуальную машину:
--add-module javax.xml.bind
Создание сервера таким образом запустит его с конфигурацией по умолчанию. Мы можем программно обновить конфигурации по умолчанию с помощью Meecrowave.Строитель класс :
Meecrowave.Builder builder = new Meecrowave.Builder(); builder.setHttpPort(8080); builder.setScanningPackageIncludes("com.baeldung.meecrowave"); builder.setJaxrsMapping("/api/*"); builder.setJsonpPrettify(true);
И используйте этот экземпляр builder во время выпечки сервера:
try (Meecrowave meecrowave = new Meecrowave(builder)) { meecrowave.bake().await(); }
Есть более настраиваемые свойства здесь .
4. Конечные точки ОТДЫХА
Теперь, как только сервер будет готов, давайте создадим несколько конечных точек REST:
@RequestScoped @Path("article") public class ArticleEndpoints { @GET public Response getArticle() { return Response.ok().entity(new Article("name", "author")).build(); } @POST public Response createArticle(Article article) { return Response.status(Status.CREATED).entity(article).build(); } }
Обратите внимание, что мы в основном используем аннотации JAX-RS для создания конечных точек REST . Подробнее о JAX-RS читайте здесь .
В следующем разделе мы рассмотрим, как протестировать эти конечные точки.
5. Модульное тестирование
Написание модульных тестовых случаев с помощью API for REST, написанных с помощью Microwave, так же просто, как написание аннотированных тестовых случаев JUnit.
Давайте добавим тестовые зависимости в ваш pom.xml первый:
org.apache.meecrowave meecrowave-junit 1.2.1 test
Чтобы увидеть последнюю версию, проверьте Maven Central .
Кроме того, давайте добавим Ok Http в качестве HTTP-клиента для наших тестов:
com.squareup.okhttp3 okhttp 3.10.0
Ознакомьтесь с последней версией здесь .
Теперь с зависимостями на месте давайте продолжим и напишем тесты:
@RunWith(MonoMeecrowave.Runner.class) public class ArticleEndpointsTest { @ConfigurationInject private Meecrowave.Builder config; private static OkHttpClient client; @BeforeClass public static void setup() { client = new OkHttpClient(); } @Test public void whenRetunedArticle_thenCorrect() { String base = "http://localhost:" + config.getHttpPort(); Request request = new Request.Builder() .url(base + "/article") .build(); Response response = client.newCall(request).execute(); assertEquals(200, response.code()); } }
При написании тестовых случаев сделайте аннотацию тестового класса с помощью MonoMeecrowave.Runner class, также вводит конфигурацию, чтобы получить доступ к случайному порту, используемому Meecrowave для тестового сервера
6. Инъекция Зависимостей
Чтобы внедрить зависимости в класс , нам нужно аннотировать эти классы в определенной области.
Давайте возьмем пример Article Service class:
@ApplicationScoped public class ArticleService { public Article createArticle(Article article) { return article; } }
Теперь давайте введем это в наш экземпляр ArticleEndpoints с помощью javax.inject.Ввести аннотацию :
@Inject ArticleService articleService;
7. Упаковка приложения
Создание дистрибутивного пакета становится очень простым с помощью плагина Meecrowave Maven:
... org.apache.meecrowave meecrowave-maven-plugin 1.2.1
Как только у нас будет плагин, давайте используем цель Maven microwave:bundle для упаковки приложения .
После упаковки он создаст zip внутри целевого каталога:
meecrowave-meecrowave-distribution.zip
Этот zip содержит необходимые артефакты для развертывания приложения:
|____meecrowave-distribution | |____bin | | |____meecrowave.sh | |____logs | | |____you_can_safely_delete.txt | |____lib | |____conf | | |____log4j2.xml | | |____meecrowave.properties
Давайте перейдем в каталог bin и запустим приложение:
./meecrowave.sh start
Чтобы остановить приложение:
./meecrowave.sh stop
8. Заключение
В этой статье мы узнали об использовании Apache Microwave для создания микросервиса. Кроме того, мы изучили некоторые базовые настройки приложения и подготовили дистрибутивный пакет.
Как всегда, фрагменты кода можно найти в проекте Github .