在此先感谢您的帮助。
我想知道如果任何人迅速知道什么函数,其对实体库调用慢跑其重新连接,如果它已经死了。 我运行一些工作,可以采取的是通过ZF2 CLI路线超过WAIT_TIMEOUT时间长度,并且不幸的是,ER的连接通过它需要习惯(当任务完成)的时间死亡。
需要:
// do the long job
$sl = $this->getServiceLocator();
$mapper = $sl->get( 'doctrine_object_mapper' );
if( !$mapper->getRepository()->isAlive() ) // something like so
$mapper->getRepository()->wakeTheHellUp();
不是那些正确的方法名! ;)
再次感谢。
这是一个相当普遍的问题与长时间运行的进程和连接。
该解决方案是检索ORM的DBAL连接并重新创建它,如果连接丢失(确保交易过程中没死)。 这显然是烦人,但它现在这样做的唯一方法:
// note - you need a ServiceManager here, not just a generic service locator
$entityMAnager = $serviceManager->get('entity_manager');
$connection = $entityManager->getConnection();
try {
// dummy query
$connection->query('SELECT 1');
} catch (\Doctrine\DBAL\DBALException $e) {
if ($connection->getTransactionIsolation()) {
// failed in the middle of a transaction - this is serious!
throw $e;
}
// force instantiation of a new entity manager
$entityManager = $serviceManager->create('entity_manager');
}
$this->doFoo($entityManager);