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)