Hi Tilmann,

> On May 30, 2016, at 6:10 AM, Tilmann Zäschke <[email protected]> wrote:
> 
> Dear all,
> 
> I'm trying to implement the schema for the new Optional test, but I keep 
> running into a ClassCastException:
> 
> javax.jdo.JDOFatalInternalException: Failed to generate new Mapping of type 
> org.datanucleus.store.rdbms.mapping.java.OptionalMapping, exception : Failed 
> to generate new Mapping of type 
> org.datanucleus.store.rdbms.mapping.java.ObjectMapping, exception : 
> org.datanucleus.store.rdbms.mapping.java.EmbeddedPCMapping cannot be cast to 
> org.datanucleus.store.rdbms.mapping.java.PersistableMapping
> java.lang.ClassCastException: 
> org.datanucleus.store.rdbms.mapping.java.EmbeddedPCMapping cannot be cast to 
> org.datanucleus.store.rdbms.mapping.java.PersistableMapping
>    at 
> org.datanucleus.store.rdbms.table.ColumnCreator.createColumnsForField(ColumnCreator.java:253)
>    at 
> org.datanucleus.store.rdbms.mapping.java.ReferenceMapping.createPerImplementationColumnsForReferenceField(ReferenceMapping.java:487)
>    ....
> 
> I'm not mentioning 'embedded' anywhere, so I'm not sure where this assumption 
> of 'embedding' comes from.

I think that Optional itself is treated as embedded. I’d investigate which 
field is causing the problem by trying, one at a time, Optional<?>, 
Optional<OptionalSample>, etc. and see whether any of these is ok. 

But is Optional even claimed to be supported by datanucleus? I haven’t seen any 
mail on the subject…

Craig


