Spring Boot で HULFT Windows/Linux を管理

メインフレームからオープン環境(Windows /Linux)へデータを送信したいとき、HULFTが便利です。それぞれの筐体にHULFTをインストールし設定すればデータが送信できます。

データ受信状況を管理したい

データ受信の状況を管理したく、オープン環境側で受信したときに諸々のデータをDBに登録する受信後ジョブを作ろうと思いました。HULFT では、データを受信完了したことをトリガーに実行するジョブを登録できるようです。

しかし、HULFT Windows ではバッチファイル、HULFT Linuxではシェルスクリプトでしか起動ジョブが登録できないようでした。同じ機能をOSごとに作るのは面倒なので、共通のものを作れないか検討しました。

(マニュアルに記載は見つけられませんでしたが、起動ジョブとしてjavaコマンドを登録し試してみましたが使えないようでした。また、バッチファイル中のJavaコマンドも機能しないようでした。このこともあり、HULFTの仕組みをベースにするよりも自分で作れないか検討するに至りました。)

集信履歴リスト表示コマンドが同じ

マニュアルを見た結果、「REST API は HULFT Windows/HULFT Linux に用意されていない」「APIもWindows版とLinux版で共通ではない」ということが分かりました。

そして「集信履歴リスト表示コマンドがWindows版とLinux版で同じ」ということが分かりました。このコマンドを使って管理アプリを作ります。

集信履歴リスト表示コマンド

utllist -r -from %{date1} -to %{date2} -v84

-r: 集信履歴
-from: 表示対象の日付を8バイトの数字で指定 if(date1 ≦ targetDate)
-to: 表示対象の日付を8バイトの数字で指定 if(targetDate ≦ date2)
-v84: 各機種HULFT V84共通フォーマット

Spring Bootに組み込む

下記の方法を応用して「集信履歴リスト表示コマンド」をSpring Bootで実行します。

Javaプログラムからbatファイルを実行する方法
Javaプログラムからbatファイルを実行する方法をご紹介します。 batファイルを作成 まずはbatファイルを作成します。ここ...

そして、下記の方法を応用してこのコマンドを定期的に実行します。

Spring Bootで @Scheduled で定期実行する方法
Spring Bootで定期実行する方法をご紹介します。 まずは定期実行処理を有効にするため、main処理 に @Enable...

取得できる最小単位が1日間なので1日分を取得します。取得できるデータにユニークになる項目が無い、時刻の最小単位が秒、という上書きレコードが発生しないか少々不安な仕様になっています。

2023年05月に富士通Japanが開発したマイナンバーカードを使ったコンビニ証明書交付サービス(川崎市)で、秒単位でデータを管理していたから上書きしてしまい誤発行してしまう障害が起きていましたよね。

上書きしてしまわないよう配信時にファイルパスにミリ秒やインクリメントを入れる考慮をしてもらう、秒単位で管理していることを周知しておく、など対応しておきましょう。

コマンドから取得したデータをDBに登録します。DBに登録済のデータと、コマンドから取得したレコードを比較し、まだDBに登録していなければ登録します。これを繰り返します。

比較対象は次のカラムでいいでしょう。

  • ファイル名(ファイルパス)
  • 集配信開始日+集配信終了時刻

心配であれば夜間に「前日の集信履歴テーブルデータ」と「前日を指定した集信履歴コマンド実行結果」を比較すると、より正確な管理が出来ます。