refs #702: align HMM MCP contract and settings

This commit is contained in:
devmrko
2026-07-22 15:54:48 +09:00
parent adfd50d1fd
commit 536938895a
20 changed files with 383 additions and 197 deletions

View File

@@ -0,0 +1,45 @@
package com.cloudhandson.vpdbackoffice.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.TextNode;
import java.sql.Clob;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
/** JDBC implementation shared with the standalone HMM MCP facade. */
@Service
public class JdbcHmmAiAgentToolRunner implements HmmAiAgentToolRunner {
private final JdbcTemplate jdbcTemplate;
private final ObjectMapper objectMapper;
public JdbcHmmAiAgentToolRunner(JdbcTemplate jdbcTemplate, ObjectMapper objectMapper) {
this.jdbcTemplate = jdbcTemplate;
this.objectMapper = objectMapper;
}
@Override
public JsonNode run(String toolName, com.fasterxml.jackson.databind.node.ObjectNode input) {
try {
String request = objectMapper.writeValueAsString(input);
String response = jdbcTemplate.queryForObject("""
SELECT DBMS_CLOUD_AI_AGENT.RUN_TOOL(?, TO_CLOB(?))
FROM dual
""", (resultSet, rowNum) -> {
Clob clob = resultSet.getClob(1);
return clob == null ? "" : clob.getSubString(1, (int) clob.length());
}, toolName, request);
if (response == null || response.isBlank()) {
return objectMapper.createObjectNode();
}
try {
return objectMapper.readTree(response);
} catch (Exception ignored) {
return TextNode.valueOf(response);
}
} catch (Exception exception) {
throw new AppException("HMM AI Agent Tool 실행에 실패했습니다: " + exception.getMessage());
}
}
}