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 protected final DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) ); // 5.9.31.2 (2018/04/20) 144 145 /** 146 * ユーザーとプログラムIDを指定して、オブジェクトを構築します。 147 * このオブジェクトを構築した時刻を、DYSET、DYUPD にセットします。 148 * つまり、このオブジェクトで登録する一連のデータは、すべて同一時刻での登録になります。 149 * 150 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 151 * 152 * @param usrset ユーザー 153 * @param prgupd プログラムID 154 * @param dmnName 更新デーモン名 155 */ 156 public GE50Access( final String usrset, final String prgupd ,final String dmnName) { 157 USRSET = substr( usrset, 10, "UNNONE" ) ; 158 PGUPD = substr( prgupd, 10, "UNNONE" ) ; 159 DMN_NAME = substr( dmnName,50, "UNNONE" ) ; 160 161 // 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 162 if( USE_DB_APPLICATION_INFO ) { 163 appInfo = new ApplicationInfo(); 164 // ユーザーID,IPアドレス,ホスト名 165 appInfo.setClientInfo( USRSET,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 166 // 画面ID,操作,プログラムID 167 appInfo.setModuleInfo( "GE50Access",null,DMN_NAME ); 168 } 169 else { 170 appInfo = null; 171 } 172 } 173 174 /** 175 * systemId をセットします。 176 * 177 * @param systemId システムID 178 */ 179 public void setSystemId ( final String systemId ) { this.systemId = systemId; } 180 181 /** 182 * systemId を取得します。 183 * 184 * @return システムID 185 */ 186 public String getSystemId() { return systemId; } 187 188 /** 189 * listid をセットします。 190 * 191 * @param listid 帳票ID 192 */ 193 public void setListId( final String listid ) { this.listid = listid; } 194 195 /** 196 * joken をセットします。 197 * 198 * @param joken 振分条件 199 */ 200 public void setJoken( final String joken ) { this.joken = joken; } 201 202 /** 203 * outdir をセットします。 204 * 205 * @param outdir 出力DIR 206 */ 207 public void setOutDir( final String outdir ) { this.outdir = outdir; } 208 209 /** 210 * outfile をセットします。 211 * 212 * @param outfile 出力ファイル 213 */ 214 public void setOutFile( final String outfile ) { this.outfile = outfile; } 215 216 /** 217 * comments をセットします。 218 * 219 * @param comments コメント 220 */ 221 public void setComments( final String comments ) { this.comments = comments; } 222 223 /** 224 * ykno をセットします。 225 * 226 * @param ykno 要求番号 227 */ 228 public void setYkno( final String ykno ) { this.ykno = ykno; } 229 230 /** 231 * ykno を取得します。 232 * 233 * @return 要求番号 234 */ 235 public String getYkno() { return ykno; } 236 237 /** 238 * 帳票エラー時のメール不要フラグをセットします(初期値=false:送信する)。 239 * 240 * 帳票エラー時のメール送信は帳票IDの正規表現でコントロール可能でしたが、 241 * ID単位に未送信フラグを持たせてコントロール可能にします。 242 * GE54にFGNOMLカラムを追加し、これが1の場合はエラーメールを送信しないようにします。 243 * 帳票の動作にDBのカラム追加が伴うためバージョンを5.10系に上げます。 244 * エラーメールが不要の場合は、"true", もしくは、1文字の場合のみ、"0" 以外の場合が、 245 * メール不要として、エラーメールを送信しません。 246 * 247 * @og.rev 5.10.0.0 (2018/06/08) ADD 248 * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 249 * 250// * @param fgnoml メール不要フラグ 251 * @param flag メール不要フラグ 252 */ 253// public void setFgNoMl( final String fgnoml ) { this.fgnoml = fgnoml; } 254 public void setFgNoMl( final String flag ) { 255 fgnoml = StringUtil.nval( flag,fgnoml ); // true,TRUE,0以外の1文字の場合、true、それ以外は、初期値 256 } 257 258 /** 259 * 新たな要求番号を採番します(シーケンスより取得) 260 * 採番後、内部の要求番号(ykno)もこの値に再セットされます。 261 * 262 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 263 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 264 * @og.rev 5.9.31.2 (2018/04/20) シーケンスの取り方を変更 265 * @og.rev 7.0.6.4 (2019/11/29) TransactionRealのclose漏れ対応 266 * 267 * @return 要求番号 268 */ 269 public String makeYkno() { 270// try { 271// // final String[][] vals = DBUtil.dbExecute( GE50_SEQ,null,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 272// // ykno = vals[0][0].trim(); 273// final Transaction tran = new TransactionReal( appInfo ); // 5.9.31.2 (2018/04/20)f 274 try( final Transaction tran = new TransactionReal( appInfo ) ) { // 7.0.6.4 (2019/11/29) try-with-resources文 275 ykno = Integer.toString( dbName.getSequence( GE50_SEQ, tran, DBID ) ); 276 } 277 catch( final RuntimeException ex ) { 278 final String errMsg = "要求番号の採番に失敗しました。" + CR 279 + " SQL=" + GE50_SEQ + CR ; // 7.0.6.4 (2019/11/29) ex.getMessage は、追記しない。 280// + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 281 LogWriter.log( errMsg ); 282 LogWriter.log( ex ); 283 284 throw new HybsSystemException( errMsg,ex ); // 7.0.6.4 (2019/11/29) 285 } 286 return ykno ; 287 } 288 289 /** 290 * 帳票要求テーブルにデータをセットします。 291 * 内部変数にセットされている値を利用して、データ登録を行います。 292 * 繰返し登録したい場合は、変更する値のみを、内部変数にセットしてから、 293 * このメソッドを呼び出してください。 294 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 295 * 296 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 297 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 298 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 299 * 300 * @param fgkan 完成フラグ 301 */ 302 public void insertGE50( final String fgkan ) { 303 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 304 305 // GE50_INSERT の引数 306 final String[] args = new String[] { 307 systemId, // SYSTEM_ID 308 ykno , // YKNO 309 StringUtil.nval( listid,"NO_LIST" ), // LISTID 310 StringUtil.nval( joken,"NO_JOKEN" ), // JOKEN 311 fgkan, // FGKAN 312 StringUtil.nval( outdir,"" ), // OUT_DIR 313 StringUtil.nval( outfile,"" ), // OUT_FILE 314 StringUtil.nval( comments,"" ), // COMMENTS 315 DYSET, // DYSET 316 DYSET, // DYUPD 317 USRSET, // USRSET 318 USRSET, // USRUPD 319 PGUPD, // PGUPD 320 DMN_NAME, // DMN_NAME 321 HybsSystem.HOST_NAME // DMN_HOST 322 } ; 323 324 try { 325 DBUtil.dbExecute( GE50_INSERT,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 326 } 327 catch( final RuntimeException ex ) { 328 final String errMsg = "帳票要求テーブルデータセットに失敗しました。" + CR 329 + " SQL=" + GE50_INSERT + CR 330 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 331 LogWriter.log( errMsg ); 332 LogWriter.log( ex ); 333 } 334 } 335 336 /** 337 * 処理終了後に完成フラグを設定します。 338 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 339 * なお、完成フラグ(fgkan)は、内部変数に持っていないため、外部から指定してください。 340 * 341 * @og.rev 3.8.0.4 (2005/08/08) PGUPDを追加 342 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 343 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 344 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 345 * 346 * @param fgkan 完成フラグ 347 */ 348 public void updateGE50( final String fgkan ) { 349 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 350 351 final String[] args = new String[] { 352 fgkan, // FGKAN 353 DYSET, // DYUPD 354 DMN_NAME, // DMN_NAME 355 HybsSystem.HOST_NAME, // DMN_HOST 356 systemId, // SYSTEM_ID 357 ykno // YKNO 358 } ; 359 360 try { 361 DBUtil.dbExecute( GE50_UPDATE,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 362 } 363 catch( final RuntimeException ex ) { 364 final String errMsg = "完成フラグ設定に失敗しました。" + CR 365 + " SQL=" + GE50_UPDATE + CR 366 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 367 LogWriter.log( errMsg ); 368 LogWriter.log( ex ); 369 } 370 } 371 372 /** 373 * エラー発生時に、エラーメッセージを登録します。 374 * 内部変数にセットされている、systemId と ykno を利用して、データ登録を行います。 375 * 376 * @og.rev 3.8.5.3 (2006/06/30) エラーメッセージを 4000Byte以下にする。 377 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 378 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対策 379 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 380 * @og.rev 5.10.0.0 (2018/06/08) メール不要フラグ(fgNoMl)の判定を追加。 381 * @og.rev 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 382 * 383 * @param inErrMsg エラーメッセージ 384 */ 385 public void insertErrorGE56( final String inErrMsg ) { 386 387 String outErrMsg = (inErrMsg == null) ? "" : inErrMsg.trim(); 388 if( outErrMsg.length() > 2000 ) { 389 final String code = HybsSystem.sys( "DB_ENCODE" ); 390 final byte[] byteValue = StringUtil.makeByte( outErrMsg,code ); 391 if( byteValue.length > 4000 ) { 392 outErrMsg = StringUtil.makeString( byteValue,0,4000,code ); 393 } 394 } 395 final String DYSET = DateSet.getDate( "yyyyMMddHHmmss" ) ; // 6.4.2.0 (2016/01/29) 396 397 final String[] args = new String[] { 398 systemId, 399 ykno, 400 outErrMsg , // ERRMSG 401 DYSET, // DYSET 402 DYSET, // DYUPD 403 USRSET, // USRSET 404 USRSET, // USRUPD 405 PGUPD }; // PGUPD 406 407 try { 408 DBUtil.dbExecute( GE56_ERRMSG,args,appInfo, DBID ); // 5.5.5.1 (2012/08/07) 409 } 410 catch( final RuntimeException ex ) { 411 final String errMsg = "エラーメッセージテーブルセットに失敗しました。" + CR 412 + " SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "]" + CR 413 + " SQL=" + GE56_ERRMSG + CR 414 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 415 LogWriter.log( errMsg ); 416 LogWriter.log( ex ); 417 } 418 419// sendMail( outErrMsg ); // 3.8.0.4 (2005/08/08) 420 // 5.10.0.0 (2018/06/08) MOD メール不要フラグが1以外の場合、メールを送信します 421// if( !"1".equals(fgnoml) ) { 422 // 6.9.8.1 (2018/06/11) 帳票エラーメールの改修(メール不要フラグ=trueで不要、falseが必要) 423 if( ! fgnoml ) { 424 sendMail( outErrMsg ); // 3.8.0.4 (2005/08/08) 425 } 426 } 427 428 /** 429 * substring を補完する簡易メソッド 430 * 431 * substring で、文字をカットする場合、文字列長が、カットする文字数より 432 * 長い必要があります。ここでは、最大長に制限をかけることが目的なので 433 * 入力文字長が指定文字数より小さいケースがあります。そのチェックを 434 * 簡易的に実行できるように、このメソッドで処理します。 435 * 436 * @param inStr 入力文字 437 * @param len 最大文字数 438 * @param defVal NULL 時の初期値 439 * 440 * @return 指定の文字数でカットされた新しい文字列 441 */ 442 private String substr( final String inStr, final int len, final String defVal ) { 443 return inStr == null 444 ? defVal 445 : inStr.length() > len 446 ? inStr.substring( 0,len ) 447 : inStr ; 448 } 449 450 /** 451 * エラー情報のメール送信を行います。 452 * エラーメールは、システムパラメータ の COMMON_MAIL_SERVER(メールサーバー)と 453 * ERROR_MAIL_FROM_USER(エラーメール発信元)と、ERROR_MAIL_TO_USERS(エラーメール受信者) 454 * がすべて設定されている場合に、送信されます。 455 * 456 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 457 * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み 458 * 459 * @param inErrMsg エラーメッセージ 460 */ 461 private void sendMail( final String inErrMsg ) { 462 463 final String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 464 final String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" ); 465 final String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) ); 466 final String match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" ); // 5.7.0.4 (2013/11/29) 467 468 if( host != null && from != null && to.length > 0 ) { 469 if( match_txt == null || match_txt.isEmpty() 470 || listid == null || listid.isEmpty() 471 || listid.matches( match_txt ) ){ // 5.7.0.4 (2013/11/29) 472 // 3.8.5.0 (2006/03/02) DMN_NAME、DMN_HOST 追加 473 // 5.7.0.4 (2013/11/29) listid追加 474 final String subject = "SYSTEM_ID=[" + systemId + "] , YKNO=[" + ykno + "] , " 475 + "DMN_NAME=[" + DMN_NAME + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]" 476 + "LISTID=[" + listid +"]"; 477 try { 478 final MailTX tx = new MailTX( host ); 479 // tx.setHost( host ); 480 tx.setFrom( from ); 481 tx.setTo( to ); 482 tx.setSubject( "帳票エラー:" + subject ); 483 tx.setMessage( inErrMsg ); 484 tx.sendmail(); 485 } 486 catch( final Throwable ex ) { 487 final String errMsg = "エラー時メール送信に失敗しました。" + CR 488 + " SUBJECT:" + subject + CR 489 + " HOST:" + host + CR 490 + " FROM:" + from + CR 491 + " TO:" + Arrays.toString( to ) + CR 492 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 493 LogWriter.log( errMsg ); 494 LogWriter.log( ex ); 495 } 496 } 497 } 498 } 499}