[ http://issues.apache.org/jira/browse/JDO-144?page=all ]
Andy Jefferson reassigned JDO-144:
----------------------------------
Assign To: Michelle Caisse (was: Andy Jefferson)
Thanks Michelle.
Well I'll explain what the problem is, and some options.
The test creates an object with many collections and instantiates them as
Vectors (as you know). It tries to persist it, and JPOX converts all Collection
fields to the equivalent wrapper type for the _instantiated_ type of the field.
This is fine. The test then goes back to the datastore and retrieves the
persisted object. JPOX has to look at what is in the datastore for each
Collection field and create a suitable Collection. At this point it has no idea
that the user wants a Vector creating since the instantiated type is not stored
in the datastore anywhere. Consequently it knows it has to create a Collection
type, and that the user has provided an <order>, so it create an ArrayList
(since that is the JPOX-defined default for Lists).
How is JPOX to know that it should instantiate the fields as Vector when it is
simply retrieving an object from the datastore and the declared type of the
field is Collection ? JPOX calls the default constructor of
CollectionCollections and then has to instantiate each field somehow. So it
takes a guess. If anyone thinks it should do better, then please please define
how.
What I would do to the test is change your "Vector.elementAt(i)" calls to be
"List.get(i)" (since List.get(i) is more generic and does the same thing as
Vector.elementAt(i)), and cast the Collection field to a List instead of a
Vector. This will work because JPOX (CVS) has given it a List wrapper.
Hope that makes sense.
> Incorrect value for public Collection CollectionOfDate12
> --------------------------------------------------------
>
> Key: JDO-144
> URL: http://issues.apache.org/jira/browse/JDO-144
> Project: JDO
> Type: Bug
> Components: tck20
> Reporter: Michelle Caisse
> Assignee: Michelle Caisse
>
> [java] 1)
> test(org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections)junit.framework.AssertionFailedError:
> Assertion A6.4.3-33 (TestCollectionCollections) failed:
> [java] Incorrect value for public Collection CollectionOfDate12
> [java] at org.apache.jdo.tck.JDO_Test.fail(JDO_Test.java:546)
> [java] at
> org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.checkValues(TestCollectionCollections.java:146)
> [java] at
> org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.runTest(TestCollectionCollections.java:104)
> [java] at
> org.apache.jdo.tck.models.fieldtypes.TestCollectionCollections.test(TestCollectionCollections.java:69)
> [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> [java] at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> [java] at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> [java] at
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:115)
> [java] at
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:93)
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira