【GeneXus】Command Line(Java)

GeneXusも一応バッチ作れます。

作り方

適当にプロシージャを作って、処理を書く。
今回はテスト的なテーブルにレコードを10件Insertする処理です。

Pro_InsertTest

For &i = 1 to 10
	
	New
		
		// test_id = AutoNumber(自動採番)
		test_name = !"Test" + &i.ToFormattedString()
		test_date = ServerDate()
		test_datetime = ServerNow()
		test_boolean = True
		
	Endnew
	
	
Endfor

Commit

プロパティを変更。

これをコマンドライン、
ウィンドウズならコマンドプロンプト
MacやLinuxならターミナル?から起動します。

起動方法(Windows)

cd C:¥Program Files¥Apache Software Foundation¥Tomcat 9.0¥webapps¥TestJavaEnvironment¥WEB-INF¥classes
java -cp .;..¥lib¥* com.oqiita.apro_inserttest

起動方法(Linux)

cd /opt/apache-tomcat-9.0.22/webapps/TestJavaEnvironment/WEB-INF/classes
java -cp .:../lib/* com.oqiita.apro_inserttest

注意

以下のことを確認してください。
・Javaのバージョンの確認。Pathが通っているJavaとビルドしているJavaのバージョンが違うと正しく動かない場合があります。
・ライブラリの不足。なぜか知らんけど、Jarを1個1個通しているのを見かけますが、GeneXusに置いてそんなの無駄っす。
バージョンあがるたびJarの確認とか名前の確認とかマジ無駄。ワイルドカードで全部認識させろ。

Batファイル

適当に作成したbatファイルを置いておきます。WEB-INFフォルダの中にbatchフォルダを作成してbatファイルを作成することを想定しています。

無駄なコマンドも入っているので、いらなかったら消してねw

GeneXus.bat

@echo off

echo ########################################
echo # 実行プログラム    : GeneXus Command Line Program
echo # 実行プログラム名  : Command Line Program
echo # 返却値            : 0 [正常終了]
echo #                   : 1 [異常終了]
echo ########################################
echo.


REM ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
REM # ライブラリパス設定
SET BATCH_LIBRARY_PATH=..\lib

REM # クラスパス設定
SET CLASS_PATH=.;%BATCH_LIBRARY_PATH%\*

REM # 実行するクラスが存在するパス
SET EXECUTE_PATH=..\classes

REM # 実行するJavaClass指定
SET EXECUTE_CLASS=com.oqiita.apro_inserttest
REM ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

echo ###########################
echo # 各種情報を確認
echo ###########################
echo Javaのバージョンを表示
java -version
echo.

echo 各設定値を確認
echo EXECUTE_BAT=%~0
echo %~dp0
echo EXECUTE_PATH=%EXECUTE_PATH%
echo EXECUTE_CLASS=%EXECUTE_CLASS%
echo CLASS_PATH=%CLASS_PATH%
echo.

echo ###########################
echo # 階層移動
echo ###########################
echo cd %EXECUTE_PATH% %1
cd %EXECUTE_PATH%
echo.

echo ###########################
echo # Java実行
echo ###########################
echo java -cp %CLASS_PATH% %EXECUTE_CLASS% %1
java -cp %CLASS_PATH% %EXECUTE_CLASS% %1
echo.

echo ###########################
echo # 返却値
echo ###########################
IF %ERRORLEVEL%==1 (
	echo 異常終了  %ERRORLEVEL%
	REM pause
	EXIT /b 1
)

echo ###########################
echo # 場所移動
echo ###########################
cd /d %~dp0

echo 正常終了  %ERRORLEVEL%
REM pause
EXIT /b 0



Shellファイル

GeneXusBatch

#!/bin/sh

echo "########################################"
echo "# 実行プログラム    : Sample.class"
echo "# 実行プログラム名  : サンプルクラス"
echo "# 返却値            : 0 [正常終了]"
echo "#                   : 1 [異常終了]"
echo "########################################"
echo ""

# ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
# batchファイルのパスを取得
BATCH_PATH=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd)

# ライブラリパス設定
BATCH_LIBRARY_PATH="../lib"

# クラスパス設定
CLASS_PATH=".:${BATCH_LIBRARY_PATH}/*"

# 実行するクラスが存在するパス
EXECUTE_PATH="../classes"

# 実行するJavaClass指定
EXECUTE_CLASS=com.oqiita.apro_inserttest
# ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

echo "###########################"
echo "# 各種情報を確認"
echo "###########################"
echo "Javaのバージョンを表示"
java -version
echo ""

echo $(cd $(dirname $0);pwd)
echo ""

echo "各設定値を確認"
echo "${EXECUTE_PATH}"
echo "${EXECUTE_CLASS}"
echo "${CLASS_PATH}"
echo ""

echo "###########################"
echo "# 階層移動"
echo "###########################"
echo "cd ${BATCH_PATH} $1"
cd "${BATCH_PATH}" $1
echo ""
echo "cd ${EXECUTE_PATH} $1"
cd "${EXECUTE_PATH}" $1
echo ""

echo "###########################"
echo "# Java実行"
echo "###########################"
echo "java -cp ${CLASS_PATH} ${EXECUTE_CLASS} $1"
java -cp "${CLASS_PATH}" "${EXECUTE_CLASS}" $1
RESULT=$?
echo ""

echo "###########################"
echo "# 返却値"
echo "###########################"

if [ ${RESULT} = 1 ]; then
    echo "異常終了" ${RESULT}
    exit 1
fi

echo "正常終了" ${RESULT}
exit 0
echo ""

まとめ

一回作ってしまえば、どのプロジェクトでも使えるし、複数個バッチがある場合は
もう1個親のバッチを作って呼び出すなんてこともいいかもしれない。
今回はBlog用なので設定とかを外だしにしてませんが、設定などは外出しにしておくて便利・・・・かも?

以上です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください