You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jdo-dev@db.apache.org by "Craig Russell (JIRA)" <ji...@apache.org> on 2010/01/12 01:52:54 UTC

[jira] Updated: (JDO-630) Support specification of exact class in SingleFieldIdentity

     [ https://issues.apache.org/jira/browse/JDO-630?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Craig Russell updated JDO-630:
------------------------------

    Attachment: jdo-630.patch

Please review this patch.

I've added a subset of the company model (just Person, Employee, PartTimeEmployee, and FullTimeEmployee) to define the classes as having LongIdentity.

The test with the 2.0.0-release RI fails with:

    [echo] Starting configuration="clr.conf" with database="derby" identitytype="applicationidentity" mapping="" on the Reference Implementation.
    [java] RUN GetObjectByIdExactClass.testAbstractSuperclassExact	   ERROR
    [java] RUN GetObjectByIdExactClass.testAbstractSuperclassNotExact	
    [java] RUN GetObjectByIdExactClass.testConcreteSuperclassExact	   FAILURE
    [java] RUN GetObjectByIdExactClass.testConcreteSuperclassNotExact	   FAILURE
    [java] RUN GetObjectByIdExactClass.testWrongClass	
    [java] RUN GetObjectByIdExactClass.testRightClass	
    [java] Description: All pmf tests with standard mapping, no testdata.
    [java] Time: 003
    [java] There was 1 error:
    [java] 1) testAbstractSuperclassExact(org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass)java.lang.NullPointerException
    [java] 	at org.datanucleus.state.JDOStateManagerImpl.cache(JDOStateManagerImpl.java:659)
    [java] 	at org.datanucleus.ObjectManagerImpl.putObjectIntoLevel2CacheInternal(ObjectManagerImpl.java:3916)
    [java] 	at org.datanucleus.ObjectManagerImpl.putObjectIntoLevel2Cache(ObjectManagerImpl.java:3893)
    [java] 	at org.datanucleus.ObjectManagerImpl.findObject(ObjectManagerImpl.java:2821)
    [java] 	at org.datanucleus.jdo.JDOPersistenceManager.getObjectById(JDOPersistenceManager.java:1640)
    [java] 	at org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass.testAbstractSuperclassExact(GetObjectByIdExactClass.java:109)
    [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)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
    [java] There were 2 failures:
    [java] 1) testConcreteSuperclassExact(org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass)junit.framework.AssertionFailedError: 
    [java] Assertion A12.5.6-??? (GetObjectById) failed: getObjectById returned wrong type org.apache.jdo.tck.pc.singlefieldidentity.Person
    [java] Assertion A12.5.6-??? (GetObjectById) failed: getObjectById exact for concrete superclass must fail.
    [java] 
    [java] 	at org.apache.jdo.tck.JDO_Test.failOnError(JDO_Test.java:1172)
    [java] 	at org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass.testConcreteSuperclassExact(GetObjectByIdExactClass.java:169)
    [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)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
    [java] 2) testConcreteSuperclassNotExact(org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass)junit.framework.AssertionFailedError: 
    [java] Assertion A12.5.6-??? (GetObjectById) failed: getObjectById returned wrong type org.apache.jdo.tck.pc.singlefieldidentity.Person
    [java] 
    [java] 	at org.apache.jdo.tck.JDO_Test.failOnError(JDO_Test.java:1172)
    [java] 	at org.apache.jdo.tck.api.persistencemanager.getobject.GetObjectByIdExactClass.testConcreteSuperclassNotExact(GetObjectByIdExactClass.java:194)
    [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)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
    [java] 	at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
    [java] FAILURES!!!
    [java] Error summary:
    [java] 001 error:  java.lang.NullPointerException
    [java] derby-app-clr-junit.txt:
    [java]     ** Tests run: 006, Time: 003 seconds. Failures: 2, Errors: 1
    [java] Excluded tests: [org.apache.jdo.tck.enhancement.FieldAccessModified, org.apache.jdo.tck.enhancement.ImplementsPersistenceCapable]
    [java] [ERROR] Java Result: 1
    [echo] Finished configuration="clr.conf" with database="derby" identitytype="applicationidentity" mapping="" on the Reference Implementation.


> Support specification of exact class in SingleFieldIdentity
> -----------------------------------------------------------
>
>                 Key: JDO-630
>                 URL: https://issues.apache.org/jira/browse/JDO-630
>             Project: JDO
>          Issue Type: Improvement
>          Components: specification, tck2
>            Reporter: Andy Jefferson
>            Assignee: Craig Russell
>             Fix For: JDO 2 maintenance release 3
>
>         Attachments: jdo-630.patch
>
>
> When calling PersistenceManager.getObjectById() with a SingleFieldIdentity, there seems to be no way of avoiding the following 
> (if the implementation decides to do so):
> "It is an implementation decision whether to access the data store, if required to determine the exact class. This will be the case of  inheritance, where multiple <code>PersistenceCapable</code> classes share the same ObjectId class."
> Now when I know for sure that the targetClassName of the given SingleFieldIdentity already denotes the correct class for the given id,  how can I avoid that additional roundtrip to the database for finding the exact class?
> It would be useful to have a way of specifying a SingleFieldIdentity to be for the exact class specified. This could be done by addition of methods
> void setExact(boolean flag);
> boolean getExact();
> to SingleFieldIdentity

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