001package org.opengion.hayabusa.queue; 002 003// import org.apache.commons.lang3.StringUtils; // 7.0.6.0 (2019/10/07) 004import org.opengion.fukurou.db.ConnectionFactory; 005import org.opengion.fukurou.db.DBFunctionName; 006import org.opengion.fukurou.db.DBUtil; 007import org.opengion.fukurou.db.Transaction; 008import org.opengion.fukurou.db.TransactionReal; 009// import org.opengion.fukurou.util.ApplicationInfo; 010import org.opengion.fukurou.db.ApplicationInfo; // 7.0.6.0 (2019/10/07) util → db に移動のため 011import org.opengion.hayabusa.common.HybsSystem; 012import org.opengion.fukurou.system.DateSet; // 7.0.6.0 (2019/10/07) HybsSystem.getDate( String ) 013 014/** 015 * キュー処理用のDBアクセスクラス 016 * キューの受信と送信処理で、 017 * データベースにアクセスして処理を行います。 018 * 019 * 実際のMQ,SQSとの通信そのものはfukurouで行います。 020 * 021 * @og.group メッセージ連携 022 * 023 * @og.rev 5.10.15.2 (2019/09/20) 新規作成 024 * 025 * @version 5 026 * @author oota 027 * @since JDK7 028 * 029 */ 030public class DBAccessQueue { 031 private static final String DYSET_YMD = "yyyyMMddHHmmss"; 032 private static ApplicationInfo appInfo = null; 033 private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); 034 private final String SYSTEM_ID; 035 private final String USRSET; 036 private final String PGUPD; 037 private final String DMN_NAME; 038 039 // 処理中 040 public static final String FGKAN_PROCESS = "2"; 041 // 完了 042 public static final String FGKAN_END = "3"; 043 // エラー 044 public static final String FGKAN_ERROR = "4"; 045 046 /** コネクションにアプリケーション情報を追記するかどうか指定 */ 047 // パラメータ編集必要 048 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 049 050 /** 051 * コンストラクター 052 * 初期処理を行います。 053 * 054 * @param systemid システムID 055 * @param usrset ユーザID 056 * @param prpupd プログラムID 057 * @param dmnName デーモン名 058 */ 059 public DBAccessQueue(final String systemid, final String usrset, final String prpupd, final String dmnName) { 060 SYSTEM_ID = systemid; 061// USRSET = StringUtils.defaultString(usrset, "UNNONE") ; // 7.0.6.0 (2019/10/07) 062// PGUPD = StringUtils.defaultString( prpupd, "UNNONE" ) ; // 7.0.6.0 (2019/10/07) 063// DMN_NAME = StringUtils.defaultString( dmnName, "UNNONE" ) ; // 7.0.6.0 (2019/10/07) 064 USRSET = usrset == null ? "UNNONE" : usrset ; // "" の時、"" を返す必要がある。StringUtil.nval は、"" と null を同値に扱う 065 PGUPD = prpupd == null ? "UNNONE" : prpupd ; 066 DMN_NAME = dmnName == null ? "UNNONE" : dmnName ; 067 068 if (USE_DB_APPLICATION_INFO) { 069 appInfo = new ApplicationInfo(); 070 071 // ユーザーID,IPアドレス,ホスト名 072 appInfo.setClientInfo(USRSET, HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME); 073 // 画面ID,操作,プログラムID 074 appInfo.setModuleInfo("DBAccessQueue", null, DMN_NAME); 075 } 076 else { 077 appInfo = null; 078 } 079 } 080 081 /** 082 * GE65検索 083 * GE65の処理対象リストを取得します。 084 * 085 * @return 処理対象リスト 086 */ 087 public String[][] selectGE65() { 088 final String sql = "SELECT A.YKNO, A.QUEUEID, A.MESSAGE, A.SFDUPID, B.QUESYU, B.JMSURL FROM GE66 A" 089 + " INNER JOIN GE65 B ON A.SYSTEM_ID = B.SYSTEM_ID AND A.QUEUEID = B.QUEUEID AND B.FGJ = '1'" 090 + " WHERE A.SYSTEM_ID = ? AND A.FGKAN = '1' AND A.FGJ = '1'"; 091 092 final String[][] vals = DBUtil.dbExecute(sql, new String[] {SYSTEM_ID}, appInfo, DBID); 093 return vals; 094 } 095 096 /** 097 * エラー状態に更新 098 * 完了フラグをエラー状態に更新して、 099 * エラー情報を格納します。 100 * 101 * @param ykno 要求番号 102 * @param errMsg エラーメッセージ 103 */ 104 public void updateGE66Error(final String ykno, final String errMsg) { 105 final String updSql = "UPDATE GE66 SET FGKAN = ?, ERRMSG = ?" 106 + "WHERE SYSTEM_ID = ? AND FGJ = '1' AND YKNO = ?"; 107 DBUtil.dbExecute(updSql, new String[] { 108 FGKAN_ERROR, errMsg, SYSTEM_ID, ykno 109 }, appInfo, DBID); 110 } 111 112 /** 113 * 完了フラグの更新 114 * 完了フラグを指定された値に更新します。 115 * 116 * @param ykno 要求番号 117 * @param fgkan 完了フラグ 118 */ 119 public void updateGE66(final String ykno, final String fgkan) { 120// final String dyset = HybsSystem.getDate(DYSET_YMD); 121 final String dyset = DateSet.getDate(DYSET_YMD); // 7.0.6.0 (2019/10/07) 122 final String updSql = "UPDATE GE66 SET FGKAN = ?, DYUPD = ?, USRUPD = ?, PGUPD = ?" 123 + "WHERE SYSTEM_ID = ? AND FGJ = '1' AND YKNO = ?"; 124 DBUtil.dbExecute(updSql, new String[] { 125 fgkan, dyset, USRSET, PGUPD, SYSTEM_ID, ykno}, appInfo, DBID); 126 } 127 /** 128 * 受信管理データ取得 129 * 受信管理テーブルから、キューIDとbizlogic名を取得します。 130 * 131 * @return 受信管理リスト 132 */ 133 public String[][] setlectGE67() { 134 // 対象 キュー名(グループ名)とbizlogic名の取得処理 135 final String sql = "SELECT QUEUEID, BIZLOGICID FROM GE67" 136 + " WHERE SYSTEM_ID = ? AND FGJ = '1'"; 137 final String[][] vals = DBUtil.dbExecute(sql, new String[] {SYSTEM_ID}, appInfo, DBID); 138 return vals; 139 } 140 141 /** 142 * 処理番号生成 143 * GE68_SEQUENCEからシーケンス番号を生成します。 144 * 145 * @og.rev 7.0.6.4 (2019/11/29) TransactionRealのclose漏れ対応 146 * 147 * @return 処理番号 148 */ 149 public String generateSyoriNo() { 150 String syoriNo = ""; 151 152// final Transaction tran = new TransactionReal( appInfo ); 153 154 // 処理番号生成 155 try( final Transaction tran = new TransactionReal( appInfo ) ) { // 7.0.6.4 (2019/11/29) try-with-resources文 156// try { 157 final DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) ); 158 syoriNo = Integer.toString(dbName.getSequence("GE68S01", tran, DBID)); 159// }finally { 160// tran.close(); 161 } 162 163 return syoriNo; 164 } 165 166 /** 167 * GE68(キュー受信結果テーブル)更新 168 * キュー受信結果テーブルを指定された完了状態に更新します。 169 * 170 * @param syno 処理番号 171 * @param fgkan 完了フラグ 172 */ 173 public void updateGE68(final String syno, final String fgkan) { 174// final String dyset = HybsSystem.getDate(DYSET_YMD); 175 final String dyset = DateSet.getDate(DYSET_YMD); // 7.0.6.0 (2019/10/07) 176 177 final String sql = "UPDATE GE68 SET FGKAN = ?, DYUPD = ?, USRUPD = ?, PGUPD = ?" 178 + "WHERE FGJ = '1'" 179 + " AND SYSTEM_ID = ?" 180 + " AND SYNO = ?"; 181 182 final String[] data = new String[] {fgkan, dyset, USRSET, PGUPD, SYSTEM_ID, syno}; 183 184 // sql実行 185 DBUtil.dbExecute(sql, data, appInfo, DBID); 186 } 187 188 /** 189 * GE68(キュー受信結果テーブル)登録 190 * キュー受信結果テーブルに受信データを登録します。 191 * 192 * @param queueNm キュー名 193 * @param syno 処理NO 194 * @param bizlogicId ビズロジックID 195 * @param messageText メッセージ 196 */ 197 public void insertGE68(final String queueNm, final String syno, final String bizlogicId 198 ,final String messageText) { 199// final String dyset = HybsSystem.getDate(DYSET_YMD); 200 final String dyset = DateSet.getDate(DYSET_YMD); // 7.0.6.0 (2019/10/07) 201 202 final String sql = "INSERT INTO GE68(SYSTEM_ID, QUEUEID, SYNO, BIZLOGICID, MESSAGE, FGKAN, FGJ," 203 + "DYSET, DYUPD, USRSET, USRUPD, PGSET, PGUPD)" 204 + " VALUES(?,?,?,?,?,?,'1'" 205 + ",?,?,?,?,?,?)"; 206 207 final String[] data = new String[] { 208 SYSTEM_ID, queueNm, syno, bizlogicId, messageText, DBAccessQueue.FGKAN_PROCESS 209 ,dyset, dyset, USRSET, USRSET, PGUPD, PGUPD 210 }; 211 212 // sql実行 213 DBUtil.dbExecute(sql, data, appInfo, DBID); 214 } 215 216 /** 217 * GE68(キュー受信結果テーブル)エラー更新 218 * キュー受信結果テーブルをエラー状態に更新します。 219 * 220 * @param syoriNo 処理NO 221 * @param errMsg エラーメッセージ 222 */ 223 public void updateGE68Error(final String syoriNo, final String errMsg) { 224 // エラーテーブルに登録 225// final String dyset = HybsSystem.getDate(DYSET_YMD); 226 final String dyset = DateSet.getDate(DYSET_YMD); // 7.0.6.0 (2019/10/07) 227 228 final String sql = "UPDATE GE68" 229 + " SET ERRMSG = ?, FGKAN = ?" 230 + " ,DYUPD = ?, USRUPD = ?, PGUPD = ?" 231 + " WHERE SYSTEM_ID = ? AND FGJ = '1' AND SYNO = ? "; 232 233 final String[] data = new String[] { 234 errMsg // エラーメッセージ 235 , DBAccessQueue.FGKAN_ERROR 236 , dyset 237 , USRSET 238 , PGUPD 239 , SYSTEM_ID 240 , syoriNo 241 }; 242 243 // sql実行 244 DBUtil.dbExecute(sql, data, appInfo, DBID); 245 } 246}