001package org.opengion.hayabusa.queue; 002 003import org.opengion.fukurou.db.ConnectionFactory; 004import org.opengion.fukurou.db.DBFunctionName; 005import org.opengion.fukurou.db.DBUtil; 006import org.opengion.fukurou.db.Transaction; 007import org.opengion.fukurou.db.TransactionReal; 008import org.opengion.fukurou.util.ApplicationInfo; 009import org.opengion.fukurou.util.StringUtil; 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 * @og.rev 5.10.16.1 (2019/10/11) fukurou利用に変更 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") ; 062// PGUPD = StringUtils.defaultString( prpupd, "UNNONE" ) ; 063// DMN_NAME = StringUtils.defaultString( dmnName, "UNNONE" ) ; 064 USRSET = StringUtil.nval( usrset, "UNKNOWN" ); 065 PGUPD = StringUtil.nval( prpupd, "UNKNOWN" ); 066 DMN_NAME = StringUtil.nval( dmnName, "UNKNOWN" ); 067 068 069 if (USE_DB_APPLICATION_INFO) { 070 appInfo = new ApplicationInfo(); 071 072 // ユーザーID,IPアドレス,ホスト名 073 appInfo.setClientInfo(USRSET, HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME); 074 // 画面ID,操作,プログラムID 075 appInfo.setModuleInfo("DBAccessQueue", null, DMN_NAME); 076 } 077 else { 078 appInfo = null; 079 } 080 } 081 082 /** 083 * GE65検索 084 * GE65の処理対象リストを取得します。 085 * 086 * @return 処理対象リスト 087 */ 088 public String[][] selectGE65() { 089 String sql = "SELECT A.YKNO, A.QUEUEID, A.MESSAGE, A.SFDUPID, B.QUESYU, B.JMSURL FROM GE66 A" 090 + " INNER JOIN GE65 B ON A.SYSTEM_ID = B.SYSTEM_ID AND A.QUEUEID = B.QUEUEID AND B.FGJ = '1'" 091 + " WHERE A.SYSTEM_ID = ? AND A.FGKAN = '1' AND A.FGJ = '1'"; 092 093 String[][] vals = DBUtil.dbExecute(sql, new String[] {SYSTEM_ID}, appInfo, DBID); 094 return vals; 095 } 096 097 /** 098 * エラー状態に更新 099 * 完了フラグをエラー状態に更新して、 100 * エラー情報を格納します。 101 * 102 * @param ykno 要求番号 103 * @param errMsg エラーメッセージ 104 */ 105 public void updateGE66Error(String ykno, String errMsg) { 106 String updSql = "UPDATE GE66 SET FGKAN = ?, ERRMSG = ?" 107 + "WHERE SYSTEM_ID = ? AND FGJ = '1' AND YKNO = ?"; 108 DBUtil.dbExecute(updSql, new String[] { 109 FGKAN_ERROR, errMsg, SYSTEM_ID, ykno 110 }, appInfo, DBID); 111 } 112 113 /** 114 * 完了フラグの更新 115 * 完了フラグを指定された値に更新します。 116 * 117 * @param ykno 要求番号 118 * @param fgkan 完了フラグ 119 */ 120 public void updateGE66(String ykno, String fgkan) { 121 final String dyset = HybsSystem.getDate(DYSET_YMD); 122 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 * @return 処理番号 146 */ 147 public String generateSyoriNo() { 148 String syoriNo = ""; 149 150 Transaction tran = new TransactionReal( appInfo ); 151 152 // 処理番号生成 153 try { 154 DBFunctionName dbName = DBFunctionName.getDBName( ConnectionFactory.getDBName( DBID ) ); 155 syoriNo = Integer.toString(dbName.getSequence("GE68S01", tran, DBID)); 156 }finally { 157 tran.close(); 158 } 159 160 return syoriNo; 161 } 162 163 /** 164 * GE68(キュー受信結果テーブル)更新 165 * キュー受信結果テーブルを指定された完了状態に更新します。 166 * 167 * @param syno 処理番号 168 * @param fgkan 完了フラグ 169 */ 170 public void updateGE68(final String syno, final String fgkan) { 171 final String dyset = HybsSystem.getDate(DYSET_YMD); 172 173 final String sql = "UPDATE GE68 SET FGKAN = ?, DYUPD = ?, USRUPD = ?, PGUPD = ?" 174 + "WHERE FGJ = '1'" 175 + " AND SYSTEM_ID = ?" 176 + " AND SYNO = ?"; 177 178 String[] data = new String[] {fgkan, dyset, USRSET, PGUPD, SYSTEM_ID, syno}; 179 180 // sql実行 181 DBUtil.dbExecute(sql, data, appInfo, DBID); 182 } 183 184 /** 185 * GE68(キュー受信結果テーブル)登録 186 * キュー受信結果テーブルに受信データを登録します。 187 * 188 * @param queueNm キュー名 189 * @param syno 処理NO 190 * @param bizlogicId bizLogicId 191 * @param messageText メッセージ 192 */ 193 public void insertGE68(final String queueNm, final String syno, final String bizlogicId 194 ,final String messageText) { 195 final String dyset = HybsSystem.getDate(DYSET_YMD); 196 final String sql = "INSERT INTO GE68(SYSTEM_ID, QUEUEID, SYNO, BIZLOGICID, MESSAGE, FGKAN, FGJ," 197 + "DYSET, DYUPD, USRSET, USRUPD, PGSET, PGUPD)" 198 + " VALUES(?,?,?,?,?,?,'1'" 199 + ",?,?,?,?,?,?)"; 200 201 final String[] data = new String[] { 202 SYSTEM_ID, queueNm, syno, bizlogicId, messageText, DBAccessQueue.FGKAN_PROCESS 203 ,dyset, dyset, USRSET, USRSET, PGUPD, PGUPD 204 }; 205 206 // sql実行 207 DBUtil.dbExecute(sql, data, appInfo, DBID); 208 } 209 210 /** 211 * GE68(キュー受信結果テーブル)エラー更新 212 * キュー受信結果テーブルをエラー状態に更新します。 213 * 214 * @param syoriNo 処理NO 215 * @param errMsg エラーメッセージ 216 */ 217 public void updateGE68Error(String syoriNo, final String errMsg) { 218 // エラーテーブルに登録 219 final String ymd = HybsSystem.getDate(DYSET_YMD); 220 final String sql = "UPDATE GE68" 221 + " SET ERRMSG = ?, FGKAN = ?" 222 + " ,DYUPD = ?, USRUPD = ?, PGUPD = ?" 223 + " WHERE SYSTEM_ID = ? AND FGJ = '1' AND SYNO = ? "; 224 225 final String[] data = new String[] { errMsg // エラーメッセージ 226 ,DBAccessQueue.FGKAN_ERROR 227 ,ymd 228 ,USRSET 229 ,PGUPD 230 ,SYSTEM_ID 231 , syoriNo 232 }; 233 234 // sql実行 235 DBUtil.dbExecute(sql, data, appInfo, DBID); 236 } 237}