Как я могу войти в базу данных после сбоя соединения (менеджер сущностей закрыт)

В моем приложении symfony 2 / doctrine2 я использую прослушиватель сущностей для перехвата исключений и отправки себе электронного письма, если ошибка еще не зарегистрирована в базе данных.

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

Я не могу сбросить менеджер сущностей, потому что он будет перепрошивать любую сущность и выдавать новые ошибки (новая сущность была найдена через …)

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

Есть идеи, как я могу решить это?

Большое спасибо!

1

Решение

У нас была та же проблема в нашем проекте, потому что мы используем БД для спулинга наших писем, и у нас есть репортер ошибок почты. Итак, в случае исключения, которое закрывает EM, у нас есть «патч».

Мы частично решили проблему, создав новый экземпляр EM при необходимости. Это не идеальное решение, но оно работает. Во всяком случае, это отказоустойчивость, а не нормальная операция.

Мы поместили этот код в наш почтовый буфер:

    if(!$this->em->isOpen()) {
$connection = $this->em->getConnection();

while($connection->getTransactionNestingLevel() > 0) {
// clean-up of any open transaction
$connection->rollBack();
}

// new EM
$this->em = $this->em->create($connection, $this->em->getConfiguration());

// this is needed if you use the Blameable extension,
// because at this point of the code, we no longer have a logged user to "blame"$user = $this->em->getRepository('FacileCbrCoreBundle:User\User')->loadUserByUsername('facile_cbr');
$emailEntity->setCreatedBy($user);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector