Ejemplo n.º 1
0
 /**
  * Acquire a lock on the given document.
  *
  * @param object $document
  * @param int $lockMode
  * @param int $lockVersion
  * @throws LockException
  * @throws \InvalidArgumentException
  */
 public function lock($document, $lockMode, $lockVersion = null)
 {
     if ($this->getDocumentState($document) != self::STATE_MANAGED) {
         throw new \InvalidArgumentException("Document is not MANAGED.");
     }
     $documentName = get_class($document);
     $class = $this->dm->getClassMetadata($documentName);
     if ($lockMode == LockMode::OPTIMISTIC) {
         if (!$class->isVersioned) {
             throw LockException::notVersioned($documentName);
         }
         if ($lockVersion != null) {
             $documentVersion = $class->reflFields[$class->versionField]->getValue($document);
             if ($documentVersion != $lockVersion) {
                 throw LockException::lockFailedVersionMissmatch($document, $lockVersion, $documentVersion);
             }
         }
     } elseif (in_array($lockMode, array(LockMode::PESSIMISTIC_READ, LockMode::PESSIMISTIC_WRITE))) {
         $this->getDocumentPersister($class->name)->lock($document, $lockMode);
     }
 }