[DDC-1678] When many to many changes but no fields, listeners don't get notified about update. Created: 03/Mar/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.2
Fix Version/s: 2.1.7, 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Benjamin Eberlei Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

See https://github.com/doctrine/doctrine2/pull/256



 Comments   
Comment by Benjamin Eberlei [ 03/Mar/12 ]

Fixed





[DDC-1673] ProxyFactory method generateProxyClasses argument $toDir does not affect anything Created: 29/Feb/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: Git Master
Fix Version/s: 2.2.1, 2.3
Security Level: All

Type: Bug Priority: Minor
Reporter: Aigars Gedroics Assignee: Guilherme Blanco
Resolution: Fixed Votes: 0
Labels: None


 Description   

See my note in the github changeset - https://github.com/doctrine/doctrine2/commit/a029b284234065a03dab4241b29f0325975eeac6#L1L116.

Full method code on the master - https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Proxy/ProxyFactory.php#L116.



 Comments   
Comment by Guilherme Blanco [ 03/Mar/12 ]

Fixed in https://github.com/doctrine/doctrine2/commit/bf80ee6a30f04aed406a3253ef7459b4fcf11bda

Comment by Benjamin Eberlei [ 03/Mar/12 ]

Merged into 2.2





[DDC-1668] bug with reading cached annotations in Annotation driver Created: 28/Feb/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Blocker
Reporter: victor Velkov Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

I had a problem with Class Table Inheritance on first call of a child entity it was working but if call another child in another instance it was not joining with the parent class. After some debugging i found the problem it was not detecting the annotation that is a parent entity to be joined in Doctrine\ORM\Mapping\Driver\AnnotationDriver when the function on line 479 isTransient($className) is called. So after more debugging i found the problem it is in

is_int(key($classAnnotations))

Looks like that after it is cached in and then the cache is read when it returns the array of annotations for the entity class the keys are returned as strings not as integer and if the key is '0' the the value that is_int returns is NULL so the check

 if ($classAnnotations && is_int(key($classAnnotations))) 

fails and it does not foreach the the array of annotations.
Also i found that you are making that check in a couple of places so I maid a quick fix for my self in the Doctrine\Common\Annotations\CachedReader which is if annotations are found that are cached before returning them i call array_values

// Attempt to grab data from cache
        if (($data = $this->cache->fetch($cacheKey)) !== false) {
            if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) {
                return array_values($data);
            }
        }

I am using APC cache.



 Comments   
Comment by Benjamin Eberlei [ 03/Mar/12 ]

Fixed





[DDC-1667] UniqueConstraint without a 'name' attribute generates Syntax error under postgre Created: 24/Feb/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.1.6
Fix Version/s: 2.2.1

Type: Improvement Priority: Minor
Reporter: Adrien Delorme Assignee: Guilherme Blanco
Resolution: Fixed Votes: 0
Labels: None
Environment:

Ubuntu



 Description   

UniqueConstraints without a 'name' attribute generates syntax error on PGSQL ( no error on MSQL )

got a " Syntax error: 7 ERROR: syntax error at or near "ON" "

took me little time to figure out ...

Edit: That was using anotations.



 Comments   
Comment by Guilherme Blanco [ 03/Mar/12 ]

Fixed in https://github.com/doctrine/doctrine2/commit/a47e5663828d54852ff67251acef8bdab0c331c8

Comment by Benjamin Eberlei [ 03/Mar/12 ]

Merged into 2.2





[DDC-1661] No unique join column fields for Single Table inheritance type. Created: 20/Feb/12  Updated: 20/Feb/12  Resolved: 20/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.1.6, 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Benjamin Eberlei Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

https://github.com/doctrine/doctrine2/pull/273






[DDC-1660] Annotation @version is not allowed to be declared on class Created: 20/Feb/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: Mapping Drivers, ORM
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Miroslav Fedeles Assignee: Fabio B. Silva
Resolution: Fixed Votes: 0
Labels: None


 Description   

I upgraded to Doctrine 2.2 and got following exception:

"Doctrine\Common\Annotations\AnnotationException [Semantical Error] Annotation @version is not allowed to be declared on class SomeEntityClass. You may only use this annotation on these code elements: PROPERTY."

