В версиях ObjESSty до версии 1.4 (включительно) под клиентом понимается отдельный объект oess_1::db::cln::db_t, который подключен к некоторому объекту oess_1::db::site::localhost_t. В принципе, в приложении может быть только один объект localhost, который обслуживает все открытые приложением БД. Тогда все oess_1::db::cln::db_t будут считаться клиентами одного "сервера БД". На практике до сих пор такого не применялось, но поддержка транзакций разрабатывалась с учетом этой возможности. И с расчетом на то, что со временем класс localhost_t дествительно сможет использоваться для реализации полноценного сервера БД.
Транзакцию может проводить только один клиент. Операции всех других клиентов во время проведения транзакции завершаются с кодом ошибки transaction_in_progress.
Транзакции обрабатываются на уровне класса oess_1::db::impl::db_content::std_db_content_t. Класс std_db_content_t введет счетчик количества начатых транзакций.
Когда клиент начинает транзакцию:
- идентификатор клиента сохраняется как идентификатор владельца транзакции;
- начинается системная транзакция;
- увеличивается счетчик транзакций.
Когда клиент подтверждает транзакцию:
- проверяется идентификатор клиента. Только владелец транзакции может подтвердить транзакцию;
- уменьшается счетчик транзакций;
- подтверждается системная транзакция.
При выполнении какой-либо операции:
- проверяется идентификатор клиента. Только владелец транзакции может проводить операции (если транзакция начата);
- выполняется действие.
При попытке владельца транзакции отключиться от БД при незавершенной транзакции воспринимается как откат транзакции.
Документация по ObjESSty. Последние изменения: Fri Oct 13 18:35:37 2006. Создано системой
1.4.7