|
|
|
@ -41,6 +41,7 @@ public class PostmanSchedulerService {
|
|
|
|
private final SqlExecuteService sqlExecuteService;
|
|
|
|
private final SqlExecuteService sqlExecuteService;
|
|
|
|
private Map<String, ScheduledFuture<?>> scheduledFutureMap = new HashMap<>();
|
|
|
|
private Map<String, ScheduledFuture<?>> scheduledFutureMap = new HashMap<>();
|
|
|
|
private Map<String, AgentConfigDto.Postman> postmanMap = new HashMap<>();
|
|
|
|
private Map<String, AgentConfigDto.Postman> postmanMap = new HashMap<>();
|
|
|
|
|
|
|
|
private Map<String, String> sentMessageFileMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
private void startPostman(String postmanId) {
|
|
|
|
private void startPostman(String postmanId) {
|
|
|
|
AgentConfigDto.Postman postman = this.postmanMap.get(postmanId);
|
|
|
|
AgentConfigDto.Postman postman = this.postmanMap.get(postmanId);
|
|
|
|
@ -67,6 +68,56 @@ public class PostmanSchedulerService {
|
|
|
|
this.startPostman(postman.getPostmanId());
|
|
|
|
this.startPostman(postman.getPostmanId());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
this.findAndAddSentMessageFile(new File(agentConfigReader.getAgentConfigDto().getDropBoxConfig().getSentMessageStorageRoot()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void findAndAddSentMessageFile(File parentDirectory) {
|
|
|
|
|
|
|
|
File[] filesOnDirectory = parentDirectory.listFiles();
|
|
|
|
|
|
|
|
if(filesOnDirectory != null) {
|
|
|
|
|
|
|
|
for(File file : filesOnDirectory) {
|
|
|
|
|
|
|
|
if(file.canRead() && !".".equals(file.getName()) && !"..".equals(file.getName())) {
|
|
|
|
|
|
|
|
if(file.isFile() && !file.getName().contains("complete")) {
|
|
|
|
|
|
|
|
this.sentMessageFileMap.put(file.getName(), file.getAbsolutePath());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if(file.isDirectory()) {
|
|
|
|
|
|
|
|
findAndAddSentMessageFile(file);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* AckDto 수신 후 postProcessingSqlId 처리. 이후 sent 메시지 파일 이름 변경 .complete
|
|
|
|
|
|
|
|
* @param messageUuid : AckDto로 전달받은 messageUuid. sentMessageFileMap에 포함되어 있어야 함
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
|
|
|
|
public void makeCompleteSentMessage(String messageUuid) {
|
|
|
|
|
|
|
|
if(this.sentMessageFileMap.containsKey(messageUuid)) {
|
|
|
|
|
|
|
|
File sentMessageFile = new File(this.sentMessageFileMap.get(messageUuid));
|
|
|
|
|
|
|
|
if(sentMessageFile.exists()) {
|
|
|
|
|
|
|
|
try (ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(sentMessageFile))) {
|
|
|
|
|
|
|
|
ReceiveMessageDto receiveMessageDto = (ReceiveMessageDto)objectInputStream.readObject();
|
|
|
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
|
|
|
List<Map<String, Object>> dataMapList;
|
|
|
|
|
|
|
|
dataMapList = (List<Map<String, Object>>) objectMapper.readValue(receiveMessageDto.getData(), List.class);
|
|
|
|
|
|
|
|
AgentConfigDto.Postman postman = this.postmanMap.get(receiveMessageDto.getSenderPostmanId());
|
|
|
|
|
|
|
|
sqlExecuteService.update(postman.getMessage().getDataSourceId(), postman.getMessage().getPostProcessingSqlId(), dataMapList);
|
|
|
|
|
|
|
|
} catch (FileNotFoundException e) {
|
|
|
|
|
|
|
|
log.error("cannot find a file for sent message {}", sentMessageFile.getAbsolutePath());
|
|
|
|
|
|
|
|
log.error("{}", e, e);
|
|
|
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
|
|
|
log.error("cannot access a file for sent message {}", sentMessageFile.getAbsolutePath());
|
|
|
|
|
|
|
|
log.error("{}", e, e);
|
|
|
|
|
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
|
|
|
|
log.error("cannot translate a file for sent message {}", sentMessageFile.getAbsolutePath());
|
|
|
|
|
|
|
|
log.error("{}", e, e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
File completeMessageFile = new File(sentMessageFile.getAbsolutePath() + ".complete");
|
|
|
|
|
|
|
|
sentMessageFile.renameTo(completeMessageFile);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.sentMessageFileMap.remove(messageUuid);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void writeSentMessage(ReceiveMessageDto receiveMessageDto) {
|
|
|
|
private void writeSentMessage(ReceiveMessageDto receiveMessageDto) {
|
|
|
|
@ -81,6 +132,7 @@ public class PostmanSchedulerService {
|
|
|
|
String targetFilePath = targetDirectoryString + "/" + receiveMessageDto.getMessageUuid();
|
|
|
|
String targetFilePath = targetDirectoryString + "/" + receiveMessageDto.getMessageUuid();
|
|
|
|
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(targetFilePath)))) {
|
|
|
|
try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(targetFilePath)))) {
|
|
|
|
objectOutputStream.writeObject(receiveMessageDto);
|
|
|
|
objectOutputStream.writeObject(receiveMessageDto);
|
|
|
|
|
|
|
|
this.sentMessageFileMap.put(receiveMessageDto.getMessageUuid(), targetFilePath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (IOException e) {
|
|
|
|
catch (IOException e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|