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 Tilmann Zäschke <za...@gmx.de> on 2016/05/30 13:10:38 UTC
EmbeddedPCMapping cannot be cast to PersistableMapping
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)
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Tilmann Zäschke <za...@gmx.de>.
The test mostly passes now. There are some issues, we should probably
discuss them on Friday:
a)
SELECT FROM org.apache.jdo.tck.pc.query.OptionalSample WHERE
!(optionalPC != null)
fails with
java.sql.SQLSyntaxErrorException: Syntax error: Encountered "NOT" at
line 1, column 185
-> I think double negation is legal, would you agree?
b)
query #1= "optionalPC.id == " + DUMMY_ID
query #2= "optionalPC.get().id == " + DUMMY_ID
-> I think both queries should return the same result, but instead the
second query returns the object with 'id=DUMMY_ID', not the one that
refrerences the object with id=DUMMY_ID.
c) Optional.orElse is currently not supported. I think the proposal was
to support this, but we discuss this on Friday:
"org.datanucleus.exceptions.NucleusUserException: Invocation of method
"orElse" on "java.util.Optional" is not supported"
d) query: "optionalPC == null"
From this comment
(https://issues.apache.org/jira/browse/JDO-751?focusedCommentId=15154475&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15154475)
by Craig (Feb 19, 16:44) my understanding was that this should only
return objects with 'optionalPC==null', but _not_ objects with
'optionalPC.isEmpty()'.
However we can discuss this on Friday.
A related problem occurs with the query "!(optionalPC == null)"
This returns only objects where 'optionalPC.get() != null'.
My understanding was that it should also return with
'optionalPC.isEmpty()', because the reference is not actually null.
From the post, my understanding was that we always assume
optional-shortcut form when comparing to an actual instance, but allow
comparison with the 'reference to Optional' when copmparing to 'null'.
Again, we can discuss this.
I'll upload a patch with the latest version.
Best,
Tilmann
On 31-May-16 20:33, Craig Russell wrote:
>> On May 31, 2016, at 3:08 AM, Tilmann Zschke <za...@gmx.de> wrote:
>>
>> Hi,
>>
>>> More likely the problem is down to having a field as Optional<Object>
>> The test doesn't actually have Optional<Object>, but it does have:
>>
>> Optional<?> optionalAny;
>> Optional optionalNoGenerics;
>>
>> I suppose these would not be allowed either (because they are mostly equivalent to Optional<Object>)?
> Yes. Optional<?> and Optional are not of much interest (to me at least).
>
> I agree with Andy that supporting Object in an object model should be sufficiently flexible. Optional<Object> does not add any value to the model.
>
> In plain English, "Object can be any object. Optional<Object> can be anything but with some special behavior about nullability"???
>
> Craig
>> Regards,
>> Tilmann
>>
>> On 31-May-16 11:53, Andy Jefferson wrote:
>>> Hi,
>>>> thanks. Indeed it seems that the error is triggered by declaring a field
>>>> as 'Optional'.
>>> That I doubt, due to established tests
>>> https://github.com/datanucleus/tests/blob/master/jdo/general/src/test/org/datanucleus/tests/types/OptionalTest.java
>>>
>>>
>>> More likely the problem is down to having a field as Optional<Object>, which is a minority interest use-case IMHO (which can often be symptomatic of a problem in a model, with lack of use of inheritance etc). Perhaps try nightly builds of jars if having problems.
>>>
>>>> Next step is likely to update the implementation.
>>> DataNucleus has supported Optional since 5.0.0-m1, and tested on Optional<{basic}>, Optional<PC> (see link). It hasn't been tested on Optional<Object> where Object refers to potentially multiple types of PC.
>>>
>>>
>>>
>>> Regards
>>
> Craig L Russell
> Architect
> craig.russell@oracle.com
> P.S. A good JDO? O, Gasp!
>
>
>
>
>
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Craig Russell <cr...@oracle.com>.
> On May 31, 2016, at 3:08 AM, Tilmann Zäschke <za...@gmx.de> wrote:
>
> Hi,
>
>> More likely the problem is down to having a field as Optional<Object>
>
> The test doesn't actually have Optional<Object>, but it does have:
>
> Optional<?> optionalAny;
> Optional optionalNoGenerics;
>
> I suppose these would not be allowed either (because they are mostly equivalent to Optional<Object>)?
Yes. Optional<?> and Optional are not of much interest (to me at least).
I agree with Andy that supporting Object in an object model should be sufficiently flexible. Optional<Object> does not add any value to the model.
In plain English, "Object can be any object. Optional<Object> can be anything but with some special behavior about nullability"???
Craig
>
> Regards,
> Tilmann
>
> On 31-May-16 11:53, Andy Jefferson wrote:
>> Hi,
>>> thanks. Indeed it seems that the error is triggered by declaring a field
>>> as 'Optional'.
>> That I doubt, due to established tests
>> https://github.com/datanucleus/tests/blob/master/jdo/general/src/test/org/datanucleus/tests/types/OptionalTest.java
>>
>>
>> More likely the problem is down to having a field as Optional<Object>, which is a minority interest use-case IMHO (which can often be symptomatic of a problem in a model, with lack of use of inheritance etc). Perhaps try nightly builds of jars if having problems.
>>
>>> Next step is likely to update the implementation.
>> DataNucleus has supported Optional since 5.0.0-m1, and tested on Optional<{basic}>, Optional<PC> (see link). It hasn't been tested on Optional<Object> where Object refers to potentially multiple types of PC.
>>
>>
>>
>> Regards
>
>
Craig L Russell
Architect
craig.russell@oracle.com
P.S. A good JDO? O, Gasp!
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Tilmann Zäschke <za...@gmx.de>.
Hi,
> More likely the problem is down to having a field as Optional<Object>
The test doesn't actually have Optional<Object>, but it does have:
Optional<?> optionalAny;
Optional optionalNoGenerics;
I suppose these would not be allowed either (because they are mostly
equivalent to Optional<Object>)?
Regards,
Tilmann
On 31-May-16 11:53, Andy Jefferson wrote:
> Hi,
>> thanks. Indeed it seems that the error is triggered by declaring a field
>> as 'Optional'.
> That I doubt, due to established tests
> https://github.com/datanucleus/tests/blob/master/jdo/general/src/test/org/datanucleus/tests/types/OptionalTest.java
>
>
> More likely the problem is down to having a field as Optional<Object>, which is a minority interest use-case IMHO (which can often be symptomatic of a problem in a model, with lack of use of inheritance etc). Perhaps try nightly builds of jars if having problems.
>
>> Next step is likely to update the implementation.
> DataNucleus has supported Optional since 5.0.0-m1, and tested on Optional<{basic}>, Optional<PC> (see link). It hasn't been tested on Optional<Object> where Object refers to potentially multiple types of PC.
>
>
>
> Regards
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Andy Jefferson <an...@datanucleus.org>.
Hi,
> thanks. Indeed it seems that the error is triggered by declaring a field
> as 'Optional'.
That I doubt, due to established tests
https://github.com/datanucleus/tests/blob/master/jdo/general/src/test/org/datanucleus/tests/types/OptionalTest.java
More likely the problem is down to having a field as Optional<Object>, which is a minority interest use-case IMHO (which can often be symptomatic of a problem in a model, with lack of use of inheritance etc). Perhaps try nightly builds of jars if having problems.
> Next step is likely to update the implementation.
DataNucleus has supported Optional since 5.0.0-m1, and tested on Optional<{basic}>, Optional<PC> (see link). It hasn't been tested on Optional<Object> where Object refers to potentially multiple types of PC.
Regards
--
Andy
DataNucleus (Web: http://www.datanucleus.org Twitter: @datanucleus)
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Tilmann Zäschke <za...@gmx.de>.
Hi Craig,
thanks. Indeed it seems that the error is triggered by declaring a field
as 'Optional'.
I thought I had seen an update note that 'Optional' would be supported
by the latest milestone of DataNucleus, but I can't find it anymore.
I uploaded the patch to JIRA.
Next step is likely to update the implementation.
Cheers,
Tilmann
On 30-May-16 21:31, Craig Russell wrote:
> Hi Tilmann,
>
>> On May 30, 2016, at 6:10 AM, Tilmann Z�schke <za...@gmx.de> 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\u2019d 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\u2019t seen any mail on the subject\u2026
>
> 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
> craig.russell@oracle.com
> P.S. A good JDO? O, Gasp!
>
>
>
>
>
Re: EmbeddedPCMapping cannot be cast to PersistableMapping
Posted by Craig Russell <cr...@oracle.com>.
Hi Tilmann,
> On May 30, 2016, at 6:10 AM, Tilmann Zäschke <za...@gmx.de> 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
craig.russell@oracle.com
P.S. A good JDO? O, Gasp!