BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Apache OpenWebBeansがJava EEベースのマイクロサービスのためにMeecrowave Serverバージョン 1.0をリリース

Apache OpenWebBeansがJava EEベースのマイクロサービスのためにMeecrowave Serverバージョン 1.0をリリース

原文(投稿日:2017/08/30)へのリンク

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クエリパラメータ、firstNamelastName、内部クラス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”が表示されている点に注目してほしい。firstNamelastNameに定義されたデフォルト値を変更するには、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がリリースされている。

この記事を評価

採用ステージ
スタイル

この記事に星をつける

おすすめ度
スタイル

BT