Разработка успешных приложений для Oracle
низм AQ, мы не ждем генерации идентификатора транзакции, — мы обращаемся к си-
стеме с просьбой сделать это когда-нибудь. Поэтому приложение опять оказалось в ту-
пике. С одной стороны, мы не можем ждать завершения процесса 45 секунд, но, с дру-
гой стороны, для перехода к следующему экрану необходим сгенерированный
идентификатор, а получить его можно только спустя 45 секунд. Для того чтобы решить
эту проблему, пришлось синтезировать собственный поддельный идентификатор тран-
закции, изменить продолжительный процесс так, чтобы он принимал этот сгенериро-
ванный поддельный идентификатор и обновлял таблицу, записывая его по завершении
работы, благодаря чему реальный идентификатор транзакции связывался с поддельным.
То есть, вместо получения реального идентификатора в результате длительного процес-
са, этот идентификатор становится для процесса входными данными. Во всех "подчи-
ненных" таблицах использовался этот поддельный идентификатор транзакции, а не ре-
альный (поскольку генерации реального надо ждать определенное время). Нам также
пришлось пересмотреть использование этого идентификатора транзакции, чтобы понять,
как это изменение повлияет на другие модули, и так далее.
Еще одна проблема состояла в том, что при синхронной работе, если 45-секундный
процесс завершался неудачно, пользователь узнавал об этом сразу. Он мог устранить при-
чину ошибки (обычно путем изменения входных данных) и повторно выполнить зап-
рос. Теперь, когда транзакции выполняются асинхронно с помощью механизма AQ,
сделать это невозможно. Для поддержки отсроченного уведомления об ошибке пришлось
добавить новые средства. В частности, понадобилось реализовать механизм потоков
заданий для отправки информации о неудавшихся транзакциях соответствующему лицу.
В результате пришлось существенно пересмотреть структуру базы данных. Пришлось
добавить новое программное обеспечение (AQ). Пришлось также создать новые процессы
(управление потоками заданий и другие служебные процессы). К положительным по-
следствиям этих изменений можно отнести не только решение проблемы с архитекту-
рой MTS, но и удобство для пользователя (создавалась видимость более быстрой реак-
ции системы). С другой стороны, все эти изменения существенно задержали завершение
проекта, поскольку проблемы были выявлены лишь непосредственно перед внедрени-
ем, на этапе тестирования масштабируемости. Очень жаль, что приложение сразу не был
правильно спроектировано. Если бы разработчики знали, как физически реализован ме-
ханизм MTS, было бы ясно, что исходный проект не обеспечивает требуемой масшта-
бируемости.
Do'stlaringiz bilan baham: