2016-07-29 2 views
0

Сервер, который я использую, является GlassFish, но эта проблема также возникает и в Weblogic.Обнаружение клиента EJB Datasource disconnect

Моя клиентская машина начинает транзакцию, просматривает несколько EJB с сервера и начинает какую-то работу, которая требует времени. Во время процесса клиентская машина умирает (скажем, powercut).

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

Есть ли способ обнаружить эту мертвую транзакцию и вернуть все ресурсы?

Псевдокод ниже пример

transaction.begin(); 

MyBean bean = (MyBean)ctx.lookup("MyBean"); 

bean.doComplicatedWorkPart1(); 

bean.writeResultsToTheDatabase(); 

// Client dies during this method (powercut), so the transaction 
// is simply left hanging. 
bean.doComplicatedWorkPart2(); 

bean.writeResultsToTheDatabase(); 

transaction.commit(); 

ответ

0

IIRC это не может быть легко обрабатывается. Это зависит от базы данных, которую вы используете, что вам нужно, чтобы использовать администратор базы данных для поиска зависающих транзакций.

Чтобы иметь более надежную среду, вы должны создать боковую часть сервера для этого, здесь маловероятно, что процесс скончался или потерял соединение где-то во время транзакции.

+0

Спасибо, я думал, что это может быть сложная ситуация. Это происходит не слишком часто, но может быть неприятностью, когда это происходит. –

Смежные вопросы