Решение проблемы Doctrine 2 и MYSQL SERVER HAS GONE AWAY

doctrine2

соединение имеет свойство закрываться в долго висящих процессах, например демонах. Время, которое висит соединение задается в MySQL конфиге.
Один из выходов получить постоянное соединение это использовать persistent connection, что так же имеет свои минусы. Как же решить проблему с обычным соединением используя 2 ?

Вообще ноги у проблемы растут издавна. Погуглив легко найти баг репорт еще для версии Doctrine 2.1.6.
http://www.doctrine-project.org/jira/browse/DBAL-275

Там же в приложенных файлах есть предлагаемое решение проблемы – своя обертка для драйвера, которая пробует переподключиться.
Но дело в том, что такое поведение не может быть принято по умолчанию, видимо по этому разработчики Doctrine тянули аж до 2.5 версии с закрытием бага.

В этом же репорте есть очень полезная ссылка по которой автор детально описал свой путь борьбы с проблемой
http://circlical.com/blog/2013/9/12/mysql-server-has-gone-away-atop-doctrine2-and-zend-framework-2

Да, кстати я столкнулся с этим тоже в контексте , поэтому первым, что я попробовал – это вот это адаптированное решение из поста выше в виде Zend модуля.
https://github.com/bushbaby/BsbDoctrineReconnect

К сожалению оно мне не помогло. Я не утверждаю, что решение не рабочее, но конкретно в моем случае не сработало. В итоге я обнаружил (уже позже, когда вернулся к вопросу) что в версии Doctrine 2.5 баг был закрыт. Разработчики добавили метод ping() и возможность программистам самостоятельно решать что делать с соединением.
Следующий код я использую в модели, где используется Doctrine Entity Manager и ошибки MYSQL SERVER HAS GONE AWAY больше нет. :)

Для проверки я оставил на ночь демон в виде Gearman worker и примерно через 12-14 часов выполнил на нем работу, соединение с MySQL было установлено без ошибок.