WebLogic Serverでは、Windowsサービスとして設定したサーバー・インスタンスごとに、Windowsレジストリ内(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
)にキーが作成されます。このレジストリ・エントリには、サーバー名をはじめとする起動引数の情報が含まれています。
Windowsホストを起動するとき、Microsoft管理コンソールはWindowsレジストリ・キーの情報を使用してweblogic.Server
メイン・クラスを呼び出します。MMCは、ノード・マネージャを使用して管理対象サーバーを起動するように構成できないので、Windowsサービスとして実行しているサーバーでは、ノード・マネージャのモニター機能と自動再起動機能は使用できません。
ここでは、Windowsサービスとして実行するWebLogic Serverインスタンスを設定および管理する手順について説明します。
Windowsサービスにより、ユーザー・インタフェースなしでバックグラウンドで長期間動作する実行可能アプリケーションを作成できます。Windowsサービスは、Windowsレジストリ・キー内の情報を使用してweblogic.Serverメイン・クラスを呼び出すサーバー固有のスクリプトを実行することで設定できます。サーバー固有のスクリプトを実行する前に、管理サーバーおよび管理対象サーバーに必要な接続とJavaクラスを必ず構成または有効にする必要があります。
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=ManagedServer set ADMIN_URL=http://10.xxx.xx.xx:7001 set WL_HOME=C:\Oracle\Middleware\Oracle_Home\wlserver 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
変数を削除します。
例をコピー・アンド・ペーストするとき、末尾のスペースがないことを確認してください。
WLS_USER
およびWLS_PW
はオプションで、起動IDファイルが使用されていない場合にのみスクリプトに追加できます。「サーバー固有のスクリプトの作成」を参照してください。
同じコンピュータで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 Administration Console オンラインヘルプ 』の正常な停止の制御に関する項を参照してください。
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操作を取得したり呼び出したりできます。
『Oracle WebLogic Server JMXによるカスタム管理ユーティリティの開発』およびJavadoc
を参照してください。
例3-2 サーバー・インスタンスを停止するJavaクラス
package com.myClasses;
import java.net.*;
import java.io.*;
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 stop() {
try {
String servername = "AdminServer";
String hostname = "localhost";
int port = 7001;
String username = "weblogic";
String password = "password";
//Select t3 or iiop as required
//String protocol = "t3";
String protocol = "iiop";
String jndiroot = "/jndi/";
String mserver = "weblogic.management.mbeanservers.domainruntime";
// To avoid AssertionError
URL[] urls = { new File("/").toURL() };
Thread.currentThread().setContextClassLoader(new
URLClassLoader(urls));
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") || state.equals("ADMIN")) {
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 in RUNNING or ADMIN state. 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);
}
}
}
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サービスをインストールする場合は、管理者レベルの権限を持つオペレーティング・システム・ユーザー・アカウントでサービスを実行するのは避けるようにしてください。「サービスの実行に使用するユーザー・アカウントの検証」を参照してください。
サーバー固有のスクリプトを実行するには:
wlsvcx64 -debug
コマンドを実行して、Windowsサービスが適切に構成されていることを確認します。
WebLogic ServerをWindowsサービスとして正常に設定できたかどうかを検証するには、次の手順に従います。
本番環境でWebLogic Server Windowsサービスを実行する場合は、アクセス権限が制限された特別なオペレーティング・システム・ユーザー・アカウントで実行する必要があります。たとえば、そのOSユーザーは、Oracleファイルおよびあなたのドメイン・ファイルのみに対するアクセス権限を持つ必要があります。これは、これらのファイルへのアクセス権限を持つ唯一のユーザー・アカウントであることが必要です。
WebLogic Serverインスタンスが特別なOSユーザー・アカウントで実行されていることを確認するには:
Microsoft管理コンソールの「サービス」を開きます。
たとえば、Windows XPデスクトップの場合は次のようにします。
「スタート」メニューをクリックします。
「スタート」メニューで、「すべてのプログラム」>「管理ツール」>「サービス」と選択します。
「サービス」画面で、「WebLogic Server Windows」サービスを右クリックし、「プロパティ」をクリックします。
「プロパティ」ウィンドウで、「ログオン」タブを選択します。
「ログオン」でこのアカウントを選択します。特別なOSユーザー・アカウントのユーザー名とパスワードを入力します。
「OK」をクリックします。
ノート:
ネットワーク・ドライブにアクセスする場合は、そのネットワーク・ドライブを共有するユーザー名でWindowsサービスを実行する必要があります。
Microsoft 管理コンソールの「サービス」ウィンドウを使用して、サーバー・インスタンスを停止し、再起動します。
デフォルトでは、Microsoft管理コンソールを使用してサーバー・インスタンスを停止すると、サーバーのJava仮想マシン(JVM)を強制停止します。JVMを強制停止すると、サーバーはただちにすべての処理を終了します。セッション・データはすべて失われます。サーバーがconfig.xml
ファイルへの書込みを行っている間に管理サーバーのJVMを強制停止すると、config.xml
ファイルが破損するおそれがあります。「正常停止の有効化」を参照してください。
WindowsサービスとしてインストールされているWebLogic Serverインスタンスを停止または再起動するには:
wlsvc
から始まります。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 set MW_HOME=D:\Oracle\Middleware\Oracle_Home call "D:\Oracle\Middleware\Oracle_Home\wlserver\server\bin\uninstallSvc.cmd" ENDLOCAL
WebLogic Serverインスタンスを異なるユーザー資格証明のもとで動作させるには、様々な起動資格証明をサポートするようにWindowsサービス構成を変更できます。
以下のいずれか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
ファイルを実行しているコマンド・プロンプトです。
(オプション)スクリプト・ファイルからユーザー名とパスワードを削除します。