메시지 수신 처리 오류 수정

cubrid db 접속 오류 수정
전송 후 SQL 처리 기능 추가
main
semin.baek 9 months ago
parent 7b639a553d
commit 865cb30cb3

@ -21,8 +21,17 @@ configurations {
repositories { repositories {
mavenCentral() mavenCentral()
maven {
url 'https://maven.cubrid.org'
} }
}
/*
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
</dependency>
*/
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-web'
@ -34,6 +43,8 @@ dependencies {
implementation 'com.mysql:mysql-connector-j' implementation 'com.mysql:mysql-connector-j'
implementation 'com.oracle.database.jdbc:ojdbc11' implementation 'com.oracle.database.jdbc:ojdbc11'
implementation 'org.mariadb.jdbc:mariadb-java-client' implementation 'org.mariadb.jdbc:mariadb-java-client'
implementation 'cubrid:cubrid-jdbc:11.3.0.0047'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.4' testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.4'

@ -4,10 +4,34 @@
<select id="selectTtoBd10" resultType="map"> <select id="selectTtoBd10" resultType="map">
<![CDATA[ <![CDATA[
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
FROM (
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
, ROW_NUMBER() OVER (ORDER BY BLDG_MNG_NO) AS R_NUM
FROM TTO_BD FROM TTO_BD
WHERE 1 = 1 WHERE 1 = 1
AND TRANSFER_YN = 'N' AND TRANSFER_YN = 'N'
AND ROWNUM < 11 )
WHERE R_NUM BETWEEN 1 AND 10
]]> ]]>
</select> </select>
<update id="updateTtoBd10TransferDone">
<![CDATA[
UPDATE TTO_BD
SET TRANSFER_YN = 'Y'
, TRANSFER_DATE = SYSDATE
WHERE 1 = 1
AND BLDG_MNG_NO IN (
SELECT BLDG_MNG_NO
FROM (
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
, ROW_NUMBER() OVER (ORDER BY BLDG_MNG_NO) AS R_NUM
FROM TTO_BD
WHERE 1 = 1
AND TRANSFER_YN = 'N'
)
WHERE R_NUM BETWEEN 1 AND 10
)
]]>
</update>
</mapper> </mapper>

@ -5,7 +5,7 @@
INSERT INTO TTO_BD ( INSERT INTO TTO_BD (
STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
) )
VALEUS ( VALUES (
#{STDG_CD}, #{CTPV_NM}, #{SGG_NM}, #{STTY_EMD_NM}, #{STLI_NM}, #{MTN_YN}, #{LOTNO_MNO}, #{LOTNO_SNO}, #{ROAD_NM_CD}, #{ROAD_NM}, #{UDGD_YN}, #{BMNO}, #{BSNO}, #{BDRG_BLDG_NM}, #{DTL_BLDG_NM}, #{BLDG_MNG_NO}, #{EMD_SN}, #{DONG_CD}, #{DONG_NM}, #{ZIP}, #{ZIP_SN}, #{BULK_DLDTN_NM}, #{MVMN_RSN_CD}, #{ANCMNT_YMD}, #{CHG_BFR_ROAD_NM_ADDR}, #{SGG_BLDG_NM}, #{APTCPX_YN}, #{BSCS_ZONE_NO}, #{DADDR_YN}, #{RMRK1}, #{RMRK2}, 'Y', SYSDATE #{STDG_CD}, #{CTPV_NM}, #{SGG_NM}, #{STTY_EMD_NM}, #{STLI_NM}, #{MTN_YN}, #{LOTNO_MNO}, #{LOTNO_SNO}, #{ROAD_NM_CD}, #{ROAD_NM}, #{UDGD_YN}, #{BMNO}, #{BSNO}, #{BDRG_BLDG_NM}, #{DTL_BLDG_NM}, #{BLDG_MNG_NO}, #{EMD_SN}, #{DONG_CD}, #{DONG_NM}, #{ZIP}, #{ZIP_SN}, #{BULK_DLDTN_NM}, #{MVMN_RSN_CD}, #{ANCMNT_YMD}, #{CHG_BFR_ROAD_NM_ADDR}, #{SGG_BLDG_NM}, #{APTCPX_YN}, #{BSCS_ZONE_NO}, #{DADDR_YN}, #{RMRK1}, #{RMRK2}, 'Y', SYSDATE
) )
</insert> </insert>

@ -0,0 +1,40 @@
{
"description": "개발PC에서 실행함. bd-test-cubrid 와 연결. 메시지 수신 후 cubrid 저장",
"myHostId": "bd-test-cubrid",
"myListenPort": 17801,
"knownAgentList": [
{
"hostId": "bd-test-oracle",
"hostName": "mkami.foxsoft.kr",
"listenPort": 17801,
"dropBoxIdList": []
}
],
"dataSourceConfig": [
{
"dataSourceId": "cubrid",
"driverClassName": "cubrid.jdbc.driver.CUBRIDDriver",
"url": "jdbc:cubrid:14.63.185.105:33000:amif:ami::",
"username": "ami",
"password": "fox12#$%"
}
],
"sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml"
],
"dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure",
"dropBoxList": [
{
"dropBoxId": "db-bd-cubrid-save",
"taskType": "RECEIVE_DB_TO_DB_SAVE",
"dataSourceId": "cubrid",
"sqlId": "address.dropbox.cubrid.ttoBd.insertTtoBd"
}
]
},
"postman": [
]
}