In Doctrine 2.1 no such exception has been thrown. I use following annotation for all my classes in my projects:

@version $Id: SomeEntityClass.php 509 2012-02-03 09:38:48Z mf $

Thus I cannot upgrade to Doctrine 2.2 for now.



 Comments   
Comment by Benjamin Eberlei [ 20/Feb/12 ]

Hm maybe the SimpleAnnotationReader should not validate targets? What do you say Fabio/Johannes?

Comment by Benjamin Eberlei [ 20/Feb/12 ]

Its definately a BC break.

Comment by Fabio B. Silva [ 20/Feb/12 ]

Hi Benjamin

This parser identifies the phpdoc annotation @version as the doctrine annotation @Doctrine\ORM\Mapping\Version

SimpleReader does not recognize entity imports. If consider the namespaces (SimpleAnnotationReader#addNamespace), this annotation exists within the namespace "Doctrine\ORM\Mapping\"

This could be fixed considering just CamelCaseClasses, so @version is not equal @Version

Benjamin and Johannes, please take a look at this commit :
https://github.com/FabioBatSilva/common/commit/842bf5883c405e89d211e5ccfff1d8d64e05a486

Comment by Benjamin Eberlei [ 20/Feb/12 ]

This breaks BC, so we cant do this.

Comment by Benjamin Eberlei [ 03/Mar/12 ]

Merged PR into master and 2.2





[DDC-1659] Clear read only entities Created: 19/Feb/12  Updated: 20/Feb/12  Resolved: 20/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: None
Fix Version/s: 2.1.7, 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Benjamin Eberlei Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

https://github.com/doctrine/doctrine2/pull/286



 Comments   
Comment by Benjamin Eberlei [ 20/Feb/12 ]

Fixed





[DDC-1658] EntityGenerator allows to null ids associations. Created: 19/Feb/12  Updated: 20/Feb/12  Resolved: 20/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Benjamin Eberlei Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

https://github.com/doctrine/doctrine2/pull/287/commits






[DDC-1655] PostLoad not getting fired Created: 16/Feb/12  Updated: 14/Mar/12  Resolved: 14/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Denny Swindle Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

It appears that @PostLoad is not getting fired in 2.2.0. I have an entity with a list of OneToMany objects. The objects in the one-to-many list have @PostLoad method defined. Using the find method on EntityManager, I can pull in the entity:

$object = EntityManager->find('entity\path\', $id);

then:

$list = $object->getList();
foreach($list as $item) {

}

Each "item" has a @PostLoad method defined. This PostLoad method on each $item gets called successfully in 2.1.5, but it doesn't appear to be getting called in 2.2.0.

This is my first time submitting a bug, so let me know if you need anything else.



 Comments   
Comment by Benjamin Eberlei [ 17/Feb/12 ]

Are the One To many part of an inheritance hierachy? Then this could be related to DDC-1640

Comment by Benjamin Eberlei [ 17/Feb/12 ]

Please report if DDC-1640 fixes your issue. I keep this bug open as long.

Comment by Denny Swindle [ 13/Mar/12 ]

It looks like release 2.2.1 fixes this issue. Thanks so much





[DDC-1654] OrphanRemoval does not work with One-To-Many, Unidirectional with Join Table Created: 16/Feb/12  Updated: 20/Feb/12  Resolved: 20/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: None
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Sascha-Oliver Prolic Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

OrphanRemoval is only allowed for one-to-one and one-to-many mappings. But using One-To-Many, Unidirectional with Join Table, the relation will be declared as Many-To-Many with a unique contraint, but the orphan removal flag doesn't work in this case (but should).



 Comments   
Comment by Benjamin Eberlei [ 20/Feb/12 ]

Fixed.

Comment by Benjamin Eberlei [ 20/Feb/12 ]

https://github.com/doctrine/doctrine2/commit/a32948b20fd3f67bd29e9dec5f637a46edfffff6





[DDC-1652] ArrayHydrator with composite primary key Created: 15/Feb/12  Updated: 03/Mar/12  Resolved: 03/Mar/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: Git Master
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Gandzy Ghennady Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 1
Labels: None


 Description   

Hi.

Problem with ArrayHydrator and composite primary key.

Given the following data (PRIMARY KEY (`ancestor_id`,`descendant_id`))

ancestor_id descendant_id depth
1 1 0
1 2 1
$query = $em->createQuery("SELECT c,d FROM ResourceClosure c JOIN c.descendant d WHERE c.ancestor = 1");

echo 'ObjectHydrator result count = '.count($query->getResult()).PHP_EOL;
echo 'ArrayHydrator result count = '.count($query->getArrayResult()).PHP_EOL;
Output
ObjectHydrator result count = 2 
ArrayHydrator result count = 1 

Expected both counts are equals 2.
In case getArrayResult() in result only first record hydrated, second record are ommited

Below examples model and insertion in db

ResourceClosure
/**
 * @Entity
 */
class ResourceClosure
{
    /**
     * @Id
     * @ManyToOne(targetEntity="Resource")
     * @JoinColumn(name="ancestor_id", referencedColumnName="id")
     *
     */
    private $ancestor;

    /**
     * @Id
     * @ManyToOne(targetEntity="Resource")
     * @JoinColumn(name="descendant_id", referencedColumnName="id")
     * @var Resource
     */
    private $descendant;

    /**
     * @Column(name="depth", type="integer")
     * @var integer
     */
    private $depth;
}
Insertion
$resource1 = new Entity\Resource('resource1');
$em->persist($resource1);

$resource2 = new Entity\Resource('resource2');
$em->persist($resource2);

$em->flush();

$closure1 = new Entity\ResourceClosure();
$closure1->setAncestor($resource1)
                ->setDescendant($resource1)
                ->setDepth(0);

$em->persist($closure1);


$closure2= new Entity\ResourceClosure();
$closure2->setAncestor($resource1)
                ->setDescendant($resource2)
                ->setDepth(1);

$em->persist($closure2);


$em->flush();

P.S.
Its work like expected in case entity ResourceClosure has simple primary key.



 Comments   
Comment by Benjamin Eberlei [ 20/Feb/12 ]

Verified

Comment by Benjamin Eberlei [ 20/Feb/12 ]

@Guilherme - This is because the SQL Walker decides to $addMetaColumns => false here. Why did we add this? This skips all meta columns in Array Results, i don't get what that is good for.

Comment by Benjamin Eberlei [ 20/Feb/12 ]

PR: https://github.com/doctrine/doctrine2/pull/290

Guilherme has to verify this

Comment by Guilherme Blanco [ 03/Mar/12 ]

Resolved with merge of https://github.com/doctrine/doctrine2/pull/290

Comment by Benjamin Eberlei [ 03/Mar/12 ]

Merged back to 2.2, will be in 2.2.1





[DDC-1651] APC query caching fails when an entity is bound to a query parameter. Created: 14/Feb/12  Updated: 18/Feb/12  Resolved: 18/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: DQL, ORM
Affects Version/s: 2.1.6
Fix Version/s: 2.2.1

Type: Bug Priority: Critical
Reporter: Jonathan Robinson Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None
Environment:

Debian, Php 5.3, APC 3.1.9



 Description   

When an entity is bound as a query parameter, query caching with APC fails with error message:

Catchable fatal error: Object of class XXX could not be converted to string in /libs/doctrine-orm/Doctrine/DBAL/Connection.php on line 1081

If I bind with entity's primary key field, everything works fine.



 Comments   
Comment by Benjamin Eberlei [ 18/Feb/12 ]

Fixed and merged into 2.2 branch.

A rebase onto the 2.1.x branch would take a rewrite, since the code is completly new and since there is a simple workaround ($entity->getId()) when binding i will not backported it into the 2.1.x branch.

https://github.com/doctrine/doctrine2/commit/6cd82d77f5e581b3d21c60c5cb5e6c5042a3ff9b





[DDC-1643] PersistentCollection should support clone Created: 09/Feb/12  Updated: 17/Feb/12  Resolved: 17/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2
Fix Version/s: 2.1.7, 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Bernhard Schussek Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

I'm trying to clone a PersistentCollection and expect to get a stable snapshot. But the class does not implement __clone, thus both objects refer to the same internal ArrayCollection.

I can't use takeSnapshot because I'm writing generic code that should work with any implementation of Traversable/ArrayAccess.



 Comments   
Comment by Benjamin Eberlei [ 09/Feb/12 ]

Moved to right project

Comment by Bernhard Schussek [ 10/Feb/12 ]

Thank you for moving. Any comments on the feasibility of this issue?

Comment by Benjamin Eberlei [ 10/Feb/12 ]

I guess its feasible, i have to think about:

1. how to fix the issue
2. what behavior to attach in general.

Comment by Bernhard Schussek [ 10/Feb/12 ]

Ok. For the sake of completeness, this issue directly causes another in Symfony2 which was already partially fixed here: https://github.com/symfony/symfony/pull/3315

Comment by Josiah [ 13/Feb/12 ]

PR submitted for this issue: https://github.com/doctrine/doctrine2/pull/281

Comment by Benjamin Eberlei [ 17/Feb/12 ]

What are you doing after the PersistentCollection is cloned?

The reason is, that if the code looks like this:

$col = clone $entity->getCol();
$otherEntity->setCol($col);
echo count($col);
$em->flush();

It will do very weird stuff using the owner of the association $col which is $entity. It will also try to insert the $col for $entity not for $otherEntity. To prevent this we have to do some work,

Comment by Benjamin Eberlei [ 17/Feb/12 ]

Fixed in https://github.com/doctrine/doctrine2/commit/93f79d0810a158138020b4cca3332f9f0b1a76af and merged into 2.2 and 2.1.x





[DDC-1640] Actual classMetadata is not used when entity with DiscriminatorMap is hydrated, instead AbstractClass metaData is used. Created: 08/Feb/12  Updated: 17/Feb/12  Resolved: 17/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Critical
Reporter: Jelte Steijaert Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

Because the className changes in ObjectHydrator:226 it might be that the ClassMetadata has not been loaded yet.
When the classMetadata has not been loaded the PostLoad events are not executed.

adding the following after the className has changed solves the issue.

$this->_getClassMetadata($className);

example:

Class Session {
    /**
     * @access private
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="AbstractService", mappedBy="session")
     */
    public $services;
}
/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({
 * 		"A" = "ServiceA",
 * 		"B" = "ServiceB"
 * })
 */
abstract class AbstractService 
{
    /**
     * @access private
     * @var string
     * @ORM\Column()
     */
    private $_status;

    public $status;

    /**
     * @access public
     * @internal Do not use; this is for Doctrine only
     * @ORM\PostLoad
     * @return void
     */
    public function _reconstituteValueObjects()
    {
        $this->status = new Status($this->_status);
    }
}

When I would do now:

foreach ( $session->services as $service ) {
    $service->status->stop();
}

$service would be a concrete class ServceA or ServiceB, but these ClassMetadata's might not be loaded yet. If this is the cause then $service->status will be null as the @PostLoad has not been executed.



 Comments   
Comment by Jelte Steijaert [ 09/Feb/12 ]

I've have found the same issue with the SimpleObjectHydrator.

Although here it might have worse consequences.
When a row is hydrated it the class has a discriminatorMap, the classMetadata of the defined class (usually the abstract class) is used and not the actual classMetadata of the class it will be converted to.
Same issue here that the @PostLoad isn't triggered but also

$this->registerManaged($this->class,...) 

uses the wrong classMetadata is used.

should be: Doctrine\ORM\Internal\Hydration\SimpleObjectHydrator:86

    protected function hydrateRowData(array $sqlResult, array &$cache, array &$result)
    {
        $classMetadata = $this->class;
        $entityName = $this->class->name;
        $data       = array();

        // We need to find the correct entity class name if we have inheritance in resultset
        if ($classMetadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) {
            $discrColumnName = $this->_platform->getSQLResultCasing($classMetadata->discriminatorColumn['name']);

            if ($sqlResult[$discrColumnName] === '') {
                throw HydrationException::emptyDiscriminatorValue(key($this->_rsm->aliasMap));
            }

            $entityName = $classMetadata->discriminatorMap[$sqlResult[$discrColumnName]];
            $classMetadata = $this->_getClassMetadata($entityName);

            unset($sqlResult[$discrColumnName]);
        }
        foreach ($sqlResult as $column => $value) {
            // Hydrate column information if not yet present
            if ( ! isset($cache[$column])) {
                if (($info = $this->hydrateColumnInfo($entityName, $column)) === null) {
                    continue;
                }

                $cache[$column] = $info;
            }

            // Convert field to a valid PHP value
            if (isset($cache[$column]['field'])) {
                $type  = Type::getType($cache[$column]['class']->fieldMappings[$cache[$column]['name']]['type']);
                $value = $type->convertToPHPValue($value, $this->_platform);
            }

            // Prevent overwrite in case of inherit classes using same property name (See AbstractHydrator)
            if (isset($cache[$column]) && ( ! isset($data[$cache[$column]['name']]) || $value !== null)) {
                $data[$cache[$column]['name']] = $value;
            }
        }

        if (isset($this->_hints[Query::HINT_REFRESH_ENTITY])) {
            $this->registerManaged($classMetadata, $this->_hints[Query::HINT_REFRESH_ENTITY], $data);
        }

        $uow    = $this->_em->getUnitOfWork();
        $entity = $uow->createEntity($entityName, $data, $this->_hints);

        //TODO: These should be invoked later, after hydration, because associations may not yet be loaded here.
        if (isset($classMetadata->lifecycleCallbacks[Events::postLoad])) {
            $classMetadata->invokeLifecycleCallbacks(Events::postLoad, $entity);
        }

        $evm = $this->_em->getEventManager();

        if ($evm->hasListeners(Events::postLoad)) {
            $evm->dispatchEvent(Events::postLoad, new LifecycleEventArgs($entity, $this->_em));
        }

        $result[] = $entity;
    }
Comment by Jelte Steijaert [ 09/Feb/12 ]

Changed summery to better reflect the bug.

Comment by Benjamin Eberlei [ 17/Feb/12 ]

Fixed.





[DDC-1634] Lazy Proxy ID Method on Inheritance Entities not working Created: 05/Feb/12  Updated: 05/Feb/12  Resolved: 05/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Benjamin Eberlei Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Comments   
Comment by Benjamin Eberlei [ 05/Feb/12 ]

https://github.com/doctrine/doctrine2/pull/274

Comment by Benjamin Eberlei [ 05/Feb/12 ]

Merged back from master.





[DDC-1625] proxy initialized when accessing identifier on extending class Created: 30/Jan/12  Updated: 05/Feb/12  Resolved: 05/Feb/12

Status: Closed
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2, Git Master
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Miha Vrhovnik Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

The proxy is always initialized when the entity is extending another class and that parent class has get<IDENTIFIER> method



 Comments   
Comment by Miha Vrhovnik [ 30/Jan/12 ]

Fix: https://github.com/doctrine/doctrine2/pull/274

Comment by Alexander [ 30/Jan/12 ]

Re-opening this ticket as a reminder for Benjamin to backport the fix to 2.2.

Comment by Benjamin Eberlei [ 05/Feb/12 ]

Merged into 2.2, See DDC-1634





[DDC-1556] @PostLoad hook being executed more than once for the same entity when loaded through relationship Created: 22/Dec/11  Updated: 17/Feb/12  Resolved: 17/Feb/12

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: None
Fix Version/s: 2.2.1
Security Level: All

Type: Bug Priority: Major
Reporter: Agustín Gutiérrez Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None
Environment:

Linux


Attachments: File doctrine-postload-test.tgz    

 Description   

Scenario:

  • Entity mapping: A manytomany B
  • Hooks: a @PostLoad hook on B
  • Persisted entities: two instances of A related to the same instance of B

When I load both A's using the EntityManager, and access the instance of B (internally from each A), the @PostLoad hook is being triggered twice instead of once (as there is only one instance of A).

I left an attachment with the code ready to run (please read the README.md to setup the environment).



 Comments   
Comment by Benjamin Eberlei [ 17/Feb/12 ]

Fixed for 2.2.1





Generated at Sat Nov 29 06:19:50 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.