■事象
SVF Java Connect Server Service(以降、SvfrServer)のサービスがログファイルへの書き込みを行おうとした場合に例外が発生すると、例外発生以降のログファイルの書き込み処理で「java.io.NullPointerException」の例外が発生します。
「java.io.NullPointerException」の例外発生以降は「SvfrServer」のサービスの再起動を行うまで帳票出力を行うことができません。
■発生条件
「SvfrServer」サービスを介し、対象製品にて帳票出力またはファイル出力を行っている場合にログファイルへの書き込み時に例外が発生すると事象が発生します。
ログファイルへの書き込みが失敗する例としては、Windowsサーバー環境で「SvfrServer」のサービスを停止せずに、ログファイルのコピーまたは移動を行った場合です。 また、ディスクやファイルシステムの障害、ディスクフルによるログファイルへの書き込み失敗、-F オプションで指定したログファイルの出力先ディレクトリにアクセス権がなかった場合にも事象が発生します。
・「SvfrServer」で出力されるログファイル
(1) -L オプションを指定してサービスを起動した際に出力される「SvfrServer ログ」
※出力先・ファイル名は任意に設定が可能です。
(2) -E オプションを指定してプロセスを起動した場合や、
エラー発生時に出力される「セッションログ」
SvfrServer.Port.(ポート番号)-YYYYMMDDhhmmss-(クライアント側 IPアドレス)-
(クライアント側ポート番号).log
(3) -E オプションを指定してサービスを起動した場合や、エラー発生時に出力される
「エラー要約ログ」
SvfrServer.Port.(ポート番号).Error.log
※(2)(3)のログファイルは、-L オプションで指定した出力先、-L オプションが指定
されていない場合は、SVF実行部のテンポラリディレクトリに出力されます。
尚、対象となるバージョンは下記となります。
・SVF Java実行部:8.0~9.0
・SVF Connect for Java API, SVF Connect for ASP/COM API,
SVF Connect for .NET Framework API:7.0~8.1
■事象認識方法
「java.io.NullPointerException」の例外が発生した場合、アプリケーション側では「jp.co.fit.vfreport.SvfrConnectException: Server Connection Busy」の例外が発生します。しかし、この例外は「SvfrServer」サービス側が高負荷状態の場合にも返される可能性があります。
そのため、例外発生だけでは事象発生と判断することはできませんが、例外が連続で発生し、アプリケーションから「SvfrServer」サービスに一切接続できない場合は、本事象が発生していると判断できます。
■対応方法
本事象が発生した場合には「SvfrServer」のサービスを再起動してください。
SVF Java実行部 Ver8.2はVer8.2.21以降、Ver9.0はVer9.0.8以降のパッチで本事象の対策が実施されています。
SVF Java実行部 Ver9.1は初期リリース時点で対応されています。
■補足
事象発生対象バージョンで対策のパッチが未適用の場合、Windows サーバーでのログローテーションは、「SvfrServer」のサービスを停止した上で実施するか、帳票出力処理が実行されない時間帯に実施してください。
対策のパッチを適用した場合でも、ログファイルに対する操作によりロックが発生している間はログファイルへの出力が行えません。「SvfrServer」のログファイルの操作は帳票出力処理が実行されない時間帯に実施いただくことを推奨します。
なお、SVF Java実行部Ver9.1以降ではログローテーション機能が追加されています。