これだけは知っておきたい asadmin の使い方

この記事は GlassFish Advent Calendar 2014、4 日目の記事です。前日は「GlassFish Embedded Serverの注意点」と題して、Weld SE のコンフリクトを例に Embedded Server の意外な落とし穴についてお話ししました。

本日は asadmin の使い方についてお話しします。asadmin は GlassFish をお使いであればほとんどの方が経験しているコマンドですが、かなり奥が深いコマンドであることはあまり知られていません。asadmin の詳細については GlassFish のリファレンスマニュアル(英語・PDF)に記載がありますので、そちらを参照ください。

asadmin の位置づけ

asadmin は GlassFish の起動に使用するコマンドです。ただし、他の Java EE サーバー製品が単なる起動スクリプトであるのに対し、asadmin は CLI の管理ユーティリティーである点が異なります。

GlassFish の管理は、究極的には asadmin と REST backend の 2 通りしか用意されていません。おなじみの GUI 管理コンソールも、実際には REST backend にコマンドを発行する Web アプリケーションなのです。このあたりの詳細については下記のプレゼン資料を参照ください。

実際には、asadmin は GlassFish のすべてを操作することが可能ですが、REST backend はいくつか操作できないものがあります。例えば、以下の操作は REST backend 経由では操作できません。
  • ドメイン管理サーバー (DAS) の起動
  • 高度なアプリケーション・デプロイ(バージョニングなど)

asadmin の操作方法

(1) シングルモード

asadmin の基本となるモードです。
>asadmin サブコマンド名 [パラメーター]
パラメーターはサブコマンドによって異なります(サブコマンドによってはパラメーターがない場合もあります)。

(2) マルチモード

複数のサブコマンドを続けて入力することができるモードです。「asadmin」とだけ入力するとマルチモードになります。その後はプロンプト「asadmin>」に続いてサブコマンドを次々と入力してゆきます。すべてが終わったら「exit」コマンドでマルチモードを終了します。
>asadmin
Use "exit" to exit and "help" for online help.
asadmin> start-domain
Waiting for domain1 to start ....
Successfully started the domain : domain1
domain  Location: C:\glassfish4\glassfish\domains\domain1
Log File: C:\glassfish4\glassfish\domains\domain1\logs\server.log
Admin Port: 4848
Command start-domain executed successfully.
asadmin> list-domains
domain1 running
Command list-domains executed successfully.
asadmin> stop-domain
Waiting for the domain to stop .
Command stop-domain executed successfully.
asadmin> exit
Command multimode executed successfully.

マルチモードは、コマンドラインでの直接入力ではあまり効果を実感できないかもしれません。しかし、実行したいサブコマンドのリストをファイルとして作成しておくことで、サブコマンドのバッチ実行が可能になります。例えば、Unix/Linux の Bourne Shell 系のシェルでは、以下のような使い方をします。

# cat sub-commands.txt | asadmin

なお、サブコマンドのリストの最後には exit コマンドを忘れないようにしましょう。マルチモードを終了するには exit が必要だからです。

知っておきたい asadmin の使い方(1)ーDAS の起動

知っておきたい、というよりは知っておかなければならない使い方です。単一インスタンスの GlassFish は必ず DAS ですので、DAS の起動方法を知らなければ GlassFish を起動することができません。
>asadmin start-domain [起動するドメイン名]
GlassFish は 1 つのサーバーに複数のドメインを構築できるため、ドメインを識別するため起動するドメイン名を指定する必要があります。ただし、ドメインが 1 つしか存在しない場合は起動するドメイン名を省略することができます。
DAS の停止および再起動については、それぞれ stop-domain および restart-domain サブコマンドを使用しますが、これらは実は覚えておかなくても良いです。DAS の停止と再起動は管理コンソール上からでも実行可能だからです。

知っておきたい asadmin の使い方(2)ーリモート起動の設定

初期設定では、asadmin は localhost の GlassFish しか操作できないようになっています。開発環境ではこのままで構いませんが、実行環境では必要に応じてリモート管理ができるようになっていると便利です。
GlassFish のリモート管理を行うには 2 段階の操作が必要です。これらの操作は管理コンソールからでも実行可能ですが、実行環境が必ずしも GUI をサポートしているとは限らないため、asadmin で設定しておくのが無難でしょう。

Step 1. 管理パスワードを設定する

GlassFish の初期インストール時には、管理パスワードは設定されていません。管理コンソールによるリモート管理を有効にするためにはまず管理パスワードを設定する必要があります。管理パスワードの設定には DAS を起動させる必要はありません。以下に例を示します。
>asadmin change-admin-password
Enter admin user name [default: admin]> 管理ユーザー名(省略可)
Enter the admin password> パスワード未設定のため必ず省略
Enter the new admin password> 設定するパスワード
Enter the new admin password again> 設定するパスワード(確認)
Command change-admin-password executed successfully.

Step 2. セキュア管理を設定する

GlassFish 3.1.2 以降では、セキュア管理を有効にしないと管理コンソールによるリモート管理ができないようになりました。セキュア管理とは管理コンソールへの通信に http ではなく https を利用するものです。管理パスワードの設定と異なり、セキュア管理を有効にするには DAS を起動させなければなりません。以下に例を示します。
>asadmin enable-secure-admin
Enter admin user name>  admin
Enter admin password for user "admin"> admin のパスワード
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.

知っておきたい asadmin の使い方(3)ーリモートの GlassFish をローカルの asadmin で管理する

asadmin には、リモートの GlassFish に対して操作を行うことが出来ます。前提条件として、管理対象の GlassFish に対してリモート管理を有効にしておく必要があります。リモートの GlassFish に対する操作は、asadmin の --host オプションでホスト名を指定した上でサブコマンドを発行します。認証を要求された場合(初回実行時は必ず訊かれるはず)には管理ユーザー名とパスワードを入力します。

>asadmin --host remote-host サブコマンド [パラメーター]

なお、--host オプションには短縮名 -H が定義されています。文献では -H を使用している場合が多いので、両方とも覚えておくと良いでしょう。

まとめ

GlassFish はほとんどの操作を GUI の管理コンソールで行えるように設計されていますが、導入時においては asadmin を直接操作する必要があります。今回は導入後の管理を管理コンソール中心に行うことを前提として、その準備を行うために必要な asadmin の使い方を簡単にまとめてみました。明日は GlassFish に同梱されている各種スクリプトのまとめを予定しています。