db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Watzek <mwa.t...@spree.de>
Subject Re: JDOFatalInternalException using single field identity
Date Mon, 11 Jul 2005 16:36:26 GMT
Hi Andy,

I figured out that the exception below was thrown because I made a 
mistake in the orm metadata:

The test case defines a superclass and a subclass. Both are persistence 
capable and both define define persistent fields. Mistakenly, I assigned 
all column/field mappings to the subclass in the orm metadata. That's 
why the exception is thrown.

If I move the fields in the superclass to the subclass, then the test 
case succeeds.

I still have a question: Due to the fact that the above use case 
indicates an user error, should JPOX throw a JDOFatalUserException 
instead of a JDOFatalInternalException?

Regards,
Michael

> Hi Erik, Andy,
> 
> I have written a test case checking single field identity. For this 
> purpose, I created new PC classes, new jdo files, new orm files, and I 
> extended the schema for application identity. When I run the test case, 
> I get a JDOFatalInternalException from JPOX (see below). Currently, I 
> run build jpox-20050617.022105.jar.
> 
> The exception is thrown when a PC instance is made persistent. I cannot 
> find an error in the meta data. So, please have a look at the attached 
> files. I attached the Java file of the PC class and the meta data files. 
> Is there anything wrong?
> 
> Regards,
> Michael
> 
> testSingleFieldIdentityNotIntializedByte(org.apache.jdo.tck.api.persistencecapable.NewObjectIdInstance)javax.jdo.JDOFatalInternalException:

> Cannot populate the field "id" of class 
> "org.apache.jdo.tck.pc.singlefieldidentity.PCPointSingleFieldPrimitivebyte" 
> since it is already populated.
>     at org.jpox.metadata.FieldMetaData.mergeORMData(FieldMetaData.java:451)
>     at org.jpox.metadata.ClassMetaData.mergeORMData(ClassMetaData.java:335)
>     at 
> org.jpox.metadata.MetaDataManager.addORMDataToClass(MetaDataManager.java:648) 
> 
>     at org.jpox.metadata.ClassMetaData.populate(ClassMetaData.java:395)
>     at 
> org.jpox.metadata.MetaDataManager.initialiseMetaDataForClass(MetaDataManager.java:948)

> 
>     at 
> org.jpox.metadata.MetaDataManager.getParsedMetaDataForClass(MetaDataManager.java:423)

> 
>     at 
> org.jpox.metadata.MetaDataManager.getMetaDataForClassOrInterface(MetaDataManager.java:327)

> 
>     at 
> org.jpox.metadata.MetaDataManager.getMetaDataForClass(MetaDataManager.java:285) 
> 
>     at org.jpox.state.StateManagerImpl.<init>(StateManagerImpl.java:558)
>     at 
> org.jpox.AbstractPersistenceManager.internalMakePersistent(AbstractPersistenceManager.java:973)

> 
>     at 
> org.jpox.AbstractPersistenceManager.makePersistent(AbstractPersistenceManager.java:1010)

> 
>     at 
> org.apache.jdo.tck.api.persistencecapable.PersistenceCapableTest.createPersistentInstances(PersistenceCapableTest.java:90)

> 
>     at 
> org.apache.jdo.tck.api.persistencecapable.PersistenceCapableTest.localSetUp(PersistenceCapableTest.java:43)

