import java.sql.ResultSet; //导入方法依赖的package包/类
@Override
public SagaInstance find(String sagaType, String sagaId) {
Objects.requireNonNull(sagaType);
Objects.requireNonNull(sagaId);
logger.info("finding {} {}", sagaType, sagaId);
SagaInstance sagaInstance = null;
String psSelect = "SELECT saga_type,saga_id,state_name,last_request_id, saga_data_type, saga_data_json FROM saga_instance WHERE saga_type = ? AND saga_id = ?";
String psSelect_dest = "SELECT destination, resource FROM saga_instance_participants WHERE saga_type = ? AND saga_id = ?";
try (final Connection connection = dataSource.getConnection()) {
PreparedStatement stmt = connection.prepareStatement(psSelect_dest);
stmt.setString(1, sagaType);
stmt.setString(2, sagaId);
ResultSet rs2 = stmt.executeQuery();
Set destinationsAndResources = new HashSet<>();
while (rs2.next()) {
DestinationAndResource destinationsAndResource = new DestinationAndResource(rs2.getString("destination"), rs2.getString("resource"));
destinationsAndResources.add(destinationsAndResource);
}
stmt = connection.prepareStatement(psSelect);
stmt.setString(1, sagaType);
stmt.setString(2, sagaId);
ResultSet rs = stmt.executeQuery();
if (rs == null || rs.getFetchSize() > 1) {
logger.error("incorrect fetch result {}, {}", sagaType, sagaId);
} else {
while (rs.next()) {
sagaInstance = new SagaInstance(sagaType, sagaId, rs.getString("state_name"), rs.getString("last_request_id"),
new SerializedSagaData(rs.getString("saga_data_type"), rs.getString("saga_data_json")), destinationsAndResources);
}
}
} catch (SQLException e) {
logger.error("SqlException:", e);
}
return sagaInstance;
// TODO insert - sagaInstance.getDestinationsAndResources();
}