001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.report; 017 018import org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; // 7.0.6.4 (2019/11/29) 020 021import static org.opengion.fukurou.system.HybsConst.CR ; // 6.1.0.0 (2014/12/26) 022import org.opengion.fukurou.system.DateSet; // 6.4.2.0 (2016/01/29) 023import org.opengion.fukurou.system.LogWriter; 024import org.opengion.fukurou.util.StringUtil; 025import org.opengion.fukurou.db.ApplicationInfo; 026import org.opengion.fukurou.db.DBUtil; 027import org.opengion.fukurou.mail.MailTX ; 028import org.opengion.fukurou.db.ConnectionFactory; // 5.9.31.2 (2018/04/20) 029import org.opengion.fukurou.db.DBFunctionName; // 5.9.31.2 (2018/04/20) 030import org.opengion.fukurou.db.Transaction; // 5.9.31.2 (2018/04/20) 031import org.opengion.fukurou.db.TransactionReal; // 5.9.31.2 (2018/04/20) 032 033import java.util.Arrays; 034 035/** 036 * 帳票要求テーブル(GE50)と、エラーテーブル(GE56)に対して、データ書込みを行います。 037 * 038 * このクラスでは、4つの機能を実装しています。 039 * 040 * ●要求番号採番機能: makeYkno() 041 * 新たな要求番号を採番します(シーケンスより取得) 042 * 採番後、内部の要求番号(ykno)もこの値に再セットされます。 043 * ●帳票要求テーブルデータセット機能: insertGE50( final String fgkan ) 044 * 内部変数にセットされている値を利用して、データ登録を行います。 045 * 繰返し登録したい場合は、変更する値のみを、内部変数にセットしてから、 046 * このメソッドを呼び出してください。 047 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 048 * ●完成フラグ設定機能: updateGE50( final String fgkan ) 049 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 050 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 051 * ●エラーメッセージ登録機能: insertErrorGE56( final String inErrMsg ) 052 * エラー発生時に、エラーメッセージを登録します。 053 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 054 * なお、このメソッドは、要求テーブルの完成フラグは、なにもしませんので、 055 * 完成フラグ設定機能と併用してください。 056 * また、システムパラメータ の COMMON_MAIL_SERVER(メールサーバー)と 057 * ERROR_MAIL_FROM_USER(エラーメール発信元)と、ERROR_MAIL_TO_USERS(エラーメール受信者) 058 * がすべて設定されている場合に、エラー情報のメール送信を行います。 059 * 060 * @og.rev 3.8.0.0 (2005/06/07) 新規追加 061 * @og.group 帳票システム 062 * 063 * @version 4.0 064 * @author Kazuhiko Hasegawa 065 * @since JDK5.0, 066 */ 067public class GE50Access { 068 /** 完成フラグのフラグ定義(登録) {@value} */ 069 public static final String FG_SET = "1"; // 登録 070 /** 完成フラグのフラグ定義(済み) {@value} */ 071 public static final String FG_OK = "2"; // 済み 072 /** 完成フラグのフラグ定義(実行中) {@value} */ 073 public static final String FG_RUN = "3"; // 実行中 074 /** 完成フラグのフラグ定義(手動) {@value} */ 075 public static final String FG_HAND = "4"; // 手動 076 /** 完成フラグのフラグ定義(印刷待ち) {@value} */ 077 public static final String FG_WAIT = "5"; // 印刷待ち 078 /** 完成フラグのフラグ定義(取込済) {@value} */ 079 public static final String FG_DBIN = "6"; // 取込済 Ver 3.8.0.0 080 /** 完成フラグのフラグ定義(デーモンエラー) {@value} */ 081 public static final String FG_ERR1 = "7"; // デーモンエラー 082 /** 完成フラグのフラグ定義(アプリエラー) {@value} */ 083 public static final String FG_ERR2 = "8"; // アプリエラー 084 085 // GE50 の要求番号のシーケンスを取得します。 086// private static final String GE50_SEQ = "SELECT GE50_SEQUENCE.NEXTVAL FROM DUAL" ; 087// private static final String GE50_SEQ = "GE50_SEQUENCE"; // 5.9.31.2 (2018/04/20) 088 private static final String GE50_SEQ = "GE50S01"; // 7.0.6.4 (2019/11/29) シーケンス名が間違っていた。 089 090// // 5.2.0.0 (2010/09/01) Ver4互換モード対応 091// // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止 092// private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE"; 093// private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR"; 094 095 // GE50 に要求データを設定します。 096 // 5.0.3.0 (2009/11/04) OUTFILE ⇒ OUT_FILE , OUTDIR ⇒ OUT_DIR 097 // 5.2.0.0 (2010/09/01) Ver4互換モード対応 098 // 6.9.5.0 (2018/04/23) VER4_COMPATIBLE_MODE 廃止 099 private static final String GE50_INSERT = 100 "INSERT INTO GE50" + 101// " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,"+OUT_DIR+","+OUT_FILE+",COMMENTS," + 102 " (SYSTEM_ID,YKNO,LISTID,JOKEN,FGKAN,OUT_DIR,OUT_FILE,COMMENTS," + 103 " FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD,DMN_NAME,DMN_HOST )" + 104 " VALUES" + 105 " (?,?,?,?,?,?,?,SUBSTRB(?,1,100)," + 106 " '1',?,?,?,?,?,?,? )" ; 107 108 // GE50 の完成フラグを設定するSQL文です。 109 // 3.8.0.4 (2005/08/08) PGUPD も更新するように変更 110 private static final String GE50_UPDATE = 111 "UPDATE GE50 SET FGKAN = ? , DYUPD = ? , DMN_NAME = ? , DMN_HOST = ? " + 112 " WHERE FGJ = '1'" + 113 " AND SYSTEM_ID = ?" + 114 " AND YKNO = ?" ; 115 116 // GE56 のエラー情報を書き込むためのSQL文です。 117 private static final String GE56_ERRMSG = 118 "INSERT INTO GE56" + 119 " ( FGJ,SYSTEM_ID,YKNO,ERRMSG,DYSET,DYUPD,USRSET,USRUPD,PGUPD )" + 120 " VALUES ( '1',? ,? ,? ,? ,? ,? ,? ,? )" ; 121 122 /** コネクションにアプリケーション情報を追記するかどうか指定 */ 123 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 124 125 // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 126 private final ApplicationInfo appInfo; 127 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対応 128 129 private final String USRSET ; 130 private final String PGUPD ; 131 private final String DMN_NAME ; // 3.8.5.0 (2006/03/02) 132 133 private String systemId ; 134 private String ykno ; 135 private String listid ; 136 private String joken ; 137 private String outdir ; 138 private String outfile ; 139 private String comments ; 140// private String fgnoml ; // 5.10.0.0 (2018/06/08) ADD 帳票エラーメールの改修 141 private boolean fgnoml ; // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 142 143 /** ファンクション名 */ 144 protected final DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) ); // 5.9.31.2 (2018/04/20) 145 146 /** 147 * ユーザーとプログラムIDを指定して、オブジェクトを構築します。 148 * このオブジェクトを構築した時刻を、DYSET、DYUPD にセットします。 149 * つまり、このオブジェクトで登録する一連のデータは、すべて同一時刻での登録になります。 150 * 151 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 152 * 153 * @param usrset ユーザー 154 * @param prgupd プログラムID 155 * @param dmnName 更新デーモン名 156 */ 157 public GE50Access( final String usrset, final String prgupd ,final String dmnName) { 158 USRSET = substr( usrset, 10, "UNNONE" ) ; 159 PGUPD = substr( prgupd, 10, "UNNONE" ) ; 160 DMN_NAME = substr( dmnName,50, "UNNONE" ) ; 161 162 // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 163 if( USE_DB_APPLICATION_INFO ) { 164 appInfo = new ApplicationInfo(); 165 // ユーザーID,IPアドレス,ホスト名 166 appInfo.setClientInfo( USRSET,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 167 // 画面ID,操作,プログラムID 168 appInfo.setModuleInfo( "GE50Access",null,DMN_NAME ); 169 } 170 else { 171 appInfo = null; 172 } 173 } 174 175 /** 176 * systemId をセットします。 177 * 178 * @param systemId システムID 179 */ 180 public void setSystemId ( final String systemId ) { this.systemId = systemId; } 181 182 /** 183 * systemId を取得します。 184 * 185 * @return システムID 186 */ 187 public String getSystemId() { return systemId; } 188 189 /** 190 * listid をセットします。 191 * 192 * @param listid 帳票ID 193 */ 194 public void setListId( final String listid ) { this.listid = listid; } 195 196 /** 197 * joken をセットします。 198 * 199 * @param joken 振分条件 200 */ 201 public void setJoken( final String joken ) { this.joken = joken; } 202 203 /** 204 * outdir をセットします。 205 * 206 * @param outdir 出力DIR 207 */ 208 public void setOutDir( final String outdir ) { this.outdir = outdir; } 209 210 /** 211 * outfile をセットします。 212 * 213 * @param outfile 出力ファイル 214 */ 215 public void setOutFile( final String outfile ) { this.outfile = outfile; } 216 217 /** 218 * comments をセットします。 219 * 220 * @param comments コメント 221 */ 222 public void setComments( final String comments ) { this.comments = comments; } 223 224 /** 225 * ykno をセットします。 226 * 227 * @param ykno 要求番号 228 */ 229 public void setYkno( final String ykno ) { this.ykno = ykno; } 230 231 /** 232 * ykno を取得します。 233 * 234 * @return 要求番号 235 */ 236 public String getYkno() { return ykno; } 237 238 /** 239 * 帳票エラー時のメール不要フラグをセットします(初期値=false:送信する)。 240 * 241 * 帳票エラー時のメール送信は帳票IDの正規表現でコントロール可能でしたが、 242 * ID単位に未送信フラグを持たせてコントロール可能にします。 243 * GE54にFGNOMLカラムを追加し、これが1の場合はエラーメールを送信しないようにします。 244 * 帳票の動作にDBのカラム追加が伴うためバージョンを5.10系に上げます。 245 * エラーメールが不要の場合は、"true", もしくは、1文字の場合のみ、"0" 以外の場合が、 246 * メール不要として、エラーメールを送信しません。 247 * 248 * @og.rev 5.10.0.0 (2018/06/08) ADD 249 * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 250 * 251// * @param fgnoml メール不要フラグ 252 * @param flag メール不要フラグ 253 */ 254// public void setFgNoMl( final String fgnoml ) { this.fgnoml = fgnoml; } 255 public void setFgNoMl( final String flag ) { 256 fgnoml = StringUtil.nval( flag,fgnoml ); // true,TRUE,0以外の1文字の場合、true、それ以外は、初期値 257 } 258 259 /** 260 * 新たな要求番号を採番します(シーケンスより取得) 261 * 採番後、内部の要求番号(ykno)もこの値に再セットされます。 262 * 263 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 264 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 265 * @og.rev 5.9.31.2 (2018/04/20) シーケンスの取り方を変更 266 * @og.rev 7.0.6.4 (2019/11/29) TransactionRealのclose漏れ対応 267 * 268 * @return 要求番号 269 */ 270 public String makeYkno() { 271// try { 272// // final String[][] vals = DBUtil.dbExecute( GE50_SEQ,null,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 273// // ykno = vals[0][0].trim(); 274// final Transaction tran = new TransactionReal( appInfo ); // 5.9.31.2 (2018/04/20)f 275 try( Transaction tran = new TransactionReal( appInfo ) ) { // 7.0.6.4 (2019/11/29) try-with-resources文 276 ykno = Integer.toString( dbName.getSequence( GE50_SEQ, tran, DBID ) ); 277 } 278 catch( final RuntimeException ex ) { 279 final String errMsg = "要求番号の採番に失敗しました。" + CR 280 + " SQL=" + GE50_SEQ + CR ; // 7.0.6.4 (2019/11/29) ex.getMessage は、追記しない。 281// + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 282 LogWriter.log( errMsg ); 283 LogWriter.log( ex ); 284 285 throw new HybsSystemException( errMsg,ex ); // 7.0.6.4 (2019/11/29) 286 } 287 return ykno ; 288 } 289 290 /** 291 * 帳票要求テーブルにデータをセットします。 292 * 内部変数にセットされている値を利用して、データ登録を行います。 293 * 繰返し登録したい場合は、変更する値のみを、内部変数にセットしてから、 294 * このメソッドを呼び出してください。 295 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 296 * 297 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 298 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 299 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 300 * 301 * @param fgkan 完成フラグ 302 */ 303 public void insertGE50( final String fgkan ) { 304 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 305 306 // GE50_INSERT の引数 307 final String[] args = new String[] { 308 systemId, // SYSTEM_ID 309 ykno , // YKNO 310 StringUtil.nval( listid,"NO_LIST" ), // LISTID 311 StringUtil.nval( joken,"NO_JOKEN" ), // JOKEN 312 fgkan, // FGKAN 313 StringUtil.nval( outdir,"" ), // OUT_DIR 314 StringUtil.nval( outfile,"" ), // OUT_FILE 315 StringUtil.nval( comments,"" ), // COMMENTS 316 DYSET, // DYSET 317 DYSET, // DYUPD 318 USRSET, // USRSET 319 USRSET, // USRUPD 320 PGUPD, // PGUPD 321 DMN_NAME, // DMN_NAME 322 HybsSystem.HOST_NAME // DMN_HOST 323 } ; 324 325 try { 326 DBUtil.dbExecute( GE50_INSERT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 327 } 328 catch( final RuntimeException ex ) { 329 final String errMsg = "帳票要求テーブルデータセットに失敗しました。" + CR 330 + " SQL=" + GE50_INSERT + CR 331 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 332 LogWriter.log( errMsg ); 333 LogWriter.log( ex ); 334 } 335 } 336 337 /** 338 * 処理終了後に完成フラグを設定します。 339 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 340 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 341 * 342 * @og.rev 3.8.0.4 (2005/08/08) PGUPDを追加 343 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 344 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 345 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 346 * 347 * @param fgkan 完成フラグ 348 */ 349 public void updateGE50( final String fgkan ) { 350 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 351 352 final String[] args = new String[] { 353 fgkan, // FGKAN 354 DYSET, // DYUPD 355 DMN_NAME, // DMN_NAME 356 HybsSystem.HOST_NAME, // DMN_HOST 357 systemId, // SYSTEM_ID 358 ykno // YKNO 359 } ; 360 361 try { 362 DBUtil.dbExecute( GE50_UPDATE,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 363 } 364 catch( final RuntimeException ex ) { 365 final String errMsg = "完成フラグ設定に失敗しました。" + CR 366 + " SQL=" + GE50_UPDATE + CR 367 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 368 LogWriter.log( errMsg ); 369 LogWriter.log( ex ); 370 } 371 } 372 373 /** 374 * エラー発生時に、エラーメッセージを登録します。 375 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 376 * 377 * @og.rev 3.8.5.3 (2006/06/30) エラーメッセージを 4000Byte以下にする。 378 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 379 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 380 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 381 * @og.rev 5.10.0.0 (2018/06/08) メール不要フラグ(fgNoMl)の判定を追加。 382 * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 383 * 384 * @param inErrMsg エラーメッセージ 385 */ 386 public void insertErrorGE56( final String inErrMsg ) { 387 388 String outErrMsg = (inErrMsg == null) ? "" : inErrMsg.trim(); 389 if( outErrMsg.length() > 2000 ) { 390 final String code = HybsSystem.sys( "DB_ENCODE" ); 391 final byte[] byteValue = StringUtil.makeByte( outErrMsg,code ); 392 if( byteValue.length > 4000 ) { 393 outErrMsg = StringUtil.makeString( byteValue,0,4000,code ); 394 } 395 } 396 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 397 398 final String[] args = new String[] { 399 systemId, 400 ykno, 401 outErrMsg , // ERRMSG 402 DYSET, // DYSET 403 DYSET, // DYUPD 404 USRSET, // USRSET 405 USRSET, // USRUPD 406 PGUPD }; // PGUPD 407 408 try { 409 DBUtil.dbExecute( GE56_ERRMSG,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 410 } 411 catch( final RuntimeException ex ) { 412 final String errMsg = "エラーメッセージテーブルセットに失敗しました。" + CR 413 + " SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "]" + CR 414 + " SQL=" + GE56_ERRMSG + CR 415 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 416 LogWriter.log( errMsg ); 417 LogWriter.log( ex ); 418 } 419 420// sendMail( outErrMsg ); // 3.8.0.4 (2005/08/08) 421 // 5.10.0.0 (2018/06/08) MOD メール不要フラグが1以外の場合、メールを送信します 422// if( !"1".equals(fgnoml) ) { 423 // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 424 if( ! fgnoml ) { 425 sendMail( outErrMsg ); // 3.8.0.4 (2005/08/08) 426 } 427 } 428 429 /** 430 * substring を補完する簡易メソッド 431 * 432 * substring で、文字をカットする場合、文字列長が、カットする文字数より 433 * 長い必要があります。ここでは、最大長に制限をかけることが目的なので 434 * 入力文字長が指定文字数より小さいケースがあります。そのチェックを 435 * 簡易的に実行できるように、このメソッドで処理します。 436 * 437 * @param inStr 入力文字 438 * @param len 最大文字数 439 * @param defVal NULL 時の初期値 440 * 441 * @return 指定の文字数でカットされた新しい文字列 442 */ 443 private String substr( final String inStr, final int len, final String defVal ) { 444 return inStr == null 445 ? defVal 446 : inStr.length() > len 447 ? inStr.substring( 0,len ) 448 : inStr ; 449 } 450 451 /** 452 * エラー情報のメール送信を行います。 453 * エラーメールは、システムパラメータ の COMMON_MAIL_SERVER(メールサーバー)と 454 * ERROR_MAIL_FROM_USER(エラーメール発信元)と、ERROR_MAIL_TO_USERS(エラーメール受信者) 455 * がすべて設定されている場合に、送信されます。 456 * 457 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 458 * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み 459 * 460 * @param inErrMsg エラーメッセージ 461 */ 462 private void sendMail( final String inErrMsg ) { 463 464 final String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 465 final String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" ); 466 final String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) ); 467 final String match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" ); // 5.7.0.4 (2013/11/29) 468 469 if( host != null && from != null && to.length > 0 ) { 470 if( match_txt == null || match_txt.isEmpty() 471 || listid == null || listid.isEmpty() 472 || listid.matches( match_txt ) ){ // 5.7.0.4 (2013/11/29) 473 // 3.8.5.0 (2006/03/02) DMN_NAME、DMN_HOST 追加 474 // 5.7.0.4 (2013/11/29) listid追加 475 final String subject = "SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "] , " 476 + "DMN_NAME=[" + DMN_NAME + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]" 477 + "LISTID=[" + listid +"]"; 478 try { 479 final MailTX tx = new MailTX( host ); 480 // tx.setHost( host ); 481 tx.setFrom( from ); 482 tx.setTo( to ); 483 tx.setSubject( "帳票エラー:" + subject ); 484 tx.setMessage( inErrMsg ); 485 tx.sendmail(); 486 } 487 catch( final Throwable ex ) { 488 final String errMsg = "エラー時メール送信に失敗しました。" + CR 489 + " SUBJECT:" + subject + CR 490 + " HOST:" + host + CR 491 + " FROM:" + from + CR 492 + " TO:" + Arrays.toString( to ) + CR 493 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 494 LogWriter.log( errMsg ); 495 LogWriter.log( ex ); 496 } 497 } 498 } 499 } 500}