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 .