Eclipse GlassFish 7.0.18 は glassfish-embedded から直接アプリケーションを起動できます


はじめに

2024年10月2日リリースの Eclipse GlassFish 7.0.18 では、glassfish-embedded が実行可能JARになり、直接Webアプリケーションを起動できるようになりました。

以下のようにWARを引数に起動すれば、Webアプリケーションが動きます。

java -jar glassfish-embedded-all.jar app.war

サーバーは exit quit、または Ctrl + C で終了します。

デフォルトでは8080ポートで起動し、HTTPSリスナーは無効になっています。ポートを指定する場合は以下のように指定します。

java -jar glassfish-embedded-all.jar --httpPort=8090 app.war

その他、プロパティファイルやコンフィグファイルで設定を渡したり、asadmin コマンドを直接渡すこともできます。

現行バージョンは glassfish-embedded-all-7.0.18.jar からダウンロードできます。対象のアプリケーションは javax.* から jakarta.* に変更済みのものが必要です(tomcat-jakartaee-migrationなどの変換ツールも利用できます)。

java -jar glassfish-embedded-all-7.0.18.jar sample.war


glassfish-embedded の設定

カレントディレクトリに以下を準備することで、その内容が自動的に読み取られます。

  • glassfish.properties ファイル:プロパティファイル
  • domain.xml ファイル:ドメイン設定ファイル
  • autodeploy ディレクトリ:起動時にディレクトリ内のファイルやディレクトリをアプリケーションとしてデプロイ
  • glassfish-domain ディレクトリ:ディレクトリがドメインディレクトリとして使用される

これらをカレントディレクトリ以外に置く場合はコマンドラインオプションで明示的に指定します。

コマンドラインオプションは以下になります。

java -jar glassfish-embedded-all.jar
    [--properties=FILE] 
    [-p=PORT, --httpPort=PORT, --port=PORT] [--httpsPort=PORT_NUMBER] 
    [--domainConfigFile=FILE] 
    [--domainDir=DIRECTORY, --instanceRoot=DIRECTORY] 
    [--noListener, --noPort]
    [--autoDeployDir=DIRECTORY]
    [--logLevel=LEVEL] 
    [--logProperties=FILE]
    [--noInfo]
    [--help] 
    [applications or admin commands...]


glassfish.properties ファイル

glassfish.properties ファイルは以下のようなプロパティファイルです。

port=8090
deploy.app=myapp.war

このファイルでは以下の設定を指定できます(--properties=FILE オプションを繰り返すことで、複数のプロパティファイルを指定できます)。

  • オプション名をキーとするコマンドラインオプション
  • deploy. 接頭辞で始まり、その後に任意のテキストが続くキーで、起動時にデプロイするアプリケーションの指定となる
  • command. 接頭辞で始まり、その後に任意のテキストが続くキーでは、起動時に実行するコマンドとして扱われる
  • GlassFish Embedded がサポートするすべてのプロパティ

コマンドラインオプションは、ハイフンを除いた形で指定出来ます。 例えば --port=8090 は、glassfish.propertiesport=8090 として指定します。

アプリケーションのデプロイには、コンテキストルートを app とし myapp.war ファイルをデプロイするには deploy.app=myapp.war として指定します。

最大スレッドプールサイズを変更する場合、asadmin コマンドで set server.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=4 のように指定します。これをプロパティファイルで指定する場合は command.任意キー=set server.略.max-thread-pool-size=4 として指定します。

properties プロパティを指定することで、別ファイルを指してプロパティをロードすることもできます。

基本的には glassfish.properties ファイルを使って設定するのが良いでしょう。


glassfish-embedded のオプション詳細

オプション 説明
--properties=FILE 指定されたプロパティファイルを使用する
-p=PORT,--httpPort=PORT,--port=PORT HTTPリスナーを指定されたポートにバインドする。設定されていない場合、HTTPリスナーは、--noListener引数によって無効化されない限り、デフォルトでポート8080にバインドされる
--httpsPort=PORT_NUMBER HTTPSリスナーを指定されたポートにバインドする。設定しない場合、HTTPSリスナーはデフォルトで無効
--domainConfigFile=FILE GlassFishを実行するドメイン設定ファイル(domain.xml)の場所を設定する
--domainDir=DIRECTORY,--instanceRoot=DIRECTORY GlassFishを実行するインスタンスルート(ドメインディレクトリ)を設定する
--noListener --noPort リスナー、ポートを無効にする。デフォルトで有効になっており、ポート8080にバインドされている
--autoDeployDir=DIRECTORY このディレクトリにあるファイルやディレクトリは、コマンドラインで指定されたかのように、アプリケーションとして(ランダムな順番で)デプロイされる
--logLevel=LEVEL すべてのロガーのログレベルを指定値に設定する
--logProperties=FILE ファイルFILEからロギング・プロパティを設定する
--noInfo 情報メッセージを表示しない
--help ヘルプ情報を表示する
applications or admin commands... アプリケーションまたは管理コマンドを指定する

ハイフンで始まらない引数は、以下のように扱われます

  • ファイルまたはディレクトリの場合は、アプリケーションとして起動時にデプロイされます。起動時にデプロイされる唯一のアプリケーションであれば、ルートコンテキスト「/」の下にデプロイされ、そうでない場合は、ファイル名またはデプロイメント記述子から派生したルートコンテキストの下にデプロイされる

  • それ以外の場合、引数は GlassFish 管理コマンド(asadminコマンド)として実行されます。個々のコマンドにスペースが含まれる場合は、引用符で囲む必要がある


コマンド例

アプリケーションをデフォルト設定で起動

java -jar glassfish-embedded-all.jar app.war

ポート指定でアプリケーションを起動

java -jar glassfish-embedded-all.jar --httpPort=8090 app.war

起動時にカスタムデプロイコマンドを実行

java -jar glassfish-embedded-all.jar "deploy --contextroot=/app app.war"

コマンドラインから2つのアプリケーションを実行。

java -jar glassfish-embedded-all.jar app1.war app2.war