@ -1,5 +1,5 @@
{ {
"description": "워크스테이션에서 실행함. 개발PC의 agent와 연결. 메시지 수신 후 cubrid 저장", "description": "워크스테이션에서 실행함. bd-test-oracle 와 연결. 메시지 수신 후 cubrid 저장",
"myHostId": "bd-test-cubrid", "myHostId": "bd-test-cubrid",
"myListenPort": 17801, "myListenPort": 17801,
"knownAgentList": [ "knownAgentList": [

@ -0,0 +1,55 @@
{
"description": "개발PC에서 실행함. 웍스테이션 에이전트(bd-test-cubrid)와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함",
"myHostId": "bd-test-oracle",
"myListenPort": 16801,
"knownAgentList": [
{
"hostId": "bd-test-cubrid",
"hostName": "mkami.foxsoft.kr",
"listenPort": 17801,
"dropBoxIdList": [
"drop-tto-db"
]
}
],
"dataSourceConfig": [
{
"dataSourceId": "ds-oracle",
"driverClassName": "oracle.jdbc.driver.OracleDriver",
"url": "jdbc:oracle:thin:@mkami.foxsoft.kr:1521:xe",
"username": "ami",
"password": "fox12#$%"
}
],
"sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml"
],
"dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure",
"dropBoxList": [
]
},
"postman": [
{
"postmanId": "postman-oracle-tto-bd-10",
"taskType": "DB_READ_THEN_SEND",
"action": {
"type": "SCHEDULED",
"cron": "0 0/1 * * * *"
},
"message": {
"messageType": "TRANSFER_DB_TO_DB",
"dataSourceId": "ds-oracle",
"sqlId": "address.postman.oracle.ttoBd.selectTtoBd10"
},
"recipientHostId": "bd-test-cubrid",
"recipientDropBoxId": "db-bd-cubrid-save",
"routingHostIdList": [
"bd-test-oracle",
"bd-test-cubrid"
]
}
]
}

@ -1,15 +1,13 @@
{ {
"description": "개발PC에서 실행함. 웍스테이션 에이전트(bd-test-cubrid)와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함", "description": "워크스테이션에서 실행함. bd-test-cubrid 와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함",
"myHostId": "bd-test-oracle", "myHostId": "bd-test-oracle",
"myListenPort": 16801, "myListenPort": 17801,
"knownAgentList": [ "knownAgentList": [
{ {
"hostId": "bd-test-cubrid", "hostId": "bd-test-cubrid",
"hostName": "mkami.foxsoft.kr", "hostName": "192.168.0.16",
"listenPort": 17801, "listenPort": 17801,
"dropBoxIdList": [ "dropBoxIdList": ["db-bd-cubrid-save"]
"drop-tto-db"
]
} }
], ],
"dataSourceConfig": [ "dataSourceConfig": [
@ -22,12 +20,12 @@
} }
], ],
"sqlMapperLocations": [ "sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml" "/home/dfxagent/agent/conf/mappers/**/*.xml"
], ],
"dropBox": { "dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received", "receivedMessageStorageRoot": "/home/dfxagent/agent/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed", "processedMessageStorageRoot": "/home/dfxagent/agent/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure", "failureMessageStorageRoot": "/home/dfxagent/agent/messages/failure",
"dropBoxList": [ "dropBoxList": [
] ]
}, },
@ -42,7 +40,8 @@
"message": { "message": {
"messageType": "TRANSFER_DB_TO_DB", "messageType": "TRANSFER_DB_TO_DB",
"dataSourceId": "ds-oracle", "dataSourceId": "ds-oracle",
"sqlId": "address.postman.oracle.ttoBd.selectTtoBd10" "sqlId": "address.postman.oracle.ttoBd.selectTtoBd10",
"postProcessingSqlId": "address.postman.oracle.ttoBd.updateTtoBd10TransferDone"
}, },
"recipientHostId": "bd-test-cubrid", "recipientHostId": "bd-test-cubrid",
"recipientDropBoxId": "db-bd-cubrid-save", "recipientDropBoxId": "db-bd-cubrid-save",

