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