WebLogic Win32で自動起動

Windows版なので親切なのかと思いきや、意外と大変だった。
【基本的な考え方】
Windowsではサービスとして登録する必要がある。
スタートアップ登録は「ログイン必須」になるので不可。
たいていのサーバアプリは、勝手にサービス登録してくれるけど、Weblogicにはそんなものはないみたい。
サービス登録のコマンドは用意してある。
ただ、その使い方は Ver.9.2 のマニュアルにはなぜかのっていない。
10.xのマニュアルはここ。
http://edocs.beasys.co.jp/e-docs/wls/docs100/serve...

【対応するバージョン】
一応、Weblogic Server 9.2。
おそらく、8.x、10.x でもできる。

【インストールとアンインストール】
インストールとアンインストールを行うコマンドファイルを用意する。
  • インストール用
SETLOCAL
set DOMAIN_NAME=asp_domain
set USERDOMAIN_HOME=C:\bea\user_projects\domains\asp_domain
set SERVER_NAME=AdminServer
set WLS_USER=weblogic
set WLS_PW=weblogic
set PRODUCTION_MODE=true
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms256m -Xmx512m
call c:\bea\weblogic92\server\bin\installSvc.cmd
ENDLOCAL

  • アンインストール用
SETLOCAL
set DOMAIN_NAME=asp_domain
set USERDOMAIN_HOME=C:\bea\user_projects\domains\asp_domain
set SERVER_NAME=AdminServer
set WLS_USER=weblogic
set WLS_PW=weblogic
set PRODUCTION_MODE=true
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms256m -Xmx512m
call c:\bea\weblogic92\server\bin\uninstallSvc.cmd
ENDLOCAL

どちらとも、必要なパラメータを設定し、用意されたコマンドを呼ぶ、というもの。
で、この登録の前に下記の対応が必要。

【サービス対応〜いきなり停止しないように】
サービス登録しただけだと、サービス停止時、いきなりJVMを落としてしまうらしい。
安全に停止するために「停止クラス」を作成し、停止時に呼ばれるようにする。
  • 停止クラスファイル:管理サーバURLとID/パスワードは環境にあわせて変更。
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Set;
import java.util.Iterator;
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.management.ObjectName;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.configuration.ServerMBean;
import weblogic.management.runtime.ServerRuntimeMBean;
import weblogic.management.runtime.ServerStates;
import weblogic.management.WebLogicObjectName;
public class ServerStopper {
 public static void stop() throws Exception {
  MBeanHome home = null;
  // 管理サーバの URL
  String url = "t3://172.18.6.1:7001";
  String username = "weblogic";
  String password = "weblogic";
  ServerRuntimeMBean serverRuntime = null;
  Set mbeanSet = null;
  Iterator mbeanIterator = null;
  try {
   // ContextClassloader を設定してアサーションを回避
   URL[] urls = { new File("/").toURL() };
   Thread.currentThread().setContextClassLoader(new URLClassLoader(urls));
   Environment env = new Environment();
   env.setProviderUrl(url);
   env.setSecurityPrincipal(username);
   env.setSecurityCredentials(password);
   Context ctx = env.getInitialContext();
   home = (MBeanHome)
   ctx.lookup("weblogic.management.adminhome");
   mbeanSet = home.getMBeansByType("ServerRuntime");
   mbeanIterator = mbeanSet.iterator();
   while(mbeanIterator.hasNext()) {
    serverRuntime = (ServerRuntimeMBean)mbeanIterator.next();
    if(serverRuntime.getState().equals(ServerStates.RUNNING)){
     serverRuntime.shutdown();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

補足:シャットダウン時にセッションが残っていると落ちきれない場合がある。
なので、serverRuntime.shutdown()をserverRuntime.forceShutdown()にすると、
強制的に落とす。一応、正規の手順での強制シャットダウン。
なので、stopclassを利用せずにいきなりJavaVMを落とすよりはマシなはず。


  • コンパイルはこんな感じ。
"C:\bea\jdk150_10\bin\javac"
 -classpath "C:\bea\jdk150_10\lib\tools.jar;
  C:\bea\jdk150_10\lib\;
  C:\bea\weblogic92server\lib\weblogic.jar;
  C:\bea\weblogic92\server\lib\wljmxclient.jar"
 -Xlint:deprecation
 ServerStopper.java

で、installSvc.cmd を一部修正する。
最後のほうで「beasvc」を呼んでいるところがあるので、そこに
「-stopclass:ServerStopper」を追加する。

【ログ出力】
標準出力にはきだされるログをファイルに書き出すようにしとかないと、なにが起きているかわからなくなる。なので、停止クラスと同様、追加。
「beasvc」を呼んでいるところに「-log:ログファイル名」を追加する。

ここまで準備できたら、インストール用コマンドを実行し、サービスとして登録する。

【クラスパス変更】
アプリ用、停止クラス用に、クラスパスを追加する必要がある。
本来、installSvc.cmd コマンドの中に書けばいいけど、追加するとなぜかサービス起動に失敗する。なので、レジストリを直接編集。
キー:\\HKLM\System\CurrentControlSet\Services\beasvc xxxx\Parameters
値の名前:CmdLine
この中でクラスパスをしている箇所があるので、必要なものを追加する。

【動作確認】
実際にサービスを起動してみる。ログファイルをみてサーバが「RUNNING」になればOK。
また、停止したときに停止クラスが呼ばれていればOK。

ログファイルを見るには、wintailを使うと便利。UNIXのtailコマンドと似たようなことができる。
http://www.vector.co.jp/soft/winnt/prog/se332446.h...
2008年01月25日(金) 10:34:38 Modified by ysshn65535




スマートフォン版で見る