[ http://issues.apache.org/jira/browse/JDO-327?page=comments#action_12377148 ]
Craig Russell commented on JDO-327: ----------------------------------- Running tests with the uploaded jars, I found that the instances of persistent interfaces are not being cleaned up during localTearDown. This is due to JPOX not finding instances in the database using Extent or Query. Instances can only be found using getObjectById. The tearDown method cleans up the instances using deletePersistent of the result of a query where the candidates are an Extent. 1. getExtent(ICompany.class) returns an Extent which when iterated, has no elements. 2. pm.newQuery(ICompany.class).execute() returns a Collection which when iterated, has no elements. 3. pm.newQuery().setCandidates(pm.getExtent(ICompany.class).execute() returns a Collection which when iterated, has no elements. 4. the target class stored in the oid for persistent instances is incorrect. This must be the interface, not the implementation's persistent class. <spec section=12.6.6> For interfaces and classes that use a SingleFieldIdentity as the object-id class, if the returned instance is subsequently made persistent, the target class stored in the object-id instance is the parameter of the newInstance method that created it. </spec> All of these symptoms might have the same root cause. The discriminator stored in the table doesn't match the value of the discriminator assumed for the persistent interface. The best solution is probably to store the interface name as the discriminator value and the name of the target class in the object id. Please see JDO-377 for some debugging tests for this issue. > JPOX fails to create new instance of PC class via pm.newInstance(PCInterface) > ----------------------------------------------------------------------------- > > Key: JDO-327 > URL: http://issues.apache.org/jira/browse/JDO-327 > Project: JDO > Type: Bug > Components: tck20 > Versions: JDO 2 rc1 > Reporter: Craig Russell > Assignee: Erik Bengtson > Fix For: JDO 2 final > Attachments: jpox-1.1.0.jar, jpox-enhancer-1.1.0.jar > > This is a new test for persistent interfaces. JPOX fails while obtaining > metadata for the persistent interface IAddress. > IAddress newAddress() { > return (IAddress)pm.newInstance(IAddress.class); > } > maven -o -Djdo.tck.cfglist=companyPMInterface.conf runtck.jdori > [java] RUN CompletenessTest.test ERROR > [java] Description: Completeness test with standard mapping, basic > testdata with all relationships and embedded objects. > [java] Time: 009 > [java] There was 1 error: > [java] 1) > test(org.apache.jdo.tck.mapping.CompletenessTest)org.springframework.beans.factory.BeanCreationException: > Error creating bean with name 'root' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Can't resolve > reference to bean 'company1' while setting property 'constructor argument > with index 0[0]'; nested exception is > org.springframework.beans.factory.BeanCreationException: Error creating bean > with name 'company1' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Can't resolve > reference to bean 'addr1' while setting property 'constructor argument with > index 3'; nested exception is > org.springframework.beans.factory.BeanCreationException: Error creating bean > with name 'addr1' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Instantiation of > bean failed; nested exception is > org.springframework.beans.factory.BeanDefinitionStoreException: Factory > method [public org.apache.jdo.tck.pc.company.IAddress > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(long,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)] > threw exception; nested exception is javax.jdo.JDOException: Cannot read the > JDO Meta-Data file "<input stream> java.lang.ClassCastException: > org.jpox.metadata.EmbeddedMetaData" > [java] org.springframework.beans.factory.BeanCreationException: Error > creating bean with name 'company1' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Can't resolve > reference to bean 'addr1' while setting property 'constructor argument with > index 3'; nested exception is > org.springframework.beans.factory.BeanCreationException: Error creating bean > with name 'addr1' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Instantiation of > bean failed; nested exception is > org.springframework.beans.factory.BeanDefinitionStoreException: Factory > method [public org.apache.jdo.tck.pc.company.IAddress > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(long,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)] > threw exception; nested exception is javax.jdo.JDOException: Cannot read the > JDO Meta-Data file "<input stream> java.lang.ClassCastException: > org.jpox.metadata.EmbeddedMetaData" > [java] org.springframework.beans.factory.BeanCreationException: Error > creating bean with name 'addr1' defined in class path resource > [org/apache/jdo/tck/pc/company/companyAllRelationships.xml]: Instantiation of > bean failed; nested exception is > org.springframework.beans.factory.BeanDefinitionStoreException: Factory > method [public org.apache.jdo.tck.pc.company.IAddress > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(long,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)] > threw exception; nested exception is javax.jdo.JDOException: Cannot read the > JDO Meta-Data file "<input stream> java.lang.ClassCastException: > org.jpox.metadata.EmbeddedMetaData" > [java] org.springframework.beans.factory.BeanDefinitionStoreException: > Factory method [public org.apache.jdo.tck.pc.company.IAddress > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(long,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)] > threw exception; nested exception is javax.jdo.JDOException: Cannot read the > JDO Meta-Data file "<input stream> java.lang.ClassCastException: > org.jpox.metadata.EmbeddedMetaData" > [java] javax.jdo.JDOException: Cannot read the JDO Meta-Data file "<input > stream> java.lang.ClassCastException: org.jpox.metadata.EmbeddedMetaData" > [java] at > org.jpox.metadata.MetaDataParser.parseMetaDataStream(MetaDataParser.java:174) > [java] at > org.jpox.metadata.MetaDataParser.parseMetaData(MetaDataParser.java:107) > [java] at > org.jpox.metadata.MetaDataManager.parseFile(MetaDataManager.java:1131) > [java] at > org.jpox.metadata.MetaDataManager.loadMetaDataForClass(MetaDataManager.java:1319) > [java] at > org.jpox.metadata.MetaDataManager.addORMDataToClass(MetaDataManager.java:644) > [java] at > org.jpox.metadata.ClassMetaData.populate(ClassMetaData.java:429) > [java] at > org.jpox.metadata.MetaDataManager.populateClassesInFile(MetaDataManager.java:1211) > [java] at > org.jpox.metadata.MetaDataManager.loadMetaDataForClass(MetaDataManager.java:1325) > [java] at > org.jpox.metadata.MetaDataManager.getMetaDataForClassOrInterface(MetaDataManager.java:503) > [java] at > org.jpox.metadata.MetaDataManager.getMetaDataForInterface(MetaDataManager.java:392) > [java] at > org.jpox.AbstractPersistenceManager.newInstance(AbstractPersistenceManager.java:2250) > [java] at > org.apache.jdo.tck.pc.company.CompanyFactoryPMInterface.newAddress(CompanyFactoryPMInterface.java:38) > [java] at > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(CompanyFactoryAbstractImpl.java:46) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > [java] at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > [java] at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > [java] at > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:102) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:573) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:325) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveConstructorArguments(AbstractAutowireCapableBeanFactory.java:705) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:486) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:325) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:193) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveConstructorArguments(AbstractAutowireCapableBeanFactory.java:705) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:611) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:329) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.apache.jdo.tck.pc.company.CompanyModelReader.getRootList(CompanyModelReader.java:101) > [java] at > org.apache.jdo.tck.mapping.CompletenessTest.localSetUp(CompletenessTest.java:95) > [java] at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:187) > [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:203) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:120) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:95) > [java] NestedThrowablesStackTrace: > [java] java.lang.ClassCastException: org.jpox.metadata.EmbeddedMetaData > [java] at > org.jpox.metadata.MetaDataParser.startElement(MetaDataParser.java:466) > [java] at > com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:533) > [java] at > com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:220) > [java] at > com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:872) > [java] at > com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693) > [java] at > com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368) > [java] at > com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834) > [java] at > com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) > [java] at > com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148) > [java] at > com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242) > [java] at javax.xml.parsers.SAXParser.parse(SAXParser.java:375) > [java] at javax.xml.parsers.SAXParser.parse(SAXParser.java:176) > [java] at > org.jpox.metadata.MetaDataParser.parseMetaDataStream(MetaDataParser.java:162) > [java] at > org.jpox.metadata.MetaDataParser.parseMetaData(MetaDataParser.java:107) > [java] at > org.jpox.metadata.MetaDataManager.parseFile(MetaDataManager.java:1131) > [java] at > org.jpox.metadata.MetaDataManager.loadMetaDataForClass(MetaDataManager.java:1319) > [java] at > org.jpox.metadata.MetaDataManager.addORMDataToClass(MetaDataManager.java:644) > [java] at > org.jpox.metadata.ClassMetaData.populate(ClassMetaData.java:429) > [java] at > org.jpox.metadata.MetaDataManager.populateClassesInFile(MetaDataManager.java:1211) > [java] at > org.jpox.metadata.MetaDataManager.loadMetaDataForClass(MetaDataManager.java:1325) > [java] at > org.jpox.metadata.MetaDataManager.getMetaDataForClassOrInterface(MetaDataManager.java:503) > [java] at > org.jpox.metadata.MetaDataManager.getMetaDataForInterface(MetaDataManager.java:392) > [java] at > org.jpox.AbstractPersistenceManager.newInstance(AbstractPersistenceManager.java:2250) > [java] at > org.apache.jdo.tck.pc.company.CompanyFactoryPMInterface.newAddress(CompanyFactoryPMInterface.java:38) > [java] at > org.apache.jdo.tck.pc.company.CompanyFactoryAbstractImpl.newAddress(CompanyFactoryAbstractImpl.java:46) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > [java] at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > [java] at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > [java] at > org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:102) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:573) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:325) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveConstructorArguments(AbstractAutowireCapableBeanFactory.java:705) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:486) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:325) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:176) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:105) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:193) > [java] at > org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveConstructorArguments(AbstractAutowireCapableBeanFactory.java:705) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:611) > [java] at > org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:329) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:226) > [java] at > org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:147) > [java] at > org.apache.jdo.tck.pc.company.CompanyModelReader.getRootList(CompanyModelReader.java:101) > [java] at > org.apache.jdo.tck.mapping.CompletenessTest.localSetUp(CompletenessTest.java:95) > [java] at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:187) > [java] at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:203) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:120) > [java] at > org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:95) > [java] FAILURES!!! -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
