Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-1407

ClassCastException at DataCacheStoreManager.loadAll

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.1.0
    • 1.2.0
    • datacache
    • None
    • Patch Available

    Description

      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.

      Attachments

        1. OPENJPA-1407-1.1.x.patch
          23 kB
          Ravi Prakash Palacherla

        Activity

          People

            rpalache Ravi Prakash Palacherla
            rpalache Ravi Prakash Palacherla
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: