JSR 365依存性注入(CDI 2.0)の実装であるApache OpenWebBeansが先頃、Meecrowaveマイクロサービスサーバのバージョン1.0をリリースした。Java EEのフルコンテナを必要とせずに、Java Persistence API(JPA)、Java Transaction API(JTA)、OAuth2のビルトインサポートを提供する。
MeecrowaveはTomcat(servlets)、OpenWebBeans(CDI)、Johnzon(JSON-PおよびJSON-B)、CFX(JAX-RS)など、既存のApacheプロジェクトの上に構築されている。
2017年に初めてリリースされたMeecrowaveは、マイクロサービスやスタンドアロンのアプリケーションで使用することができる。ブログの定義によれば、
Meecrowaveは、mavenプラグイン(開発容易性のため)経由であるいは組込みサーバとしてプログラム的に起動する他、自身のビジネスコードにバンドルしたり、あるいはランナとして、ポータブルなWARまたはJARアプリケーションを起動することも可能です。
Meecrowaveは以下のコンポーネントで構成されている。
Coreコンポーネントは、一連のコンフィギュレーションおよびコマンドラインインターフェース(CLI)オプションを定義する。Cli.Options
インターフェースを実装し、後述する@CliOption
アノテーションを使用することで、独自のCLIオプションを定義することも可能だ。
MavenおよびGradleコンポーネントは、CoreコンフィギュレーションとCLIオプションに対応するプロパティを提供し、デフォルト値の変更を可能にする。
はじめに
以下のJAX-RSサンプルは、Meecrowaveを使い始める方法を示したものだ。
Defaults
クラスは、サンプルアプリケーションのファーストネームとラストネームを定義する。app-default-name
というオプションと、それに対応する説明を使って、CLIを拡張している点に注目してほしい。
public class Defaults implements Cli.Options {
@CliOption(name="app-default-name", description="The default first and last names for the app.")
private String firstName="Michael";
private String lastName="Redlich";
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
DefaultsProducer
クラスがMeecrowaveのBuilder
クラスのインスタンスを注入して、Meecrowaveを起動する。getExtension()
メソッドは、Default
クラスから、@CliOption
アノテーションに定義されているnameとdescriptionをキャプチャする。
@Dependent
public class DefaultsProducer {
@Inject
private Meecrowave.Builder builder;
@Produces
@ApplicationScoped
public Defaults defaults() {
return builder.getExtension(Defaults.class);
}
}
SimpleApplication
クラスは、アプリケーションのメインパスとしてredlich
を定義する。
@Dependent
@ApplicationPath("redlich")
public class SimpleApplication extends Application {
}
SimpleEndpoint
クラスはエンドポイントmeecrowave
、URLクエリパラメータ、firstName
とlastName
、内部クラスHello
、ファーストネームとラストネームをモデル化するJava Beanを定義する。
@Path("meecrowave")
@ApplicationScoped
public class SimpleEndpoint {
@Inject
private Defaults defaults;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Hello sayFullName(@QueryParam("firstName") final String firstName,@QueryParam("lastName") final String lastName) {
return new Hello(ofNullable(firstName).orElse(defaults.getFirstName()),ofNullable(lastName).orElse(defaults.getLastName()));
}
public static class Hello {
private String firstName;
private String lastName;
public Hello() {
}
private Hello(final String firstName,final String lastName) {
setFirstName(firstName);
setLastName(lastName);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(final String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(final String lastName) {
this.lastName = lastName;
}
}
}
Compile and run with Maven:
mvn clean package meecrowave:run
サーバが起動したならば、メインアプリケーションパスとエンドポイントで構成される完全なURLをブラウザに入力すればよい。
http://localhost:8080/redlich/meecrowave
デフォルト値である”Michael”と”Redlich”が表示されている点に注目してほしい。firstName
とlastName
に定義されたデフォルト値を変更するには、URLクエリパラメータを使用する。次の例では、URL経由でファーストネームのみを変更している。
http://localhost:8080/redlich/meecrowave?firstName=Rowena
この次の例は、URL経由でファーストネームとラストネームの両方を変更する方法を示している。
http://localhost:8080/redlich/meecrowave?firstName=Barry&lastName=Burd
サンプルアプリケーション全体はGitHubにある。
Meecrowaveにはコンパニオンプロジェクトもある。
- Apache DeltaSpike (コンフィギュレーション、例外処理、高度なCDI)
- Apache Sirona (モニタリング)
新しいCDI 2.0仕様のサポートも順調に進んでおり、先日には同仕様で動作するように設計されたOpenWebBeans 2.0.0がリリースされている。
この記事を評価
- 編集者評
- 編集長アクション