> I do have Fields of type 'Object', but other tests also don't seem to require 
> embedded=false or similar to handle field of type Object that reference PCs.
> 
> I'm also not even sure (or how I can find out) which of my mapping files are 
> wrong. The error is the same for application-identity and datastore-identity. 
> It occurs wile calling makePersistent().
> I'm using the latest 'trunk' of the JDO TCK.
> 
> I also also consistently get the following error, but it seems to be a 
> different issue:
> >> Error copying implementation log file: Source 
> >> 'C:\Users\ztilmann\Desktop\projects\workspace-jdo\JDO\tck\datanucleus.txt' 
> >> does not exist
> 
> 
> Could anyone have a look and tell me what I'm doing wrong? I can also provide 
> if the mistake is not obvious. Code snippets are below.
> 
> Cheers,
> Tilmann
> 
> 
> Code snippet (error occurs in last line in makePersistent):
> 
>    @Override
>    protected void localSetUp() {
>        addTearDownClass(OptionalSample.class);
>        insertOptionalSample(getPM());
>    }
> 
>    private void insertOptionalSample(PersistenceManager pm) {
>        Transaction tx = pm.currentTransaction();
>        try {
>            tx.begin();
> 
>            //create a dummy object as target
>            OptionalSample dummyPC = new OptionalSample();
>            dummyPC.setId(DUMMY_ID);
>            pm.makePersistent(dummyPC);
>            ...
>        }
>    }
> 
> 
> 
> Here are the schemas:
> 
> public class OptionalSample {
>    long id;
> 
>    Optional<OptionalSample> optionalPC;
>    Optional<?> optionalAny;
>    @SuppressWarnings("rawtypes")
>    Optional optionalNoGenerics;
>    Object any;
> 
>    Optional<Date> optionalDate;
>    Optional<Integer> optionalInteger;
>    Optional<String> optionalString;
> 
>    ...
> }
> 
> 
> package.jdo
> ==========
> 
>    <class name="OptionalSample" identity-type="application">
>      <field name="id" primary-key="true"/>
>      <field name="optionalPC"
> field-type="org.apache.jdo.tck.pc.query.OptionalSample"
>                       persistence-modifier="persistent"/>
>      <field name="optionalDate" persistence-modifier="persistent"/>
>      <field name="optionalInteger" persistence-modifier="persistent"/>
>      <field name="optionalString" persistence-modifier="persistent"/>
>      <field name="optionalAny" persistence-modifier="persistent" 
> embedded="false"
> field-type="org.apache.jdo.tck.pc.query.OptionalSample">
>      </field>
>      <field name="optionalNoGenerics" persistence-modifier="persistent" 
> embedded="false"
> field-type="org.apache.jdo.tck.pc.query.OptionalSample">
>      </field>
>      <field name="any" persistence-modifier="persistent" embedded="false"
> field-type="org.apache.jdo.tck.pc.query.OptionalSample">
>      </field>
>    </class>
> 
> 
> package-standard.orm:
> =====================
> 
>   <class name="OptionalSample" table="OptionalSample">
>      <field name="id" column="ID"/>
>      <field name="optionalPC">
>        <column name="OPTIONAL_PC"/>
>        <foreign-key/>
>      </field>
>      <field name="optionalDate">
>        <column name="OPTIONAL_DATE"/>
>      </field>
>      <field name="optionalInteger">
>        <column name="OPTIONAL_INTEGER"/>
>      </field>
>      <field name="optionalString">
>        <column name="OPTIONAL_STRING"/>
>      </field>
>      <field name="optionalAny" column="OPTIONAL_ANY">
>        <foreign-key/>
>      </field>
>      <field name="optionalNoGenerics" column="OPTIONAL_NO_GENERICS">
>        <foreign-key/>
>      </field>
>      <field name="any" column="OBJECT_ANY">
>        <foreign-key/>
>      </field>
>    </class>
> 
> 
> schema.sql
> ==========
> 
> CREATE TABLE OptionalSample (
>    ID INTEGER NOT NULL,
>    OPTIONAL_PC INTEGER REFERENCES SIMPLE_CLASS,
>    OPTIONAL_DATE DATE,
>    OPTIONAL_LONG BIGINT,
>    OPTIONAL_STRING VARCHAR(255),
>    OPTIONAL_ANY INTEGER REFERENCES SIMPLE_CLASS,
>    OPTIONAL_NO_GENERICS INTEGER REFERENCES SIMPLE_CLASS,
>    OBJECT_ANY INTEGER REFERENCES SIMPLE_CLASS,
>    CONSTRAINT OPTIONALSAMPLE_PK PRIMARY KEY (ID)
> );
> 
> 
> Full exception:
> =============
> 
> 1) 
> testParameterOptionalWithEmptyFields(org.apache.jdo.tck.query.jdoql.methods.SupportedOptionalMethods)javax.jdo.JDOFatalInternalException:
>  Failed to generate new Mapping of type 
> org.datanucleus.store.rdbms.mapping.java.OptionalMapping, exception : Failed 
> to generate new Mapping of type 
> org.datanucleus.store.rdbms.mapping.java.ObjectMapping, exception : 
> org.datanucleus.store.rdbms.mapping.java.EmbeddedPCMapping cannot be cast to 
> org.datanucleus.store.rdbms.mapping.java.PersistableMapping
> java.lang.ClassCastException: 
> org.datanucleus.store.rdbms.mapping.java.EmbeddedPCMapping cannot be cast to 
> org.datanucleus.store.rdbms.mapping.java.PersistableMapping
>    at 
> org.datanucleus.store.rdbms.table.ColumnCreator.createColumnsForField(ColumnCreator.java:253)
>    at 
> org.datanucleus.store.rdbms.mapping.java.ReferenceMapping.createPerImplementationColumnsForReferenceField(ReferenceMapping.java:487)
>    at 
> org.datanucleus.store.rdbms.mapping.java.ReferenceMapping.prepareDatastoreMapping(ReferenceMapping.java:229)
>    at 
> org.datanucleus.store.rdbms.mapping.java.ReferenceMapping.initialize(ReferenceMapping.java:104)
>    at 
> org.datanucleus.store.rdbms.mapping.RDBMSMappingManager.getMapping(RDBMSMappingManager.java:482)
>    at 
> org.datanucleus.store.rdbms.mapping.java.SingleCollectionMapping.initialize(SingleCollectionMapping.java:57)
>    at 
> org.datanucleus.store.rdbms.mapping.RDBMSMappingManager.getMapping(RDBMSMappingManager.java:482)
>    at 
> org.datanucleus.store.rdbms.table.ClassTable.manageMembers(ClassTable.java:529)
>    at 
> org.datanucleus.store.rdbms.table.ClassTable.manageClass(ClassTable.java:435)
>    at 
> org.datanucleus.store.rdbms.table.ClassTable.initializeForClass(ClassTable.java:1205)
>    at 
> org.datanucleus.store.rdbms.table.ClassTable.initialize(ClassTable.java:275)
>    at 
> org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.initializeClassTables(RDBMSStoreManager.java:3298)
>    at 
> org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2907)
>    at 
> org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:118)
>    at 
> org.datanucleus.store.rdbms.RDBMSStoreManager.manageClasses(RDBMSStoreManager.java:1644)
>    at 
> org.datanucleus.store.rdbms.RDBMSStoreManager.getDatastoreClass(RDBMSStoreManager.java:676)
>    at 
> org.datanucleus.store.rdbms.RDBMSPersistenceHandler.getDatastoreClass(RDBMSPersistenceHandler.java:88)
>    at 
> org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:123)
>    at 
> org.datanucleus.state.StateManagerImpl.internalMakePersistent(StateManagerImpl.java:3367)
>    at 
> org.datanucleus.state.StateManagerImpl.makePersistent(StateManagerImpl.java:3343)
>    at 
> org.datanucleus.ExecutionContextImpl.persistObjectInternal(ExecutionContextImpl.java:2079)
>    at 
> org.datanucleus.ExecutionContextImpl.persistObjectWork(ExecutionContextImpl.java:1922)
>    at 
> org.datanucleus.ExecutionContextImpl.persistObject(ExecutionContextImpl.java:1777)
>    at 
> org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:703)
>    at 
> org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:729)
>    at 
> org.apache.jdo.tck.query.jdoql.methods.SupportedOptionalMethods.insertOptionalSample(SupportedOptionalMethods.java:498)
>    at 
> org.apache.jdo.tck.query.jdoql.methods.SupportedOptionalMethods.localSetUp(SupportedOptionalMethods.java:486)
>    at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:267)
>    at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:283)
>    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)
> 
> 
> 
> 
> 
> 
> 

Craig L Russell
Architect
[email protected]
P.S. A good JDO? O, Gasp!





Reply via email to