Payara とは
Glassfish から fork した JavaEE アプリケーションサーバです。 Glassfish は Oracle による商用サポートの提供が廃止されましたが、Payara は Payara Team による商用サポートが提供されています。 Glassfish 4.1 のコードベースに対してバグフィックスや周辺ライブラリのアップデートの取り込み、新機能の取り込みなどが行われています。
Hazelcast を組み込むことで JCache API(JSR 107)の取り込みやデータグリッドの追加、マイクロサービス向けの Payara Micro の提供など、積極的な開発が続けられています。
Payara micro
Spring Boot や Wildfly Swarm のようなマイクロサービス向けの Payara パッケージです。 JavaEE の war ファイルを Payara micro 起動時のコマンドライン引数で渡したり、Payara micro と アプリケーション war ファイルをまとめて一つの実行可能JAR(Uber JAR)にしたりできます(Uber はドイツ語で over、普通のJARの上を行くJARといった感)。
以下のように起動したり、
$ java -jar payara-micro.jar --deploy /home/user/example.war
以下のように実行可能JARを作ったりできます。
$ java -jar payara-micro.jar --deploy test.war --outputUberJar test.jar $ java -jar test.jar
コマンドラインでの操作の他に Programmatically な操作もできるようになっています。
ここでは Payara micro で簡単に Hello World してみましょう。
JAX-RS リソース
最初に、なんでもいいですが JAX-RS リソース作成しておきます。
まずはアプリケーションクラス。
package code.app; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("/app") public class MyApplication extends Application { }
リソースクラス。
package code.app; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @Path("/") public class MyResource { @GET @Produces("text/plain") public String get() { return "Hello world"; } }
PayaraMicro
PayaraMicro のエントリポイントを作成します。
package code.payara; import fish.payara.micro.BootstrapException; import fish.payara.micro.PayaraMicro; public class EmbeddedPayara { public static void main(String[] args) throws BootstrapException { PayaraMicro.getInstance().addDeployment(args[0]).bootStrap(); } }
単純にインスタンス作成してコマンドライン引数で指定されたwarをデプロイしています。
build.gradle
Gradle のビルドファイルです。
apply plugin: 'war' [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' sourceCompatibility = targetCompatibility = '1.8' repositories { jcenter() } dependencies { providedCompile 'fish.payara.extras:payara-micro:4.1.153' } war { archiveName = 'payara' exclude('**/payara/**') } task run(type: JavaExec) { classpath = sourceSets.main.runtimeClasspath main = 'code.payara.EmbeddedPayara' args war.archivePath.path }
普通にwarを作るだけと、起動用に run タスクを定義しています。
EmbeddedPayara は war から除外しています。
実行
では実行してみましょう。
./gradlew war run
簡単ですね。