@ -78,6 +78,7 @@ public class AgentConfigDto {
private String metaDataDataSourceId; private String metaDataDataSourceId;
private String metaDataSqlId; private String metaDataSqlId;
private String metaDropBoxId; private String metaDropBoxId;
private String postProcessingSqlId;
} }
public static enum ActionType { public static enum ActionType {

@ -8,11 +8,13 @@ import com.bsmlab.dfx.agent.support.exception.NullMessageException;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.*; import java.util.*;
@Slf4j
public class MessageUtils { public class MessageUtils {
private MessageUtils() {}; private MessageUtils() {};
@ -120,13 +122,11 @@ public class MessageUtils {
if(map.get("data") == null) { if(map.get("data") == null) {
throw new InCompleteMessageException("data 엘리먼트를 찾을 수 없습니다."); throw new InCompleteMessageException("data 엘리먼트를 찾을 수 없습니다.");
} }
else if(!(map.get("data") instanceof List)) { else if(!(map.get("data") instanceof String)) {
throw new InCompleteMessageException("data 엘리먼트의 데이터가 객체타입이 아닙니다."); throw new InCompleteMessageException("data 엘리먼트의 데이터가 문자 타입이 아닙니다.");
} }
else { else {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) map.get("data"); dataString = String.valueOf(map.get("data"));
dataString = objectMapper.writeValueAsString(dataList);
} }
receiveMessageDto = ReceiveMessageDto.builder() receiveMessageDto = ReceiveMessageDto.builder()
.senderHostId(senderHostId).senderTimestamp(senderTimestamp) .senderHostId(senderHostId).senderTimestamp(senderTimestamp)

@ -76,7 +76,7 @@ public class DropBoxService {
} }
/** /**
* (queue) . * (queue) .
* @return ReceiveMessageDto serialize * @return ReceiveMessageDto serialize
*/ */
public String poll() { public String poll() {

@ -96,6 +96,10 @@ public class PostmanSchedulerService {
if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) { if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) {
throw new DfxException(postman.getRecipientHostId() + "에게 전송하였으나 상대방이 수신하지 못하였습니다." + response); throw new DfxException(postman.getRecipientHostId() + "에게 전송하였으나 상대방이 수신하지 못하였습니다." + response);
} }
else {
String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId();
sqlExecuteService.update(dataSourceId, postProcessingSqlId, null);
}
} catch (JsonProcessingException e) { } catch (JsonProcessingException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} catch (DfxException e) { } catch (DfxException e) {

Loading…
Cancel
Save