Windowsでは、Microsoft 管理コンソール(MMC)、特に「サービス」で、Windowsサービスを開始、停止、および構成します。
WebLogic Serverでは、Windowsサービスとして設定したサーバー・インスタンスごとに、Windowsレジストリ内(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services)にキーが作成されます。このレジストリ・エントリには、サーバー名をはじめとする起動引数の情報が含まれています。
Windowsホストを起動するとき、Microsoft管理コンソールはWindowsレジストリ・キーの情報を使用してweblogic.Serverメイン・クラスを呼び出します。MMCは、ノード・マネージャを使用して管理対象サーバーを起動するように構成できないので、Windowsサービスとして実行しているサーバーでは、ノード・マネージャのモニター機能と自動再起動機能は使用できません。
ここでは、Windowsサービスとして実行するWebLogic Serverインスタンスを設定および管理する手順について説明します。
Windowsサービスを設定するには:
ここで作成するスクリプトでは、サーバー固有の情報(サーバー・インスタンス名など)を特定するための変数に値を設定する必要があります。また、このスクリプトからマスター・スクリプトWL_HOME\server\bin\installSvc.cmd (WL_HOMEはWebLogic Serverのインストール・ディレクトリ)を呼び出す必要もあります。マスター・スクリプトからは、Windowsレジストリにキーを追加するwlsvcユーティリティが呼び出されます。
注意:
Windowsサービスのインストール時、wlsvcユーティリティの-svcdescription:<user_specified_service_description>オプションを使用してサービスの説明を指定できます。サービスの説明は、環境変数SERVICE_DESCRIPTIONを設定してからinstallSvc.cmdスクリプトを実行することでも指定できます。
wlsvcの詳細は、コマンド・プロンプトにWL_HOME\server\bin\wlsvc -helpと入力します。WL_HOMEは、WebLogic Serverのインストール・ディレクトリです。
サーバー固有のスクリプトのサンプルについては、例3-1を参照してください。
サーバー固有のスクリプトを作成するには:
管理対象サーバーをWindowsサービスとしてインストールする場合は、ドメインの管理サーバーの場所を示す変数を含める必要があります。管理対象サーバーの構成データは、管理対象サーバーから管理サーバーにアクセスして取得する必要があります。
また、先に管理サーバー(サービスではなく実際のサーバー)を起動し、その後で管理対象サーバーをWindowsサービスとして開始する必要があります。
管理サーバーへの接続を構成するには:
例3-1 管理対象サーバーをWindowsサービスとして設定するスクリプトのサンプル
echo off SETLOCAL set MW_HOME=C:\Oracle\Middleware\Oracle_Home set DOMAIN_NAME=base_domain set USERDOMAIN_HOME=C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain set SERVER_NAME=AdminServer set PRODUCTION_MODE=true set MEM_ARGS=-Xms128m -Xmx512m call "C:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin\setDomainEnv.cmd" call "C:\Oracle\Middleware\Oracle_Home\wlserver\server\bin\installSvc.cmd" ENDLOCAL
注意:
このスクリプトのサンプルを使用して管理サーバーをWindowsサービスとして設定するには、ADMIN_URL変数を削除します。
例をコピー・アンド・ペーストするとき、末尾のスペースがないことを確認してください。
同じコンピュータでWindowsサービスとして実行する管理サーバーと管理対象サーバーの両方を設定したら、管理サーバーの後にのみ起動する管理対象サーバーを指定できます。
管理対象サーバーが、必ず管理サーバーWindowsサービスの後に起動されるようにするには:
WL_HOME\server\bin\installSvc.cmdマスター・スクリプトのバックアップ・コピーを作成します。
管理サーバーがすでにWindowsサービスとしてインストールされている場合は、そのサービスを削除します。詳細は、「Windowsサービスとして設定されているサーバーの削除」を参照してください。
管理サーバーをWindowsサービスとしてインストール(または再インストール)する前に、以下を行います。
テキスト・エディタで、WL_HOME\server\bin\installSvc.cmdマスター・スクリプトをオープンします。
スクリプト内の最後のコマンドは、wlsvc (Windowsレジストリを変更するWebLogic Serverユーティリティ)を呼び出すコマンドです。
installSvc.cmd内で、wlsvcユーティリティを呼び出すコマンドに次の引数を追加します。
-delay:delay_milliseconds
Microsoft管理コンソールが、サービス・ステータスをSERVER_START_PENDINGからSTARTEDへ変更するまで待機するミリ秒数を指定します。
たとえば、管理サーバーがその起動サイクルを完了してリクエストをリスニングできる状態になるまでに2分かかる場合は、-delay=120000と指定します。この場合、Windowsホスト・コンピュータを起動すると、Microsoft管理コンソールによってSERVER_START_PENDINGステータスが2分間報告されます。その後、ステータスがSTARTEDに変更されます。
この管理サーバーの変更後のwlsvc呼出しは次のようになります。
"%WL_HOME%\server\bin\wlsvc" -install
-svcname:"%DOMAIN_NAME%_%SERVER_NAME%"
-delay:120000
-javahome:"%JAVA_HOME%" -execdir:"%USERDOMAIN_HOME%"
-extrapath:"%WL_HOME%\server\bin" -password:"%WLS_PW%"
-cmdline:%CMDLINE%
wlsvcの詳細は、コマンド・プロンプトにWL_HOME\server\bin\wlsvc -helpと入力します。WL_HOMEは、WebLogic Serverのインストール・ディレクトリです。
管理サーバーWindowsサービスをインストールします。
管理対象サーバーをWindowsサービスとしてインストールする前に、次の手順に従います。
テキスト・エディタで、WL_HOME\server\bin\installSvc.cmdマスター・スクリプトをオープンします。
installSvc.cmd内で、wlsvcユーティリティを呼び出すコマンドに次の引数を追加します。
-depend:Administration-Server-service-name
Administration-Server-service-nameは、管理サーバーWindowsサービスの名前です。サービス名を確認するには、「サービス」にあるMicrosoft管理コンソールを参照します。
このオプションを指定した場合、Microsoft管理コンソールは、管理サーバーWindowsサービスによるSTARTEDステータスの報告を待機してから、管理対象サーバーWindowsサービスを開始します。
この管理対象サーバーの変更後のwlsvc呼出しは次のようになります。
"%WL_HOME%\server\bin\wlsvc" -install
-svcname:"%DOMAIN_NAME%_%SERVER_NAME%"
-depend:"wlsvc myDomain_myAdminServer"
-javahome:"%JAVA_HOME%" -execdir:"%USERDOMAIN_HOME%"
-extrapath:"%WL_HOME%\server\bin" -password:"%WLS_PW%"
-cmdline:%CMDLINE%
また、Microsoft管理コンソールがサービスのSTARTEDステータスをいつ報告するかを構成したい場合は、管理対象サーバーWindowsサービスに-delay:delay_millisecondsオプションを追加できます。
デフォルトでは、Microsoft管理コンソールを使用してサーバー・インスタンスを停止すると、サーバーのJava仮想マシン(JVM)を強制停止します。JVMを強制停止すると、サーバーはただちにすべての処理を終了します。セッション・データはすべて失われます。サーバーがconfig.xmlファイルへの書込みを行っている間に管理サーバーのJVMを強制停止すると、config.xmlファイルが破損するおそれがあります。
Microsoft管理コンソールから正常停止を可能にするには、次の手順を実行します:
weblogic.management.runtime.ServerRuntime.shutdown()メソッドを呼び出すJavaクラスを作成します。
このメソッドは、処理中のすべての作業を完了してからサーバーを正常に停止します。このようなクラスの例については、「サーバー・インスタンスを停止するJavaクラス」を参照してください。
WL_HOME\server\bin\installSvc.cmdマスター・スクリプトのバックアップ・コピーを作成します。
テキスト・エディタで、WL_HOME\server\bin\installSvc.cmdマスター・スクリプトを開いて以下を行います。
前の手順で作成したクラスを、set CLASSPATH文に追加します。
たとえば、クラスをc:\myJarというファイルにアーカイブした場合、変更後の文は次のようになります。
set
CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp
.jar;%WL_HOME%\server\lib\weblogic.jar;c:\myJar;%CLASSPATH%
スクリプトの最後の行に次の引数を追加します。この行はwlsvcユーティリティを呼び出します。
-stopclass:javaclass
javaclassは、作成したクラスの完全なクラスパス名です。この引数を指定することにより、javaclassがロードされてから、そのpublic void static stop()メソッドが呼び出されます。
たとえば、例3-2のクラスをcom.myClassesにパッケージ化した場合、変更後のwlsvcコマンドは次のようになります。
"%WL_HOME%\server\bin\wlsvc" -install -svcname:"%DOMAIN_NAME%_%SERVER_NAME%" –stopclass:com.myClasses.ServerStopper -javahome:"%JAVA_HOME%" -execdir:"%USERDOMAIN_HOME%" -extrapath:"%WL_HOME%\server\bin" -password:"%WLS_PW%" -cmdline:%CMDLINE%
wlsvcの詳細は、コマンド・プロンプトにWL_HOME\server\bin\wlsvc -helpと入力します。WL_HOMEは、WebLogic Serverのインストール・ディレクトリです。
WebLogicサーバーの管理コンソールで、サーバーの「制御」ページで管理対象サーバーの正常停止動作を構成します。
正常な停止操作において、すべてのHTTPセッションをただちに中止するかどうかを設定したり、停止を強制するまでの待機時間を構成したりできます。詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプの正常な停止の制御に関する項を参照してください。
Windowsサービスによって指定されているデフォルトのタイムアウト値を変更すべきかどうかを検討してください。
デフォルトでは、Microsoft管理コンソールを使用してWindowsサービスを停止する場合、サービスが停止するまで30秒待機してからサービスを強制停止し、システム・イベント・ログにタイムアウト・メッセージを印刷します。
-stopclassを使用してサーバーを正常停止する場合、30秒というタイムアウト値は、サーバーがすべての処理を正常に終了するには短すぎる可能性があります。
タイムアウト期間を構成するには、ServicesPipeTimeoutというREG_DWORDレジストリ値を、次のレジストリ・キーの下に作成します。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
キー値はミリ秒で指定する必要があります。
この値は、Windowsオペレーティング・システムの起動時にレジストリから読み取られ、インストールされているすべてのサービスに影響します。
変更後のWebLogic Serverマスター・スクリプトを保存します。
以下のJavaクラスでは、JMX (Java Management Extensions)を使用してサーバー・インスタンスを停止します。各サーバーの管理属性と操作は、JMX管理対象Bean (MBean)を使用して公開されます。このようなMBeanの1つであるServerRuntimeは、サーバーを正常に停止するためのshutdown()メソッドを公開します。
例3-2に示すクラスでは、管理MBeanHomeインタフェースを使用しています。このインタフェースを使用すると、ドメイン内のすべてのサーバー・インスタンスのServerRuntime MBean操作を取得したり呼び出したりできます。
JMXプログラミングの詳細は、『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』を参照してください。ServerRuntime MBeanの詳細は、WebLogic Server Javadocを参照してください。
例3-2 サーバー・インスタンスを停止するJavaクラス
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;
public class ServerStopper {
public static void main(String[] args) {
try {
if (args.length != 5) {
System.out.println("Usage: java " + ServerStopper.class.getSimpleName() + " server-name-to-stop hostname port username password");
return;
}
String servername = args[0];
String hostname = args[1];
int port = Integer.valueOf(args[2]);
String username = args[3];
String password = args[4];
String protocol = "t3";
String jndiroot = "/jndi/";
String mserver = "weblogic.management.mbeanservers.domainruntime";
JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver);
Hashtable h = new Hashtable();
h.put(Context.SECURITY_PRINCIPAL, username);
h.put(Context.SECURITY_CREDENTIALS, password);
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote");
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, h);
MBeanServerConnection connection = connector.getMBeanServerConnection();
ObjectName service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
ObjectName[] serverRuntimes = (ObjectName[]) connection.getAttribute(service, "ServerRuntimes");
for (ObjectName serverRuntime : serverRuntimes) {
String name = (String) connection.getAttribute(serverRuntime, "Name");
if (name.equals(servername)) {
String state = (String) connection.getAttribute(serverRuntime, "State");
if (state.equals("RUNNING")) {
connection.invoke(serverRuntime, "shutdown", new Object[0], new String[0]);
System.out.println("Stopped the server: " + servername);
}
else
System.out.println("The server is not RUNNING. The current state is: " + state);
return;
}
}
System.out.println("The server, " + servername + " does not exist");
connector.close();
}
catch (Exception ex) {
Logger.getLogger(ServerStopper.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
注意:
2つ以上のサーバー・インスタンスが稼働中の場合は、サンプルJavaクラスはすべてのサーバー・インスタンスを停止します。
WebLogic ServerインスタンスをWindowsサービスとしてインストールする場合のデフォルトでは、サーバーやそのJVMから標準出力と標準エラーに出力されたメッセージは表示されません。
これらのメッセージを表示するには、標準出力および標準エラーからファイルにリダイレクトする必要があります。
サービスをインストールしてWindowsホストを再起動したら、以下のいずれかの方法で、標準出力または標準エラーに書き込まれたメッセージを表示できます。
指定したファイルのコピーを作成し、そのコピーを表示します。コピーを作成するのは、Windowsファイル・システムでは開かれているファイルに対して書込みを行うことができないためです。
メッセージがファイルに書き込まれるのと同時に表示します。その場合は、コマンド・プロンプトを開き、tailコマンドをサポートするDOSユーティリティを使用してtail -f stdout-filenameと入力します。
デフォルトでは、Windowsサービスが24時間間隔でpathname-yyyy_mm_dd-hh_mm_ssという名前のファイルにメッセージをアーカイブします。新しいメッセージは、サービスの設定時に指定したファイルに収集されます。
このアーカイブの時間間隔を変更したり、ローテーションの発生を時間間隔ではなくメッセージ・ファイルのサイズに基づいて設定したりできます。
Windowsサービスがメッセージ・ファイルをローテーションする際のデフォルト条件を変更するには:
WebLogic Serverインスタンスからのスレッド・ダンプは、以下のいずれかの方法で標準出力に出力できます。
WLST threadDumpコマンドを使用します。
コマンド・プロンプトを開き、次のコマンドを入力します。
WL_HOME\bin\wlsvc -dump -svcname:service-name
WL_HOMEはWebLogic Serverのインストール・ディレクトリ、service-nameはサーバー・インスタンスを実行しているWindowsサービスです。
例:
D:\Oracle\Middleware\wlserver_12.1\server\bin\wlsvc -dump -svcname:mydomain_myserver
クラスパスとは、JVMから呼び出すことのできるJavaクラスの場所を宣言するものです。WebLogic Serverマスター・スクリプトを使用してサーバー・インスタンスをWindowsサービスとしてインストールする場合、マスター・スクリプトにはサーバー・インスタンスを実行するのに必要なすべてのクラスを指定します。独自のJavaクラスを追加してWebLogic Serverを拡張したい場合は、それらをクラスパスに追加する必要があります。
クラスをクラスパスに追加するには:
WL_HOME\server\bin\installSvc.cmdマスター・スクリプトのバックアップ・コピーを作成します。
テキスト・エディタで、WL_HOME\server\bin\installSvc.cmdマスター・スクリプトをオープンします。
クラスをset CLASSPATH文に追加します。
たとえば、クラスをc:\myJarというファイルにアーカイブした場合、変更後の文は次のようになります。
set CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp. jar;%WL_HOME%\server\lib\weblogic.jar;c:\myJar;%CLASSPATH%
注意:
Win32システムでは、コマンド行の長さが2047文字に制限されています。Windowsサービスを起動するためのクラスパス設定が非常に長くなると、2047文字の制限を超える可能性があります。
この制限を回避するには、次のようにします。
set CLASSPATHコマンドの値を、別のテキスト・ファイルに記述します。
WL_HOME\server\bin\installSvc.cmdマスター・スクリプトを開き、set CMDLINEコマンドを探します。
set CMDLINEコマンド内で、-classpath \"%CLASSPATH%\"オプションを次のオプションで置き換えます。
-classpath @pathname\filename
pathname\filenameは、クラスパスの値が格納されているファイルのフルパスおよび名前です。
例:
set CMDLINE="%JAVA_VM% %MEM_ARGS% %JAVA_OPTIONS%
-classpath @c:\myClasspath.txt -Dweblogic.Name=%SERVER_NAME%
-Dbea.home=\"D:\bea_70sp2\" -Dweblogic.management.username=%WLS_USER%
-Dweblogic.management.server=\"%ADMIN_URL%\"
-Dweblogic.ProductionModeEnabled=%STARTMODE%
-Djava.security.policy=\"%WL_HOME%\server\lib\weblogic.policy\"
weblogic.Server"
変更後のWebLogic Serverマスター・スクリプトを保存します。
注意:
サーバー固有のスクリプトを実行するには、Windowsレジストリを変更する権限のあるユーザー・アカウントでWindowsコンピュータにログインする必要があります。
本番環境にWindowsサービスをインストールする場合は、管理者レベルの権限を持つオペレーティング・システム・ユーザー・アカウントでサービスを実行するのは避けるようにしてください。詳細は、「サービスの実行に使用するユーザー・アカウントの検証」を参照してください。
サーバー固有のスクリプトを実行するには:
WebLogic ServerをWindowsサービスとして正常に設定できたかどうかを検証するには、次の手順に従います。
本番環境でWebLogic Server Windowsサービスを実行する場合は、アクセス権限が制限された特別なオペレーティング・システム・ユーザー・アカウントで実行する必要があります。たとえば、そのOSユーザーは、Oracleファイルおよびあなたのドメイン・ファイルのみに対するアクセス権限を持つ必要があります。これは、これらのファイルへのアクセス権限を持つ唯一のユーザー・アカウントであることが必要です。
WebLogic Serverインスタンスが特別なOSユーザー・アカウントで実行されていることを確認するには:
Microsoft管理コンソールの「サービス」を開きます。
たとえば、Windows XPデスクトップの場合は次のようにします。
「スタート」メニューをクリックします。
「スタート」メニューで、「すべてのプログラム」>「管理ツール」>「サービス」と選択します。
「サービス」画面で、「WebLogic Server Windows」サービスを右クリックし、「プロパティ」をクリックします。
「プロパティ」ウィンドウで、「ログオン」タブを選択します。
「ログオン」でこのアカウントを選択します。特別なOSユーザー・アカウントのユーザー名とパスワードを入力します。
「OK」をクリックします。
注意:
ネットワーク・ドライブにアクセスする場合は、そのネットワーク・ドライブを共有するユーザー名でWindowsサービスを実行する必要があります。
サービス・インスタンスをWindowsサービスとして実行するように設定したあと、Microsoft管理コンソールの「サービス」ウィンドウを使用して、サーバーを停止・再起動できます。
デフォルトでは、Microsoft管理コンソールを使用してサーバー・インスタンスを停止すると、サーバーのJava仮想マシン(JVM)を強制停止します。JVMを強制停止すると、サーバーはただちにすべての処理を終了します。セッション・データはすべて失われます。サーバーがconfig.xmlファイルへの書込みを行っている間に管理サーバーのJVMを強制停止すると、config.xmlファイルが破損するおそれがあります。正常停止を有効にする方法は、「正常停止の有効化」を参照してください。
WindowsサービスとしてインストールされているWebLogic Serverインスタンスを停止または再起動するには:
wlsvcから始まります。WebLogic Serverインスタンスを実行するWindowsサービスを削除する場合は、wlsvcユーティリティを使用してWindowsレジストリから関連キーを削除するためのスクリプトを使用できます。Windowsサービスの削除は、ドメインの構成ファイルに保存されているサーバー・インスタンスの構成に影響しません。Windowsサービスを削除した後、起動スクリプトを使用して、また、管理対象サーバーの場合はノード・マネージャを使用して、WebLogic Serverインスタンスを起動できます。
スクリプトではまず、サーバー固有の情報(サーバー・インスタンスの名前など)を特定する変数の値を設定します。次に、マスター・アンインストール・スクリプトWL_HOME\server\bin\uninstallSvc.cmdを呼び出します(WL_HOMEはWebLogic Serverのインストール・ディレクトリ)。このマスター・スクリプトからは、Windowsレジストリからキーを削除するwlsvcユーティリティが呼び出されます。
サーバー固有のアンインストーラ・スクリプトのサンプルについては、例3-3を参照してください。
WebLogic Serverインスタンスを実行するWindowsサービスを削除するためのスクリプトを作成するには:
mydomain_myserver removed
デフォルトの標準出力は、batchファイルを実行しているコマンド・プロンプトです。
例3-3 Windowsサービスを削除するスクリプト
echo off SETLOCAL set DOMAIN_NAME=myWLSdomain set SERVER_NAME=myWLSserver call "D:\Oracle\Middleware\wlserver_12.1\server\bin\uninstallSvc.cmd" ENDLOCAL
Windowsサービスを変更して、別のユーザー資格証明でWebLogic Serverインスタンスを実行できるようにするには、次のいずれか1つを行います。
ユーザー名とパスワードを起動IDファイルから取得するようにWindowsサービスを設定した場合は、新しいユーザー名とパスワードを格納した起動IDファイルで既存のファイルを上書きできます。WebLogic Serverのデフォルト・セキュリティ・レルムに、既存ユーザーの名前を指定する必要があります。詳細は、「起動IDファイル」を参照してください。
ユーザー名とパスワードをWindowsレジストリから取得するようにWindowsサービスを設定した場合は、そのWindowsサービスを削除して、新しいWindowsサービスを新しいユーザー名とパスワードで作成する必要があります。
WebLogic Serverインスタンスを実行するWindowsサービスをアンインストールします。詳細は、「Windowsサービスとして設定されているサーバーの削除」を参照してください。
サービスのインストールに使用したスクリプトをテキスト・エディタで開き、新しいユーザー名とパスワードを、set WLS_USERおよびset WLS_PWコマンドの値として入力します。これらの値は、WebLogicサーバーによって暗号化されてWindowsレジストリに格納されます。
スクリプトへの変更内容を保存します。
サーバー固有のスクリプトの名前を入力します。
指定したスクリプトがbatchファイルとして実行されます。
スクリプトが正常に実行されると、次の名前のWindowsサービスが作成されます:
DOMAIN_NAME_SERVER_NAME。そして、標準出力に次のような行が出力されます:
mydomain_myserver installed
デフォルトの標準出力は、サーバー固有のbatchファイルを実行しているコマンド・プロンプトです。
(オプション)スクリプト・ファイルからユーザー名とパスワードを削除します。