db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andy Jefferson (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JDO-669) TCK : RelationshipManyToManyAllRelationships.testDeleteFromMappedSide - problem with check
Date Tue, 23 Nov 2010 09:48:14 GMT

    [ https://issues.apache.org/jira/browse/JDO-669?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12934794#action_12934794

Andy Jefferson commented on JDO-669:

Patch : better but still not complete.
containsProject, containsEmployee still call xxx.getField() and one of those objects in the
collection could be the deleted one. 

an example stack trace (using DN SVN)
    [java] 2) testDeleteFromMappedbySide(org.apache.jdo.tck.mapping.RelationshipManyToManyAllRelationships)javax.jdo.JDOUserException:
Cannot read fields from a deleted object
    [java] FailedObject:1882[OID]org.apache.jdo.tck.pc.company.FullTimeEmployee
    [java]      at org.datanucleus.jdo.state.PersistentDeleted.transitionReadField(PersistentDeleted.java:116)
    [java]      at org.datanucleus.state.AbstractStateManager.transitionReadField(AbstractStateManager.java:551)
    [java]      at org.datanucleus.jdo.state.JDOStateManagerImpl.isLoaded(JDOStateManagerImpl.java:2078)
    [java]      at org.apache.jdo.tck.pc.company.Person.jdoGetpersonid(Person.java)
    [java]      at org.apache.jdo.tck.pc.company.Person.getPersonid(Person.java:104)
    [java]      at org.apache.jdo.tck.mapping.AbstractRelationshipTest.containsEmployee(AbstractRelationshipTest.java:80)
    [java]      at org.apache.jdo.tck.mapping.RelationshipManyToManyAllRelationships.testDeleteFromMappedbySide(RelationshipManyToManyAllRelationships.java:480)
    [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:272)

I think you need collections of the object ids only (before any objects are deleted), and
use these in the comparison

> TCK : RelationshipManyToManyAllRelationships.testDeleteFromMappedSide - problem with
> ------------------------------------------------------------------------------------------
>                 Key: JDO-669
>                 URL: https://issues.apache.org/jira/browse/JDO-669
>             Project: JDO
>          Issue Type: Bug
>          Components: tck
>    Affects Versions: JDO 3
>            Reporter: Andy Jefferson
>            Assignee: Craig L Russell
>             Fix For: JDO 3 maintenance release 1
>         Attachments: jdo-669.patch
> Whilst this test passes with current DataNucleus (2.2 M3), I was in the process of extending
its support for managed relationships, and now get this test to fail which provokes this question
> pm.deletePersistent(proj1);
> pm.flush();
> deferredAssertTrue(!emp1.getProjects().contains(proj1),
>     ASSERTION_FAILED + testMethod, "Postcondition is false; other side of relationship
not set on flush");
> After the call to deletePersistent() and flush() the object "proj1" is in P_DELETED state.
So when the call goes in to emp1.getProjects().contains(proj) this will interrogate the hashCode()
method of Project. This is defined as
> public int hashCode() {
>     return (int)projid;
> }
> But when using datastore identity "projid" is not a primary-key field, and so, as per
section 5.5.6 of the spec 
> <spec>Read access to primary key fields is permitted. Any other access to persistent
fields is not supported and might throw a JDOUserException.</spec>
> So what does the implementation do ?

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message