3.2 Legacy System (RDBMS) 데이터 연계
- 수집관리UI(http://localhost:8080/) 의 Agent 관리 > Agent 설정메뉴에서
을 클릭합니다.
저장 후에는 Adaptor 추가 등록 / 변경을 할 수 있습니다.
- Agent ID: 'M000000003'을 입력합니다.(10자내 입력)
- Agent 명: '레가시 테스트'을 입력합니다.
- 사용여부: '사용'를 선택합니다.
- 각 항목을 작성한 후 저장버튼을 클릭합니다.
Agent설정 화면에서 저장 후 Adaptor 추가 등록/변경 화면에서
을 클릭합니다.
- Adaptor ID: 'pocLegacyWeather'를 입력합니다.
- Adaptor 명: '레가시 테스트'을 입력합니다.
- Platform 유형: 'Legacy Platform'을 선택합니다.
- 각 항목을 작성한 후 저장버튼을 클릭합니다.
아답터_등록 후 화면 목록에서 Adaptor ID 열에서 pocLegacyWeather를 클릭 하면 Instance 관리 화면으로 이동합니다.
Instance 관리 화면에서
클릭합니다.
- 인스턴스명: '레가시 테스트'를 입력합니다.
- 데이터모델 변환: '변환'을 선택합니다. 변환은 Web 에서 직접 코딩을 하여 데이터를 컨버팅 합니다. 미변환은 기 제공된 Java Class 를 이용합니다.
- Adpator 유형: '성남시 레가시 기상 테스트'을 선택합니다. Adaptor 유형 관리 메뉴에서 등록된 유형을 선택할 수 있습니다. 유형을 선택하면 인스턴스 상세 항목이 표시됩니다.
- 사용여부: '사용'을 선택합니다.
- 각 항목을 작성한 후 저장버튼을 클릭합니다.
인스턴스 등록 필수 정보
- DATASET_ID: 'poclegacyWeather'를 입력합니다. City Data Hub 시스템에서 정의한 데이터셋 아이디를 입력합니다.
- MODEL_ID: 'WeatherObserved'를 입력합니다. City Data Hub 시스템에서 정의한 모델 아이디를 입력합니다.
- INVOKE_CLASS: 'com.cityhub.adapter.convex.ConvLegacyWeather' 를 입력합니다. 기 제공된 클래스 파일이며 여기서는 데이터모델 변환관리를 이용합니다.
- CONN_TERM: '3600'를 입력합니다. 초단위이며 1시간(60*60) 단위로 데이터를 가져옵니다.
- DB_DRIVER_CLASS_NAME: org.postgresql.Driver를 입력합니다., DATABASE JDBC Driver 입니다. 여기서는 postgresql을 예시롤 사용했습니다. 각 DB 벤더에 맞게 입력하시면 다양한 DB의 데이터를 가지고 올 수 있습니다.
- DB_JDBC_URL: jdbc:postgresql://localhost:5432/postgres, JDBC 연결 문자열 입니다. 여기서는 postgresql jdbc 연결문자열을 예시로 사용했습니다.
- DB_USERNAME: postgres, 연결하고자 하는 디비의 아이디를 입력합니다.
- DB_PASSWORD: pine1234, 연결하고자 하는 디비의 패스워드를 입력합니다.
인스턴스 데이터 메타정보
- query:를 입력합니다. City Data Hub 시스템에 적재할 원천데이터를 가지고 오기 위한 쿼리를 작성하여 데이터를 가져옵니다. 등록된 쿼리는 예시이며 갱신주기가 한시간이기 때문에 현시간으로부터 1시간 이전 데이터를 가지고 오게끔 쿼리를 작성하였습니다.
select adapter_id, step, data_id,id, length,adapter_type
from public.connectivity_log
where first_create_dt between now() - interval '1 hour' and now()쿼리예시 화면
- id: 'urn:datahub:legacyWeather:4798273'를 입력합니다. 예시로 입력한 식별키이며 실 표준모델의 식별키 규칙에 맞게 작성하시면 됩니다.
- 레가시 테스트인스턴스를 저장합니다.
인스턴스를 저장 후에 데이터모델 변환관리를 클릭하여 데이터 모델을 직접 작성합니다. 데이터변환모델을 작성 한 후 컴파일 확인까지 정상 처리 되었으면 닫기을 클릭하여 변환관리 화면을 빠져 나옵니다. 인스턴스 ID 인 'poclegacyWeather_001'을 클릭하여
을 클릭하여 설정을 적용합니다.
레가시 데이터 샘플 예제 전문입니다.
@Override
public String doit(BasicDataSource datasource) {
List<Map<String, Object>> modelList = new LinkedList<>();
JSONObject modelTemplate = templateItem.getJSONObject(ConfItem.getString("modelId"));
String id = ConfItem.getString("id");
String sql = ConfItem.getString("query");
try (PreparedStatement pstmt = datasource.getConnection().prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
){
while (rs.next()) {
// 표준모델 JsonUtil , JSON 항목에 접근을 쉽게 하기 위한 유틸리티
JsonUtil jsonModel = new JsonUtil(modelTemplate.toString());
//소스코드 첨가부분 - 시작
// 예제 부분이며 시작-종료 까지 내용을 제거 한 후 표준 모델에 맞게 구현
jsonModel.put("id", id);
jsonModel.put("eventType.value", rs.getString("EVT_ID"));
jsonModel.put("eventName.value", rs.getString("EVT_DTL"));
//소스코드 첨가부분 - 종료
modelList.add(jsonModel.toMap());
bufferCount++;
// 레가시 같은 경우 대량 처리가 많아서 버퍼를 이용해서 처리, bufferLength 의 크기는 1000
if (bufferCount == bufferLength) {
// 데이터허브에 전송
sendEvent(modelList, ConfItem.getString("datasetId"));
bufferCount = 0;
// 초기화
modelList = new LinkedList<>();
}
}
// 처리되지 않은 나머지 부분 처리
if (modelList.size() < bufferLength) {
// 데이터허브에 전송
sendEvent(modelList, ConfItem.getString("datasetId"));
}
} catch (SQLException e) {
toLogger(SocketCode.DATA_CONVERT_FAIL, ConfItem.getString("id_prefix"), e.getMessage());
log.error("Exception : " + ExceptionUtils.getStackTrace(e));
} catch (Exception e) {
toLogger(SocketCode.DATA_CONVERT_FAIL, ConfItem.getString("id_prefix"), e.getMessage());
log.error("Exception : " + ExceptionUtils.getStackTrace(e));
}
return "Success";
} // end of doit
변환 클래스 부분에서 위에 해당하는 영역에 DB에서 읽어온 데이터를 표준 모델에 맞게 코딩을 합니다. 작성 완료 후 컴파일 확인 을 클릭하여 컴파일 결과를 하단 회색 박스에서 확인합니다.
- Agent관리 > Agent 운영 메뉴에서 Agent ID -> M000000003 을 클릭합니다. 해당 아답터의 시작/종료 ,모니터링이 가능합니다.