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 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)







Reply via email to