Yep, go ahead and open a JIRA and include the details from your email, along with which OpenJPA releases this needs to be addressed in.

-Donald


Ravi P Palacherla wrote:
Hi All,

As part of OPENJPA-263 the following code is added to org/apache/openjpa/datacache/DataCacheStoreManager.java

oidList.add((OpenJPAId) sm.getObjectId());

I think there is no need to perform casting in the above source.
Due to the above casting there is no issue in openJPA testcases but the
issue appears on products like Kodo which uses openJPA source internally.

Can I ask for removal of this casting via JIRA without an openJPA test case
?
I think it is not possible to provide an openJPA testcase because
sm.getObjectId() will always return OpenJPAId in case of openJPA.

Regards,
Ravi.

To be more precise; the following exception stack trace is seen in kodo :

    [java] Caused by: java.lang.ClassCastException: com.sample.TestTableId
     [java]  at
org.apache.openjpa.datacache.DataCacheStoreManager.loadAll(DataCacheStoreManager.java:461)
     [java]  at
org.apache.openjpa.kernel.DelegatingStoreManager.loadAll(DelegatingStoreManager.java:121)
     [java]  at
org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:984)
     [java]  at
org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:1027)
     [java]  at
org.apache.openjpa.kernel.BrokerImpl.findAll(BrokerImpl.java:913)
     [java]  at
org.apache.openjpa.kernel.AbstractPCData.toRelationFields(AbstractPCData.java:217)
     [java]  at
org.apache.openjpa.kernel.AbstractPCData.toNestedFields(AbstractPCData.java:184)
     [java]  at
org.apache.openjpa.kernel.AbstractPCData.toField(AbstractPCData.java:78)
     [java]  at
org.apache.openjpa.kernel.PCDataImpl.loadField(PCDataImpl.java:197)
     [java]  at
org.apache.openjpa.kernel.PCDataImpl.load(PCDataImpl.java:147)
     [java]  at
org.apache.openjpa.datacache.DataCacheStoreManager.initialize(DataCacheStoreManager.java:343)
     [java]  at
org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
     [java]  at
org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
     [java]  at
org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:894)
     [java]  at kodo.kernel.KodoBroker.initialize(KodoBroker.java:65)

Reason behind the above exception is because when application identity class
is used;
In openJPA, ObjectId is generated by enhancer generated method
pcnewObjectIdInstance and it returns wrapped identity class
 like as follows.
     public Object pcNewObjectIdInstance()
     {
          return new ObjectId(ApplicationIdentityIdClass.class, new
AppId());
     }
So, the change was not affected to OpenJPA code. However, in OpenJPA derived products like Kodo, pcNewObjectIdInstance
returns raw application identity class instance.
 Due to this  "oidList.add((OpenJPAId) sm.getObjectId())" throws classcast
exception.

Reply via email to