Я не уверен, что для этого варианта использования существует нечто особенное - но это было похоже на случай, когда кто-то, вероятно, сделал какую-то полезную структуру/технику/дизайн-шаблон.Структура данных/Java-технология для управления списком последовательных команд
Моей ситуация
У меня есть набор команд SQL, выполненные из среднего уровня (Java) для вставки/обновления/удаления данных на любой из множества очень больших таблиц с помощью объединений из родственных промежуточная таблица.
У меня есть больше команд SQL, которые обновляют различные производные таблицы на основе промежуточной таблицы/фактического содержимого таблицы. Различные таблицы будут взаимодействовать с различными производными таблицами через разные запросы (как обычно). Эти команды могут чередоваться с первым набором в зависимости от варианта использования - поэтому я не могу выполнить набор 1, а затем установить 2 сразу.
Мой вопрос
Итак, мне нужно, чтобы построить цепочку команд, которые получают выполняются последовательно, и мне нужно, чтобы вызвать откат, если любой из них терпят неудачу. Я хотел бы сделать это самым ясным, документированным способом.
Кто-нибудь знает стандартный способ кодирования этого? Я уверен, что кто-то, переходящий от кода хранимой процедуры к коду среднего уровня, сделал это раньше, и я не хочу изобретать велосипед, если есть хорошие варианты.
Дополнительная информация
Одна из моих главных проблем делает все ясно. Для разработки, я буду иметь набор запросов, специально предназначенных для:
- усечь постановка таблицы А «и заполнить его с первичными ключами, направленных на удаление записей
- Удалить из реальной таблицы А на основе присоединиться к A»
- Округление постановка таблица а «и заполнить его с полными данными для upserts
- Update/Вставка записей из» в к а на основе присоединяется
Та же логика применяется к таблицам B, C, D, и т.д. . К сожалению, это может быть случай, когда только A и C требуется дополнительный шаг, например синхронизация удалений с определенной производной таблицей, которая должна выполняться после удаления, но до восходящих.
Мне бы хотелось сгруппировать всю логику обновления таблицы, и я бы хотел сгруппировать всю логику для обновления производной таблицы, но во время выполнения они должны быть интеллектуально перемежены, и это звучит беспорядочный для меня.
Вы спрашиваете только о том, как сделать ваш код транзакционным, а также о шаблоне для заказа работы на основе динамических зависимостей/условий? – ach
Я уже реализовал его, и его транзакционные/отлично работают. Это зависимости (между группами команд), которые мне интересны в управлении лучше. –
Похоже, вам нужна какая-то реализация графа. [Этот вопрос] (http://stackoverflow.com/questions/6749255/directed-graph-processing-in-java), похоже, похож на ваш - он предлагает [JGraphT] (http://www.jgrapht.org /). – ach