> 
>     at org.apache.jdo.tck.JDO_Test.setUp(JDO_Test.java:178)
>     at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:194)
>     at 
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:128)
>     at 
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:106)
> 
> 
> ------------------------------------------------------------------------
> 
> /*
>  * Copyright 2005 The Apache Software Foundation.
>  * 
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
>  * You may obtain a copy of the License at 
>  * 
>  *     http://www.apache.org/licenses/LICENSE-2.0
>  * 
>  * Unless required by applicable law or agreed to in writing, software 
>  * distributed under the License is distributed on an "AS IS" BASIS, 
>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
>  * See the License for the specific language governing permissions and 
>  * limitations under the License.
>  */
>  
> package org.apache.jdo.tck.pc.singlefieldidentity;
> 
> import javax.jdo.identity.ByteIdentity;
> import javax.jdo.identity.SingleFieldIdentity;
> 
> /**
>  * The PC class for testing <code>ByteIdentity</code>.
>  * @author Michael Watzek
>  */
> public class PCPointSingleFieldPrimitivebyte extends PCPointSingleField {
>     
>     /**
>      * Returns a unique value, used for primary key field initialization.
>      * @return a unique value
>      */
>     private static byte newId() {
>         synchronized (PCPointSingleFieldPrimitivebyte.class) {
>             return (byte) ((counter++) % Byte.MAX_VALUE);
>         }
>     }
> 
>     /**
>      * The primary key field.
>      */
>     private byte id = newId();
> 
>     /**
>      * This constructor is used by test cases checking assertion A7.12-39:<br>
>      * The instance returned is initialized with the value of the primary key 
>      * field of the instance on which the method is called.
>      * @param x
>      * @param y
>      */
>     public PCPointSingleFieldPrimitivebyte(int x, int y) {
>         super(x, y);
>     }
> 
>     /**
>      * Returns <code>true</code> if the given the key of the given 
>      * <code>SingleFieldIdentity</code> instance equals the key in the subclass
>      * of this class.
>      * @param singleFieldIdentity the single field identity to check.
>      * @return returns <code>true</code> if the given the key of the given

>      * <code>SingleFieldIdentity</code> instance equals the key in the subclass
>      * of this class.
>      */
>     public boolean equals(SingleFieldIdentity singleFieldIdentity) {
>         return this.id==((ByteIdentity)singleFieldIdentity).getKey();
>     }
>     
>     public String toString() {
>         return super.toString() + this.id;
>     }
> }
> 
> 
> ------------------------------------------------------------------------
> 
> /*
>  * Copyright 2005 The Apache Software Foundation.
>  * 
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
>  * You may obtain a copy of the License at 
>  * 
>  *     http://www.apache.org/licenses/LICENSE-2.0
>  * 
>  * Unless required by applicable law or agreed to in writing, software 
>  * distributed under the License is distributed on an "AS IS" BASIS, 
>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
>  * See the License for the specific language governing permissions and 
>  * limitations under the License.
>  */
>  
> package org.apache.jdo.tck.pc.singlefieldidentity;
> 
> import java.io.Serializable;
> import java.util.Date;
> 
> import javax.jdo.identity.SingleFieldIdentity;
> 
> /**
>  * This is the super class for all PCPoint single indentity classes.
>  * It defines an abstract method <code>equals(SingleFieldIdentity)</code>.
>  * That method ensures that all single identity test cases have a common
>  * implementation.  
>  * @author Michael Watzek
>  */
> abstract public class PCPointSingleField implements Serializable {
>     
>     /** 
>      * This field is used by subclasses 
>      * to compute the value of the primary key field.
>      */ 
>     static long counter = new Date().getTime();
> 
>     public int x;
>     public Integer y;
> 
>     /**
>      * This constructor is used by test cases checking assertion A7.12-38:<br>
>      * For classes using single field identity method 
>      * <code>PersistenceCapable.newObjectIdInstance()</code> must be called

>      * on a persistent instance with its primary key field initialized, 
>      * or a JDOFatalInternalException is thrown.
>      */
>     public PCPointSingleField() {
>     }
> 
>     /**
>      * This constructor is used by test cases checking assertion A7.12-39:<br>
>      * The instance returned is initialized with the value of the primary key 
>      * field of the instance on which the method is called.
>      * @param x
>      * @param y
>      */
>     public PCPointSingleField(int x, int y) {
>         this.x = x;
>         this.y = new Integer(y);
>     }
> 
>     /**
>      * Returns <code>true</code> if the given the key of the given 
>      * <code>SingleFieldIdentity</code> instance equals the key in the subclass
>      * of this class.
>      * @param singleFieldIdentity the single field identity to check.
>      * @return returns <code>true</code> if the given the key of the given

>      * <code>SingleFieldIdentity</code> instance equals the key in the subclass
>      * of this class.
>      */
>     abstract public boolean equals(SingleFieldIdentity singleFieldIdentity);
> 
>     public String toString() {
>         return '(' + getClass().getName() + ')';
>     }
> 
>     public void setX(int x) {
>         this.x = x;
>     }
> 
>     public int getX() {
>         return x;
>     }
> 
>     public void setY(Integer y) {
>         this.y = y;
>     }
> 
>     public Integer getY() {
>         return y;
>     }
>     
>     public String name() {
>         return " x: " + getX() + ", y: " + getY().intValue();
>     }
> }
> 
> 
> ------------------------------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata 2.0//EN"
"http://java.sun.com/dtd/jdo_2_0.dtd">
> 
> <jdo>
>   <package name="org.apache.jdo.tck.pc.singlefieldidentity">
> 
>     <class name="PCPointSingleFieldPrimitivebyte"
>            identity-type="application" objectid-class="javax.jdo.identity.ByteIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldByte"
>            identity-type="application" objectid-class="javax.jdo.identity.ByteIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitivechar"
>            identity-type="application" objectid-class="javax.jdo.identity.CharIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldCharacter"
>            identity-type="application" objectid-class="javax.jdo.identity.CharIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitiveint"
>            identity-type="application" objectid-class="javax.jdo.identity.IntIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldInteger"
>            identity-type="application" objectid-class="javax.jdo.identity.IntIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitivelong"
>            identity-type="application" objectid-class="javax.jdo.identity.LongIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldLong"
>            identity-type="application" objectid-class="javax.jdo.identity.LongIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitiveshort"
>            identity-type="application" objectid-class="javax.jdo.identity.ShortIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldShort"
>            identity-type="application" objectid-class="javax.jdo.identity.ShortIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>     <class name="PCPointSingleFieldString"
>            identity-type="application" objectid-class="javax.jdo.identity.StringIdentity">
>       <field name="id" primary-key="true"/>
>     </class>
> 
>   </package>
> </jdo>
> 
> 
> ------------------------------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE orm PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Mapping Metadata
2.0//EN" "http://java.sun.com/dtd/orm_2_0.dtd">
> <orm>
>   <package name="org.apache.jdo.tck.pc.singlefieldidentity">
> 
>     <class name="PCPointSingleFieldPrimitivebyte" table="PCPointSingleFieldPrimitivebyte">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldByte" table="PCPointSingleFieldByte">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitivechar" table="PCPointSingleFieldPrimitivechar">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldCharacter" table="PCPointSingleFieldCharacter">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitiveint" table="PCPointSingleFieldPrimitiveint">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldInteger" table="PCPointSingleFieldInteger">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitivelong" table="PCPointSingleFieldPrimitivelong">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldLong" table="PCPointSingleFieldLong">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldPrimitiveshort" table="PCPointSingleFieldPrimitiveshort">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldShort" table="PCPointSingleFieldShort">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>     <class name="PCPointSingleFieldString" table="PCPointSingleFieldString">
>       <field name="id" column="ID" primary-key="true"/>
>       <field name="x" column="X"/>
>       <field name="y" column="Y"/>
>     </class>
> 
>   </package>
> </orm>
> 


-- 
-------------------------------------------------------------------
Michael Watzek                  Tech@Spree Engineering GmbH
mailto:mwa.tech@spree.de        Buelowstr. 66
Tel.:  ++49/30/235 520 36       10783 Berlin - Germany
Fax.:  ++49/30/217 520 12       http://www.spree.de/
-------------------------------------------------------------------

Mime
View raw message