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)