Bug #3859
Reference cycles can not be persisted if no aggregate roots are involved
Status: | Resolved | Start date: | 2009-07-09 | |
---|---|---|---|---|
Priority: | Must have | Due date: | ||
Assigned To: | Karsten Dambekalns | % Done: | 100% |
|
Category: | FLOW3 Persistence | |||
Target version: | - |
Description
When having reference cycles in an object tree that is persisted, the Backend bails out if the objects are not aggregate root (i.e. don't have a repository):
Uncaught FLOW3 Exception #1219424096: The identifier requested (7e449a8f-94cb-41bc-ad1f-927fb4ca0643) for "flow3:contentNode"is already in use. (More information) F3\PHPCR\ItemExistsException thrown in file /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/Node.php in line 465. 9 F3\TYPO3CR\Node::addNode("flow3:contentNode", "flow3:F3_TYPO3_Domain_Model_Structure_ContentNode", "7e449a8f-94cb-41bc-ad1f-927fb4ca0643") /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00478: $node = $parentNode->addNode($nodeName, $nodeTypeName, $object->FLOW3_AOP_Proxy_getProperty($uuidPropertyName)); 00479: } elseif ($object->FLOW3_AOP_Proxy_getProperty('FLOW3_Persistence_Entity_UUID') !== NULL) { 00480: $node = $parentNode->addNode($nodeName, $nodeTypeName, $object->FLOW3_AOP_Proxy_getProperty('FLOW3_Persistence_Entity_UUID')); 00481: } else { 00482: $node = $parentNode->addNode($nodeName, $nodeTypeName); 8 F3\TYPO3CR\FLOW3\Persistence\Backend::createNodeForEntity(F3\TYPO3\Domain\Model\Structure\ContentNode_AOPProxy_Development, F3\TYPO3CR\Node, "flow3:contentNode") /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00393: if ($object->FLOW3_Persistence_isNew()) { 00394: if ($this->classSchemata[$propertyValue->FLOW3_AOP_Proxy_getProxyTargetClassName()]->getModelType() === \F3\FLOW3\Persistence\ClassSchema::MODELTYPE_ENTITY) { 00395: $this->createNodeForEntity($propertyValue, $node, 'flow3:' . $propertyName); 00396: } else { 00397: $this->createNodeForValueObject($propertyValue, $node, 'flow3:' . $propertyName); 7 F3\TYPO3CR\FLOW3\Persistence\Backend::persistObject(F3\TYPO3\Domain\Model\Content\Page_AOPProxy_Development) /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00414: // right place and have the right name. fancy, eh? 00415: foreach ($queue as $object) { 00416: $this->persistObject($object); 00417: } 00418: } 6 F3\TYPO3CR\FLOW3\Persistence\Backend::persistObject(F3\TYPO3\Domain\Model\Structure\ContentNode_AOPProxy_Development) /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00414: // right place and have the right name. fancy, eh? 00415: foreach ($queue as $object) { 00416: $this->persistObject($object); 00417: } 00418: } 5 F3\TYPO3CR\FLOW3\Persistence\Backend::persistObject(F3\TYPO3\Domain\Model\Structure\Site_AOPProxy_Development) /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00329: 00330: foreach ($this->aggregateRootObjects as $object) { 00331: $this->persistObject($object); 00332: } 00333: 4 F3\TYPO3CR\FLOW3\Persistence\Backend::persistObjects() /Users/Shared/Sites/dev/flow3/dist/Packages/Global/TYPO3CR/Classes/FLOW3/Persistence/Backend.php: 00249: */ 00250: public function commit() { 00251: $this->persistObjects(); 00252: $this->processDeletedObjects(); 00253: $this->session->save(); 3 F3\TYPO3CR\FLOW3\Persistence\Backend::commit() /Users/Shared/Sites/dev/flow3/dist/Packages/Global/FLOW3/Classes/Persistence/Manager.php: 00209: $this->backend->setAggregateRootObjects($aggregateRootObjects); 00210: $this->backend->setDeletedObjects($removedObjects); 00211: $this->backend->commit(); 00212: 00213: // this needs to unregister more than just those, as at least some of 2 F3\FLOW3\Persistence\Manager::persistAll() /Users/Shared/Sites/dev/flow3/dist/Packages/Global/FLOW3/Classes/Core/Bootstrap.php: 00652: 00653: if ($this->settings['persistence']['enable'] === TRUE) { 00654: $this->objectManager->getObject('F3\FLOW3\Persistence\ManagerInterface')->persistAll(); 00655: } 00656: $this->objectManager->getObject('F3\FLOW3\Session\SessionInterface')->close(); 1 F3\FLOW3\Core\Bootstrap::run() /Users/Shared/Sites/dev/t3v5/dist/Public/index.php: 00045: $flow3 = new $bootstrapClassName(getenv('FLOW3_CONTEXT')); 00046: $flow3->initialize(); 00047: $flow3->run(); 00048: 00049: ?>
Instead of producing that exception, an object proxy should be created in the CR.
Associated revisions
[+BUGFIX] TYPO3CR (FLOW3 Persistence): Cyclic object references can now be stored even if the involved objects are not aggregate roots, fixes #3859.
History
#1 Updated by Karsten Dambekalns about 6 years ago
- Status changed from Accepted to Resolved
- % Done changed from 0 to 100
Applied in changeset r2779.
#2 Updated by Robert Lemke about 4 years ago
- Target version deleted (
0.5.0 alpha 3)