Issue Details (XML | Word | Printable)

Key: CORE-2588
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Andy Jefferson
Reporter: Daniel Azarov
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
JPOX Core (ARCHIVED)

Schematool falls when there is a 1-N relation with the element being the base class of the owner

Created: 02/Dec/05 06:34 PM   Updated: 30/Mar/06 05:53 PM   Resolved: 26/Jan/06 10:21 AM
Component/s: Schema tool
Affects Version/s: 1.1.0-beta-4
Fix Version/s: 1.1.0-rc-1

File Attachments: 1. Zip Archive 13Dec2005_schematool_testcase.zip (42 kB)
2. Zip Archive testcarse_02dec2005_schematool.zip (11 kB)

Environment:
Win 2000 server
JDK 1.4.2_07


 Description  « Hide
Test case works fine with beta-3 and fails with latest version.


Buildfile: build.xml

compile:
   [delete] Deleting directory D:\2jpox_testcase\build\classes
    [mkdir] Created dir: D:\2jpox_testcase\build\classes
    [javac] Compiling 5 source files to D:\2jpox_testcase\build\classes

enhance:
     [java] 21:28:17,156 INFO [JPOX.Enhancer] - JPOX Enhancer (version 1.1.0-rc-1) : Enhancement of classes
     [java] JPOX Enhancer (version 1.1.0-rc-1) : Enhancement of classes

     [java] 21:28:18,531 INFO [JPOX.MetaData] - Parsing MetaData from file "/D:/2jpox_testcase/src/org/jpox/test/package.jdo"
     [java] 21:28:18,593 INFO [JPOX.MetaData] - Class org.jpox.test.C specified to use "application identity" but no "objectid-class" was specified. Reverting to javax.jdo.identity.LongIdentity
     [java] 21:28:18,968 INFO [JPOX.MetaData] - Class org.jpox.test.C specified to use "application identity" but no "objectid-class" was specified. Reverting to javax.jdo.identity.LongIdentity
     [java] 21:28:19,718 INFO [JPOX.Enhancer] - Updating class file "D:\2jpox_testcase\build\classes\org\jpox\test\A.class" with enhanced definition
     [java] ENHANCED (PersistenceCapable) : org.jpox.test.A
     [java] 21:28:19,953 INFO [JPOX.Enhancer] - Updating class file "D:\2jpox_testcase\build\classes\org\jpox\test\C.class" with enhanced definition
     [java] ENHANCED (PersistenceCapable) : org.jpox.test.C
     [java] 21:28:20,078 INFO [JPOX.Enhancer] - Updating class file "D:\2jpox_testcase\build\classes\org\jpox\test\B.class" with enhanced definition
     [java] ENHANCED (PersistenceCapable) : org.jpox.test.B

schematool:
     [java] JPOX SchemaTool (version 1.1.0-rc-1) : Creation of the schema

     [java] 21:28:21,484 INFO [JPOX.JDO] - PersistenceManagerFactory - Vendor: JPOX Version: 1.1.0-rc-1
     [java] 21:28:21,484 INFO [JPOX.JDO] - PersistenceManagerFactory initialised for datastore URL=jdbc:oracle:thin:@FLY:1521:ISICOM driver=oracle.jdbc.OracleDriver userName=dan02122005
     [java] 21:28:22,906 INFO [JPOX.RDBMS] - RDBMS Adapter initialised : OracleAdapter : Oracle version=Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
     [java] With the Partitioning, OLAP and Data Mining options, major=10, minor=1, revision=0
     [java] Identifier Names : UPPERCASE
     [java] Driver name=Oracle JDBC driver, version=10.1.0.4.0, major=10, minor=1
     [java] Identifier Max Lengths : Table=30 Column=30 Constraint=30 Index=30 Delimeters="
     [java] Identifier Support in DDL : catalog=false schema=true
     [java] 21:28:23,421 INFO [JPOX.RDBMS] - Creating table DELETEME1133548102937
     [java] 21:28:23,656 INFO [JPOX.RDBMS.SCHEMA] - Catalog Name could not be determined for this datastore
     [java] 21:28:23,656 INFO [JPOX.RDBMS] - Dropping table DELETEME1133548102937
     [java] 21:28:23,687 INFO [JPOX.RDBMS.SCHEMA] - Initialising Catalog "", Schema "DAN02122005" using "None" auto-start option
     [java] 21:28:23,687 INFO [JPOX.RDBMS.SCHEMA] - Catalog "", Schema "DAN02122005" initialised - managing 0 classes
     [java] 21:28:23,781 INFO [JPOX.MetaData] - Parsing MetaData from file "/D:/2jpox_testcase/src/org/jpox/test/package.jdo"
     [java] 21:28:23,937 INFO [JPOX.MetaData] - Class org.jpox.test.C specified to use "application identity" but no "objectid-class" was specified. Reverting to javax.jdo.identity.LongIdentity
     [java] 21:28:23,984 INFO [JPOX.RDBMS.SCHEMA] - Managing Persistence of Class : org.jpox.test.A [Table : A, InheritanceStrategy : new-table]
     [java] 21:28:24,125 INFO [JPOX.RDBMS.SCHEMA] - Managing Persistence of Class : org.jpox.test.B [Table : B, InheritanceStrategy : new-table]
     [java] 21:28:24,140 ERROR [JPOX.RDBMS.SCHEMA] - An exception was thrown while adding/validating class(es) : null
     [java] java.lang.NullPointerException
     [java] at org.jpox.store.rdbms.table.ClassTable.getIDMapping(ClassTable.java:1866)
     [java] at org.jpox.store.rdbms.table.AbstractClassTable.addApplicationIdUsingClassTableId(AbstractClassTable.java:156)
     [java] at org.jpox.store.rdbms.table.ClassTable.initializePK(ClassTable.java:668)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:226)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:2369)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2023)
     [java] at org.jpox.store.rdbms.RDBMSManager$MgmtTransaction.execute(RDBMSManager.java:1887)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:479)
     [java] at org.jpox.SchemaTool.createSchemaTables(SchemaTool.java:180)
     [java] at org.jpox.SchemaTool.main(SchemaTool.java:674)

     [java] 21:28:24,140 ERROR [JPOX.SchemaTool] - An exception was thrown during the operation of SchemaTool. Please refer to the log for full details. The following may help : java.lang.NullPointerException
     [java] An exception was thrown during the operation of SchemaTool. Please refer to the log for full details. The following may help : java.lang.NullPointerException
     [java] 21:28:24,140 ERROR [JPOX.SchemaTool] - javax.jdo.JDOFatalInternalException: java.lang.NullPointerException
     [java] NestedThrowables:
     [java] java.lang.NullPointerException


