ApacheMeecrowaveを使用したマイクロサービスの構築
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にあります。