BUG 11510 Números de casos duplicados SOLVED

- Al parecer existe un problema de concurrencia al crear los casos en processmaker, de tal forma que si se intenta crear 2 casos al mismo tiempo el número del caso termina siendo el mismo para ambos casos.
- Changed table sequence to lock read to write.
This commit is contained in:
Hector Cortez
2013-05-27 09:41:10 -04:00
parent e64c84c6ca
commit e7211f54aa
2 changed files with 18 additions and 18 deletions

View File

@@ -388,6 +388,7 @@ class Application extends BaseApplication
} }
$this->setAppNumber($maxNumber); $this->setAppNumber($maxNumber);
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
if ($this->validate()) { if ($this->validate()) {
$con->begin(); $con->begin();
@@ -403,7 +404,6 @@ class Application extends BaseApplication
$con->commit(); $con->commit();
$oSequences->unlockSequenceTable(); $oSequences->unlockSequenceTable();
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
return $this->getAppUid(); return $this->getAppUid();
} else { } else {
$msg = ''; $msg = '';
@@ -412,7 +412,7 @@ class Application extends BaseApplication
$msg .= $objValidationFailure->getMessage() . "<br/>"; $msg .= $objValidationFailure->getMessage() . "<br/>";
} }
$oSequences->unlockSequenceTable(); $oSequences->unlockSequenceTable();
$oSequences->changeSequence('APP_NUMBER', $maxNumber);
throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg))); throw (new PropelException('The APPLICATION row cannot be created!', new PropelException($msg)));
} }
} catch (Exception $e) { } catch (Exception $e) {

View File

@@ -18,7 +18,7 @@ class Sequences extends BaseSequences {
/** /**
* Create Sequences Table * Create Sequences Table
* *
* @param type $aData * @param type $aData
* @return type * @return type
* @throws type * @throws type
@@ -46,11 +46,11 @@ class Sequences extends BaseSequences {
/** /**
* Change Sequence with native query * Change Sequence with native query
* *
* @param type $seqName * @param type $seqName
* @param type $seqValue * @param type $seqValue
* @return type * @return type
* *
*/ */
public function changeSequence($seqName, $seqValue) public function changeSequence($seqName, $seqValue)
{ {
@@ -65,22 +65,22 @@ class Sequences extends BaseSequences {
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
return $rs; return $rs;
} catch(Exception $e) { } catch(Exception $e) {
// throw ($e); // throw ($e);
throw new Exception( G::LoadTranslation('ID_ERROR_CHANGE_SEQUENCE_NUMBER')); throw new Exception( G::LoadTranslation('ID_ERROR_CHANGE_SEQUENCE_NUMBER'));
} }
} }
/** /**
* Lock Sequence Table * Lock Sequence Table
* *
* @return type * @return type
* *
*/ */
public function lockSequenceTable() public function lockSequenceTable()
{ {
try { try {
$con = Propel::getConnection('workflow'); $con = Propel::getConnection('workflow');
$sql = "LOCK TABLES SEQUENCES READ, APPLICATION READ "; $sql = "LOCK TABLES SEQUENCES WRITE, APPLICATION READ ";
$stmt = $con->createStatement(); $stmt = $con->createStatement();
$rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC);
@@ -92,13 +92,13 @@ class Sequences extends BaseSequences {
/** /**
* Unlock Sequence Table * Unlock Sequence Table
* *
* @return type * @return type
* *
*/ */
public function unlockSequenceTable() public function unlockSequenceTable()
{ {
try { try {
$con = Propel::getConnection('workflow'); $con = Propel::getConnection('workflow');
$sql = "UNLOCK TABLES "; $sql = "UNLOCK TABLES ";
$stmt = $con->createStatement(); $stmt = $con->createStatement();
@@ -106,12 +106,12 @@ class Sequences extends BaseSequences {
return $rs; return $rs;
} catch(Exeption $e) { } catch(Exeption $e) {
throw ($e); throw ($e);
} }
} }
/** /**
* Name Exists * Name Exists
* *
* @param type $seqName * @param type $seqName
* @return boolean * @return boolean
* *
@@ -132,7 +132,7 @@ class Sequences extends BaseSequences {
/** /**
* Load Sequences * Load Sequences
* *
* @param type $seqName * @param type $seqName
* @return type * @return type
* @throws type * @throws type
@@ -157,7 +157,7 @@ class Sequences extends BaseSequences {
/** /**
* Update Sequences * Update Sequences
* *
* @param type $fields * @param type $fields
* @return type * @return type
* @throws type * @throws type
@@ -185,7 +185,7 @@ class Sequences extends BaseSequences {
/** /**
* Remove Sequences * Remove Sequences
* *
* @param type $seqName * @param type $seqName
* @return type * @return type
* @throws type * @throws type
@@ -208,7 +208,7 @@ class Sequences extends BaseSequences {
/** /**
* Get new sequece number * Get new sequece number
* *
* @param type $seqName * @param type $seqName
* @return type * @return type
* @throws type * @throws type