[ 
https://issues.apache.org/jira/browse/JDO-559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12548402
 ] 

Craig Russell commented on JDO-559:
-----------------------------------

Hi Andy,

> can you please explain the rationale behind 
> "src/java/org/apache/jdo/tck/api/persistencemanager/NewInstanceBadMapping.java"
>  and why you expect Exceptions ? 

The idea is that if an instance of a persistent interface cannot be persisted, 
then it should be flagged as soon as possible, which is during the newInstance 
method call. 

> What do these try to test that aren't tested by "NewInstance.java" ?

What's different is that the interface and abstract class aren't completely 
mapped, so they cannot be persisted.

> Let's take the abstract class case "AAddress.java". It has 6 properties in 
> the class. If we look at the jdo file we have 6 persistent properties, and in 
> the orm file we have 5 persistent properties. The ORM info is only appended 
> on to the JDO info and so at the end of the day it has 6 persistent 
> properties defined in MetaData and these match exactly what is in the class, 
> so no exception is thrown. Or am I missing something ?

What's missing is the mapping of the zipcode property to a relational column. 
We have never specified what the default mapping is, so this is the only part 
of the spec that mentions "complete mapping".

I'll remove this requirement if it seems unnecessary.

> Same applies to IAddress.java and its jdo/orm representation. 

Same: No mapping for zipcode property.

> Not sure what Address.java is testing - its a concrete PC, has jdo/orm info. 
> Why should we get an Exception there?

Same: No mapping for zipcode property.

> Going further, the persistent interface negative test seems to assume that if 
> we don't have a line <property name="..."/> in the MetaData then a property 
> is not defined. This will clearly screw up the subsequent tests in 
> companyPMInterface.conf and the annotated variants since they don't have the 
> persistent properties present in MetaData (e.g PIAddress has no <property> at 
> all in its MetaData) 

This is true. For interfaces, the tck tests currently have assumed that all the 
properties default to persistent. This is obviously different from persistent 
classes, in which properties must be explicitly identified as persistent. 

> The current assumptions are 
> 1. for a persistent interface we will internally add metadata for all 
> properties that aren't defined in MetaData, using the type of the property 
> whether it is default persistent 

I agree, and I'll change the spec to match this reasonable default for 
persistent properties in an interface.

> 2. for a persistent class we will internally add metadata for fields that 
> aren't defined in MetaData, using the type of the field whether it is default 
> persistent 

I assume you mean for an abstract class, "using the type of the field when it 
is by default persistent"

> 3. for a persistent class we DON'T internally add metadata for properties 
> that aren't defined in the MetaData
same comment as #2 above.

Summary:

1. I'll change the spec to default properties in persistent interfaces to 
persistent.
2. We need to discuss whether it makes sense to require fields or properties to 
be explicitly mapped to columns, and if not, remove the "mapping" tests from 
the tck.



> JPOX fails to throw JDOUserException on some illegal arguments to 
> pm.newInstance()
> ----------------------------------------------------------------------------------
>
>                 Key: JDO-559
>                 URL: https://issues.apache.org/jira/browse/JDO-559
>             Project: JDO
>          Issue Type: Bug
>          Components: tck2
>            Reporter: Michelle Caisse
>            Assignee: Andy Jefferson
>             Fix For: JDO 2 maintenance release 1
>
>
> For tests NewInstance (in pm.conf) and NewInstanceBadMapping (in 
> newInstanceBadMapping.conf), a number of test failures:
> 1) 
> testNewInstanceInterfaceBad(org.apache.jdo.tck.api.persistencemanager.NewInstance)junit.framework.AssertionFailedError:
>  Expected JDOUserException but no exception thrown.  Interface contains 
> method not declared as persistent property.
>       at 
> org.apache.jdo.tck.api.persistencemanager.NewInstance.testNewInstanceInterfaceBad(NewInstance.java:99)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:254)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> 2) 
> testNewInstanceAbstractClassBad(org.apache.jdo.tck.api.persistencemanager.NewInstance)junit.framework.AssertionFailedError:
>  Expected JDOUserException but no exception thrown.  Abstract class contains 
> abstract method not declared as persistent property.
>       at 
> org.apache.jdo.tck.api.persistencemanager.NewInstance.testNewInstanceAbstractClassBad(NewInstance.java:115)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:254)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> RUN NewInstanceBadMapping.testNewInstanceInterface       FAILURE
> RUN NewInstanceBadMapping.testNewInstanceAbstractClass           FAILURE
> RUN NewInstanceBadMapping.testNewInstanceClass           FAILURE
> Description: All pm tests with standard mapping, no testdata.
> Time: 003
> There were 3 failures:
> 1) 
> testNewInstanceInterface(org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping)junit.framework.AssertionFailedError:
>  Expected JDOUserException but no exception thrown.  Persistent property is 
> not mapped.
>       at 
> org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping.testNewInstanceInterface(NewInstanceBadMapping.java:66)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:254)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> 2) 
> testNewInstanceAbstractClass(org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping)junit.framework.AssertionFailedError:
>  Expected JDOUserException but no exception thrown.  Persistent property is 
> not mapped.
>       at 
> org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping.testNewInstanceAbstractClass(NewInstanceBadMapping.java:81)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:254)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)
> 3) 
> testNewInstanceClass(org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping)junit.framework.AssertionFailedError:
>  Expected JDOUserException but no exception thrown.  Persistent property is 
> not mapped.
>       at 
> org.apache.jdo.tck.api.persistencemanager.NewInstanceBadMapping.testNewInstanceClass(NewInstanceBadMapping.java:96)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:254)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.doRun(BatchTestRunner.java:108)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:148)
>       at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:123)

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

Reply via email to