Stand Alone PVT Server
増田内科様のカスタマイズを見ると,PVT Server をサーバ機で走らせるようにされている。自分でも同じことをしたいと思ったのだが,当方のサーバは X をインストールしていない Debian Etch なので,OpenDolphin のクライアントはそのままでは走らない。しかたがないので,console で OpenDolphin の PVT Server 部分だけを起動できるように StandAlonePVTServer を作成した。サーバマシン起動時に起動スクリプトで立ち上げることにして,JBoss サーバが立ち上がるまで 10 秒ごとにログインをリトライするようにした。
server/StandAlonePVTServer.java
package open.dolphin.server; import java.util.Iterator; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.prefs.Preferences; import open.dolphin.client.ClientContext; import open.dolphin.client.ClientContextStub; import open.dolphin.delegater.UserDelegater; import open.dolphin.infomodel.UserModel; import open.dolphin.plugin.PluginLoader; import open.dolphin.project.DolphinPrincipal; import open.dolphin.project.Project; import open.dolphin.project.ProjectStub; import org.apache.log4j.Logger; /** * Console verion of PVT Server * @author pns */ public class StandAlonePVTServer { private static final String DEFAULT_FACILITY_OID = "1.3.6.1.4.1.9414.10.1"; private final String NODE_NAME = "/open/dolphin/project"; private PVTServer pvtServer; private Logger pvtLogger; private ScheduledFuture timerHandler; private StandAlonePVTServer(String hostIp, String userId, String password) { // ClientContext を生成する ClientContextStub stub = new ClientContextStub(); ClientContext.setClientContextStub(stub); pvtLogger = ClientContext.getLogger("pvt"); pvtLogger.info("Host Address: " + hostIp); pvtLogger.info("User ID: " + userId); // set dolphin server address Preferences prefs = Preferences.userRoot().node(NODE_NAME); prefs.put(Project.HOST_ADDRESS, hostIp); // pref に設定した host address を Project に書き込み Project.setProjectStub(new ProjectStub()); // facility ID と user ID をセット DolphinPrincipal principal = new DolphinPrincipal(); principal.setFacilityId(DEFAULT_FACILITY_OID); principal.setUserId(userId); // 10秒ごとにログインをトライする Login l = new Login(principal, password); ScheduledExecutorService schedule = Executors.newSingleThreadScheduledExecutor(); timerHandler = schedule.scheduleWithFixedDelay(l, 0, 10, TimeUnit.SECONDS); } protected class Login implements Runnable { private UserDelegater userDlg; private UserModel userModel; private DolphinPrincipal principal; private String password; public Login(DolphinPrincipal principal, String password) { userDlg = new UserDelegater(); this.principal = principal; this.password = password; } public void run() { userModel = null; try { userModel = userDlg.login(principal, password); } catch (Exception ex) { System.out.println(ex); } if (userModel != null) { startPVTServer(); timerHandler.cancel(true); pvtLogger.info("Login process completed"); } else { pvtLogger.info("Login failed. Retry in 10 sec."); } } } private void startPVTServer() { // plugin loader PluginLoaderloader = PluginLoader.load(PVTServer.class, ClientContext.getPluginClassLoader()); Iterator iter = loader.iterator(); if (iter.hasNext()) { pvtServer = iter.next(); pvtServer.setContext(null); pvtServer.start(); } // ^C でサーバを止めるための設定 Runtime.getRuntime().addShutdownHook(new Thread(){ @Override public void run() { pvtLogger.info("Shutdown process starts."); pvtServer.stop(); } }); } public static void main(String[] args) { String usage = "Usage: java -cp OpenDolphin-1.3.0.X.jar open.dolphin.server.StandAlonePVTServer -Uxxxx -Pxxxx -Sxxx.xxx.xxx.xxx"; String userId = ""; String userPassword = ""; String serverAddress = ""; for (String arg : args){ if ("-U".equals(arg.substring(0, 2))){ userId = arg.substring(2, arg.length()); } if ("-P".equals(arg.substring(0, 2))){ userPassword = arg.substring(2, arg.length()); } if ("-S".equals(arg.substring(0,2))){ serverAddress = arg.substring(2, arg.length()); } } if (!userId.equals("") && !userPassword.equals("") && !serverAddress.equals("")) { new StandAlonePVTServer(serverAddress, userId, userPassword); } else { System.out.println(usage); System.exit(1); } } }
起動スクリプト pvtserver.sh
#!/bin/bash OPENDOLPHIN="OpenDolphin-1.3.0.2.jar" PVTSERVER="open.dolphin.server.StandAlonePVTServer" PVTSERVER_HOME="/home/dolphin/opendolphin-client" PVTSERVER_USER="dolphin" JBOSS_HOST="192.168.1.100" JAVA="/usr/bin/java" USER="admin" PASS="admin" SUBIT="su - $PVTSERVER_USER -c " # log PVTSERVER_CONSOLE=$PVTSERVER_HOME/log/console.log if [ -n "$PVTSERVER_CONSOLE" -a ! -d "$PVTSERVER_CONSOLE" ]; then # ensure the file exists touch $PVTSERVER_CONSOLE if [ ! -z "$SUBIT" ]; then chown $PVTSERVER_USER $PVTSERVER_CONSOLE fi fi if [ -n "$PVTSERVER_CONSOLE" -a ! -f "$PVTSERVER_CONSOLE" ]; then echo "WARNING: location for saving console log invalid: $PVTSERVER_CONSOLE" echo "WARNING: ignoring it and using /dev/null" PVTSERVER_CONSOLE="/dev/null" fi # define what will be done with the console log PVTSERVER_CONSOLE=${PVTSERVER_CONSOLE:-"/dev/null"} PVTSERVERSH="$JAVA -cp $OPENDOLPHIN $PVTSERVER -U$USER -P$PASS -S$JBOSS_HOST" PVTSERVER_CMD_START="cd $PVTSERVER_HOME/; $PVTSERVERSH" if [ ! -d "$PVTSERVER_HOME" ]; then echo PVTSERVER_HOME does not exist as a valid directory : $PVTSERVER_HOME exit 1 fi # echo PVTSERVER_CMD_START = $PVTSERVER_CMD_START function procrunning() { procid=0 PVTSERVERSCRIPT=$(echo $PVTSERVERSH | awk '{print $1}') for procid in `/bin/pidof -x "$PVTSERVERSCRIPT"`; do ps -fp $procid | grep "${PVTSERVERSH% *}" > /dev/null && pid=$procid done } stop() { pid=0 procrunning if [ $pid = '0' ]; then echo -n -e "\n * No PVTServer is currently running\n" exit 1 fi RETVAL=1 # If process is still running for id in `ps --pid $pid | awk '{print $1}' | grep -v "^PID$"`; do if [ -z "$SUBIT" ]; then kill $id else $SUBIT "kill $id" fi done sleep=0 while [ $sleep -lt 5 -a $RETVAL -eq 1 ]; do echo -n -e "\n * waiting for processes to stop"; sleep 1 sleep=`expr $sleep + 10` pid=0 procrunning if [ $pid == '0' ]; then RETVAL=0 fi done # Still not dead... kill it count=0 pid=0 procrunning if [ $RETVAL != 0 ] ; then echo -e "\n * Timeout: Shutdown command was sent, but process is still running with PID $pid" exit 1 fi echo exit 0 } case "$1" in start) echo " * Starting PVTServer, check $PVTSERVER_CONSOLE" cd $PVTSERVER_HOME/ if [ -z "$SUBIT" ]; then eval $PVTSERVER_CMD_START >${PVTSERVER_CONSOLE} 2>&1 & else $SUBIT "$PVTSERVER_CMD_START >${PVTSERVER_CONSOLE} 2>&1 &" fi ;; stop) stop ;; restart) $0 stop $0 start ;; *) echo "usage: $0 (start|stop|restart|help)" esac
« dialog が開いたら特定の JTextField にフォーカス | トップページ | MasterPanel のキーワード保存 »
「OpenDolphin」カテゴリの記事
- Java 17 への移行(7) - OpenDolphin client の対応 (2023.02.04)
- Java 17 への移行(6) - Hibernate 6 でやらかす(2023.02.03)
- Java 17 への移行(5) - OpenDolphin server の対応(2023.02.02)
- Java 17 への移行(4) - OpenSearch の準備 [ubuntu 編](2023.02.01)
- Java 17 への移行(3) - OpenSearch の準備 [mac 編](2023.01.31)