From 865cb30cb3bc53c1f22f561443dbc294d48b7884 Mon Sep 17 00:00:00 2001 From: "semin.baek" Date: Wed, 30 Apr 2025 10:00:46 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=88=98?= =?UTF-8?q?=EC=8B=A0=20=EC=B2=98=EB=A6=AC=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20cubrid=20db=20=EC=A0=91=EC=86=8D=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95=20=EC=A0=84=EC=86=A1=20=ED=9B=84?= =?UTF-8?q?=20SQL=20=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 11 ++++ .../mapper-examples/address/address-read.xml | 32 +++++++++-- .../mapper-examples/address/address-write.xml | 2 +- .../dfxagent-bd-test-cubrid-local.json | 40 ++++++++++++++ .../dfxagent-bd-test-cubrid.json | 2 +- .../dfxagent-bd-test-oracle-local.json | 55 +++++++++++++++++++ .../dfxagent-bd-test-oracle.json | 21 ++++--- .../dfx/agent/config/AgentConfigDto.java | 1 + .../dfx/agent/support/MessageUtils.java | 10 ++-- .../agent/task/dropbox/DropBoxService.java | 2 +- .../task/postman/PostmanSchedulerService.java | 4 ++ 11 files changed, 157 insertions(+), 23 deletions(-) create mode 100644 src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json create mode 100644 src/docs/settings-examples/dfxagent-bd-test-oracle-local.json diff --git a/build.gradle b/build.gradle index f71e6b0..5cf2b9a 100644 --- a/build.gradle +++ b/build.gradle @@ -21,8 +21,17 @@ configurations { repositories { mavenCentral() + maven { + url 'https://maven.cubrid.org' + } } +/* + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4.1 + + */ dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' @@ -34,6 +43,8 @@ dependencies { implementation 'com.mysql:mysql-connector-j' implementation 'com.oracle.database.jdbc:ojdbc11' 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' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.4' diff --git a/src/docs/mapper-examples/address/address-read.xml b/src/docs/mapper-examples/address/address-read.xml index e6fac0e..378e2ef 100644 --- a/src/docs/mapper-examples/address/address-read.xml +++ b/src/docs/mapper-examples/address/address-read.xml @@ -4,10 +4,34 @@ + + + + diff --git a/src/docs/mapper-examples/address/address-write.xml b/src/docs/mapper-examples/address/address-write.xml index 954f839..7d072c6 100644 --- a/src/docs/mapper-examples/address/address-write.xml +++ b/src/docs/mapper-examples/address/address-write.xml @@ -5,7 +5,7 @@ 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 ) - 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 ) diff --git a/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json new file mode 100644 index 0000000..ce98daa --- /dev/null +++ b/src/docs/settings-examples/dfxagent-bd-test-cubrid-local.json @@ -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": [ + ] +} diff --git a/src/docs/settings-examples/dfxagent-bd-test-cubrid.json b/src/docs/settings-examples/dfxagent-bd-test-cubrid.json index 97dda05..db4275a 100644 --- a/src/docs/settings-examples/dfxagent-bd-test-cubrid.json +++ b/src/docs/settings-examples/dfxagent-bd-test-cubrid.json @@ -1,5 +1,5 @@ { - "description": "워크스테이션에서 실행함. 개발PC의 agent와 연결. 메시지 수신 후 cubrid 저장", + "description": "워크스테이션에서 실행함. bd-test-oracle 와 연결. 메시지 수신 후 cubrid 저장", "myHostId": "bd-test-cubrid", "myListenPort": 17801, "knownAgentList": [ diff --git a/src/docs/settings-examples/dfxagent-bd-test-oracle-local.json b/src/docs/settings-examples/dfxagent-bd-test-oracle-local.json new file mode 100644 index 0000000..b371f60 --- /dev/null +++ b/src/docs/settings-examples/dfxagent-bd-test-oracle-local.json @@ -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" + ] + } + ] +} \ No newline at end of file diff --git a/src/docs/settings-examples/dfxagent-bd-test-oracle.json b/src/docs/settings-examples/dfxagent-bd-test-oracle.json index b371f60..78de84c 100644 --- a/src/docs/settings-examples/dfxagent-bd-test-oracle.json +++ b/src/docs/settings-examples/dfxagent-bd-test-oracle.json @@ -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", - "myListenPort": 16801, + "myListenPort": 17801, "knownAgentList": [ { "hostId": "bd-test-cubrid", - "hostName": "mkami.foxsoft.kr", + "hostName": "192.168.0.16", "listenPort": 17801, - "dropBoxIdList": [ - "drop-tto-db" - ] + "dropBoxIdList": ["db-bd-cubrid-save"] } ], "dataSourceConfig": [ @@ -22,12 +20,12 @@ } ], "sqlMapperLocations": [ - "D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml" + "/home/dfxagent/agent/conf/mappers/**/*.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", + "receivedMessageStorageRoot": "/home/dfxagent/agent/messages/received", + "processedMessageStorageRoot": "/home/dfxagent/agent/messages/processed", + "failureMessageStorageRoot": "/home/dfxagent/agent/messages/failure", "dropBoxList": [ ] }, @@ -42,7 +40,8 @@ "message": { "messageType": "TRANSFER_DB_TO_DB", "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", "recipientDropBoxId": "db-bd-cubrid-save", diff --git a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java index 1ee71ec..df5b4cb 100644 --- a/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/config/AgentConfigDto.java @@ -78,6 +78,7 @@ public class AgentConfigDto { private String metaDataDataSourceId; private String metaDataSqlId; private String metaDropBoxId; + private String postProcessingSqlId; } public static enum ActionType { diff --git a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java index d6a66d0..81256ae 100644 --- a/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java +++ b/src/main/java/com/bsmlab/dfx/agent/support/MessageUtils.java @@ -8,11 +8,13 @@ import com.bsmlab.dfx.agent.support.exception.NullMessageException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.StringUtils; import java.util.*; +@Slf4j public class MessageUtils { private MessageUtils() {}; @@ -120,13 +122,11 @@ public class MessageUtils { if(map.get("data") == null) { throw new InCompleteMessageException("data 엘리먼트를 찾을 수 없습니다."); } - else if(!(map.get("data") instanceof List)) { - throw new InCompleteMessageException("data 엘리먼트의 데이터가 객체타입이 아닙니다."); + else if(!(map.get("data") instanceof String)) { + throw new InCompleteMessageException("data 엘리먼트의 데이터가 문자 타입이 아닙니다."); } else { - List> dataList = (List>) map.get("data"); - dataString = objectMapper.writeValueAsString(dataList); - + dataString = String.valueOf(map.get("data")); } receiveMessageDto = ReceiveMessageDto.builder() .senderHostId(senderHostId).senderTimestamp(senderTimestamp) diff --git a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java index 9b8e752..fa3d407 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/dropbox/DropBoxService.java @@ -76,7 +76,7 @@ public class DropBoxService { } /** - * 공유메모리(queue)의 파임 경로를 획득한다. + * 공유메모리(queue)의 파일 경로를 획득한다. * @return ReceiveMessageDto의 serialize 파일 경로 */ public String poll() { diff --git a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java index bcd6190..a864d13 100644 --- a/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java +++ b/src/main/java/com/bsmlab/dfx/agent/task/postman/PostmanSchedulerService.java @@ -96,6 +96,10 @@ public class PostmanSchedulerService { if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) { throw new DfxException(postman.getRecipientHostId() + "에게 전송하였으나 상대방이 수신하지 못하였습니다." + response); } + else { + String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId(); + sqlExecuteService.update(dataSourceId, postProcessingSqlId, null); + } } catch (JsonProcessingException e) { throw new RuntimeException(e); } catch (DfxException e) {