пул соединений: восстановить потерянное соединение с БД - PullRequest
0 голосов
/ 22 марта 2012

Я реализую 2-фазную фиксацию для распределенной транзакции (используя 2 базы данных).Я моделирую потерю соединения с сервером БД, подключив сетевой кабель к настольному компьютеру, а затем снова подключив его.Однако это приводит к сбою транзакции при выполнении «отката» при потере объекта соединения с БД.Есть ли способ, которым я могу получить потерянный объект соединения с БД или заставить приложение попытаться переподключиться к тому же соединению после определенного периода времени.Я использую DB2 и Websphere 6.1 в качестве сервера приложений.Соединение с БД осуществляется через поиск jndi.Использование Atomikos в качестве диспетчера транзакций.

В целом, как приложение, реализующее двухэтапное восстановление фиксации (откат) в сценарии сбоя БД?Является ли восстановление приложением, или Менеджер транзакций должен это сделать?

Ответы [ 2 ]

2 голосов
/ 22 марта 2012

Я не думаю, что ваша проблема имеет какое-либо отношение к восстановлению, поскольку она, вероятно, происходит до подготовки двухфазной транзакции.

Если вы имитируете сбой, отсоединив сетевой кабель, то сервер приложенийбыстро заметит, что соединение разорвано, а именно, когда приложение пытается выполнить другую операцию базы данных.Однако на стороне DB2 соединение выглядит просто бездействующим, и для DB2 или хост-системы, где работает DB2, может потребоваться много времени, чтобы заметить, что соединение разорвано.Откат произойдет только после того, как соединение было определено как разорванное.В то же время у вас могут возникнуть проблемы из-за блокировок, удерживаемых соединением.

Если вы хотите сократить время, необходимое для того, чтобы DB2 инициировала откат соединения, тогда вы можете настроить поддержку активности TCPнастройка на сервере.

1 голос
/ 22 марта 2012

Я понятия не имею об Атомикосе.

Обычно за восстановление отвечает менеджер транзакций. Обычно сервер приложений в этом случае выступает в роли диспетчера транзакций и отвечает за выполнение этой операции.

Если соединение с БД потеряно, будет получено исключение StaleConnectionException, и среда выполнения WAS очистит это соединение или все соединения БД в пуле соединений для этой базы данных (в зависимости от того, что вы настроили).

Новое соединение доступно приложению при следующем запросе от ds.getConnection.

Приложению не требуется выполнять какие-либо действия по восстановлению (в отношении базы данных).

НТН

Manglu

...