Sort Order: Ascending order - Click to sort in descending order
Andy Jefferson added a comment - 02/Dec/05 07:00 PM
Bugs cannot be reported against unreleased software (as the docs say). Workaround is to run SchemaTool twice ... the first time it fails (but it adds entries to JPOX_TABLES). The second time it runs.

Daniel Azarov added a comment - 02/Dec/05 07:46 PM
>Bugs cannot be reported against unreleased software (as the docs say).
Didn't get you, sorry. What does it mean?

>Workaround is to run SchemaTool twice
The same bug occurs also when I just start the server application and it raises the metadata for the ready db schema generated with the beta3 jpox version. Please tell will it occur if I generate the schema with the latest JPox version? Do JPOX_TABLES differ in these JPox versions?

Daniel Azarov added a comment - 02/Dec/05 07:59 PM
I'm out of the office currently and will be able to check the workaround at Monday only. But as far as i remember I ran schematool twice and even more checking the provided testcase because you didn't like my orevious ones.

Andy Jefferson added a comment - 02/Dec/05 08:04 PM
>> Bugs cannot be reported against unreleased software.
> What does it mean ?

Very simple. beta-5 is not released. Its CVS work in progress. So i changed the reported version to be beta-4. Nothing can be reported against beta-5 since it doesnt exist yet

What I ran was enhancer, schematool, schematool. This worked for me. Its a workaround. Nothing more.

Daniel Azarov added a comment - 02/Dec/05 08:23 PM
Yes, you workaround helped for the testcase class schema. I've checked it remotelly. Now I will try to do the same with the real class chema.

Daniel Azarov added a comment - 02/Dec/05 09:00 PM
Unfortunetelly it fails for the same table again and againg. Callstack differs from the provided testcase. Should I attach new testcase (hope to implement it in 2-3 days) to this issue or open the new one?

Here it is the exception.

     [java] INFO [JPOX.RDBMS.SCHEMA] - Managing Persistence of Class : some.project.package.allgemein.location.MasterstandortUndTiefer [Table : MASTERSTUNDTIEFER, InheritanceStrategy : new-table]
     [java] ERROR [JPOX.RDBMS.SCHEMA] - An exception was thrown while adding/validating class(es) : null
     [java] java.lang.NullPointerException
     [java] at org.jpox.store.rdbms.table.ClassTable.getIDMapping(ClassTable.java:1866)
     [java] at org.jpox.store.rdbms.table.AbstractClassTable.addApplicationIdUsingClassTableId(AbstractClassTable.java:156)
     [java] at org.jpox.store.rdbms.table.ClassTable.initializePK(ClassTable.java:668)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:226)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClasses(RDBMSManager.java:2061)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.access$000(RDBMSManager.java:1948)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:473)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
     [java] at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
     [java] at org.jpox.store.rdbms.table.ClassTable.getSupertable(ClassTable.java:955)
     [java] at org.jpox.store.rdbms.table.ClassTable.preInitilize(ClassTable.java:221)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTables(RDBMSManager.java:2208)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:2369)
     [java] at org.jpox.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2023)
     [java] at org.jpox.store.rdbms.RDBMSManager$MgmtTransaction.execute(RDBMSManager.java:1887)
     [java] at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:479)
     [java] at org.jpox.SchemaTool.createSchemaTables(SchemaTool.java:180)
     [java] at org.jpox.SchemaTool.main(SchemaTool.java:674)

     [java] ERROR [JPOX.SchemaTool] - An exception was thrown during the operation of SchemaTool. Please refer to the log for full details. The following may help : java.lang.NullPointerException
     [java] An exception was thrown during the operation of SchemaTool. Please refer to the log for full details. The following may help : java.lang.NullPointerException
     [java] ERROR [JPOX.SchemaTool] - javax.jdo.JDOFatalInternalException: java.lang.NullPointerException
     [java] NestedThrowables:
     [java] java.lang.NullPointerException

Daniel Azarov added a comment - 13/Dec/05 09:24 AM
I've done a new testcase were your workaround doesn't work. The file name is "13Dec2005_schematool_testcase.zip". Running schematool 2, 3 ... times doesn't help.

Andy Jefferson added a comment - 15/Dec/05 09:53 AM
Your issue is down to the fact that you insist on defining class hierarchies with circular relations and inheritance. Your "base" class has to know about the sub-subclass in order to create its table, yet your sub-subclass has to have its superclass and base class present first. One solution is for you to change your base class to have a set of base class objects instead of sub-subclass objects. This would mean that the base class would have its table created first and all should work fine.

Andy Jefferson added a comment - 26/Jan/06 10:21 AM
Fixed in JPOX CVS. Both provided testcases run correctly