You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Ravi P Palacherla <ra...@oracle.com> on 2009/12/01 22:39:26 UTC

Re: Need process help for a code change that does not have an openJPA testcase.

Hi Mike,

In kodo application id will not be wrapped in any sort of objectId.
The applicationId object will directly be returned.

E.g:
In OpenJPA, 
public Object pcNewObjectIdInstance()
{
    return new
ObjectId(org.apache.openjpa.persistence.jdbc.meta.RaviA.class, new
RaviAId());
}

In Kodo,
public Object pcNewObjectIdInstance()
{
    return new RaviAId();
}

Regards,
Ravi.


Michael Dick wrote:
> 
> Just a couple of thoughts..
> 
> Presumably Kodo uses a product derivation that causes a different ObjectId
> .
> If that's the case we probably could introduce a test derivation that does
> something similar and verifies the fix.
> 
> That said, removing the cast shouldn't be impossible to do. In trunk it
> might be better to define an interface that kodo can extend rather than
> just
> removing the cast. In the service releases I wouldn't want to make that
> kind
> of change though.
> 
> -mike
> 
> On Tue, Dec 1, 2009 at 9:06 AM, Donald Woods <dw...@apache.org> wrote:
> 
>> 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.
>>>
>>
> 
> 

-- 
View this message in context: http://n2.nabble.com/Need-process-help-for-a-code-change-that-does-not-have-an-openJPA-testcase-tp4092236p4096459.html
Sent from the OpenJPA Developers mailing list archive at Nabble.com.