1. 概要

このチュートリアルでは、Apache Meecrowaveフレームワークの基本的な機能について説明します。

Meecrowaveは、Apache の軽量マイクロサービスフレームワークであり、CDI、JAX-RS、およびJSONAPIで非常にうまく機能します。 セットアップと展開は非常に簡単です。 また、Tomcat、Glassfish、Wildflyなどの重いアプリケーションサーバーを展開する手間が省けます。

2. Mavenの依存関係

Meecrowaveを使用するには、 pom.xml:で依存関係を定義しましょう。

<dependency>
    <groupId>org.apache.meecrowave</groupId>
    <artifactId>meecrowave-core</artifactId>
    <version>1.2.1</version>
</dependency>

MavenCentralで最新バージョンを確認してください。

3. シンプルサーバーの起動

Meecrowaveサーバーを起動するには、 main メソッドを記述し、 Meecrowaveインスタンスを作成して、main bake()メソッドを呼び出すだけです。

public static void main(String[] args) {
    try (Meecrowave meecrowave = new Meecrowave()) {
        meecrowave.bake().await();
    }
}

アプリケーションを配布パッケージとしてパッケージ化する場合、このメインメソッドは必要ありません。 これについては、後のセクションで説明します。 メインクラスは、IDEからアプリケーションをテストするときに役立ちます。

利点として、IDEでの開発中に、メインクラスを使用してアプリケーションを実行すると、コードの変更が自動的に再ロードされるため、サーバーを何度も再起動してテストする手間が省けます。

Java 9を使用している場合は、VMにjava x .xml.bindモジュールを追加することを忘れないでください。

--add-module javax.xml.bind

この方法でサーバーを作成すると、デフォルト構成でサーバーが起動します。 Meecrowave.Builder class を使用して、プログラムでデフォルト構成を更新できます。

Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.baeldung.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);

そして、サーバーをベイク処理するときに、このビルダーインスタンスを使用します。

try (Meecrowave meecrowave = new Meecrowave(builder)) { 
    meecrowave.bake().await();
}

より多くの構成可能なプロパティここがあります。

4. RESTエンドポイント

サーバーの準備ができたら、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. テスト

Meecrowaveで記述されたRESTAPIのユニットテストケースの記述は、注釈付きのJUnitテストケースの記述と同じくらい簡単です。

最初にpom.xmlにテストの依存関係を追加しましょう。

<dependency>
    <groupId>org.apache.meecrowave</groupId>
    <artifactId>meecrowave-junit</artifactId>
    <version>1.2.1</version>
    <scope>test</scope>
</dependency>

最新バージョンを確認するには、 MavenCentralを確認してください。

また、テスト用のHTTPクライアントとしてOkHttpを追加しましょう。

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>3.10.0</version>
</dependency>

最新バージョンこちらをご覧ください。

依存関係が整ったので、先に進んでテストを作成しましょう。

@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsIntegrationTest {
    
    @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 クラスの注釈を付け、構成を挿入して、Meecrowaveがテストサーバーに使用するランダムポートにアクセスできるようにします。

6. 依存性注入

依存関係をクラスに挿入するには、特定のスコープ内でそれらのクラスに注釈を付ける必要があります。

ArticleServiceクラスの例を見てみましょう。

@ApplicationScoped
public class ArticleService {
    public Article createArticle(Article article) {
        return article;
    }
}

次に、 javax.inject.Inject アノテーションを使用して、これをArticleEndpointsインスタンスに注入しましょう。

@Inject
ArticleService articleService;

7. アプリケーションのパッケージ化

Meecrowave Mavenプラグインを使用すると、配布パッケージの作成が非常に簡単になります。

<build>
    ...
    <plugins>
        <plugin>
            <groupId>org.apache.meecrowave</groupId>
            <artifactId>meecrowave-maven-plugin</artifactId>
            <version>1.2.1</version>
        </plugin>
    </plugins>
</build>

プラグインを配置したら、 Mavenゴールmeecrowave: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. 結論

この記事では、ApacheMeecrowaveを使用してマイクロサービスを作成する方法について学びました。 また、アプリケーションに関するいくつかの基本的な構成を調べ、配布パッケージを準備しました。

いつものように、コードスニペットは GithubProjectにあります。