db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig Russell (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JDO-263) TestArrayCollections: Field "org.apache.jdo.tck.pc.fieldtypes.ArrayCollections.ArrayOfObject1" is declared as a reference type (interface/Object) but no implementation classes of "java.lang.Object" have been found!
Date Fri, 06 Jan 2006 21:55:15 GMT
    [ http://issues.apache.org/jira/browse/JDO-263?page=comments#action_12362010 ] 

Craig Russell commented on JDO-263:
-----------------------------------

The way JPOX stores serialized data is found in org.jpox.store.rdbms.mapping. Blob2RDBMSMapping.
The code that transforms BigDecimal[ ] for storage is:
                else if (value instanceof BigDecimal[ ])
                {
                    byte[ ] data = TypeConversionHelper.getByteArrayFromBigDecimalArray(value);
                    ((PreparedStatement) ps).setBytes(param, data);
                }

Looking at the code in JPOX org.jpox.util.TypeConversionHelper, we notice what appears to
be a big problem.

    /**
     * Convert an instance of our value class into a byte[].
     *
     * @param value Object to be converted
     *
     * @return converted byte array
     */
    public static byte[] getByteArrayFromBigDecimalArray(Object value)
    {
        if (value == null)
        {
            return null;
        }

        BigDecimal[] a = (BigDecimal[]) value;
        double[] d = new double[a.length];

        for (int i=0; i < a.length; i++)
        {
            d[i] = a[i].doubleValue();
        }

        return getByteArrayFromDoubleArray(d);
    }    

It appears that to serialize a BigDecimal[ ] it would be better to avoid converting the BigDecimal[
] to a double[ ]. Converting to a double[ ] is where the precision is lost. Some other techique
for serializing BigDecimal[ ] is needed here.


> TestArrayCollections: Field "org.apache.jdo.tck.pc.fieldtypes.ArrayCollections.ArrayOfObject1"
is declared as a reference type (interface/Object) but no implementation classes of "java.lang.Object"
have been found!
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>          Key: JDO-263
>          URL: http://issues.apache.org/jira/browse/JDO-263
>      Project: JDO
>         Type: Bug
>   Components: tck20
>     Reporter: Michelle Caisse
>     Assignee: Andy Jefferson
>  Attachments: jdo-263.patch
>
> test(org.apache.jdo.tck.models.fieldtypes.TestArrayCollections)javax.jdo.JDOUserException:
Field "org.apache.jdo.tck.pc.fieldtypes.ArrayCollections.ArrayOfObject1" is declared as a
reference type (interface/Object) but no implementation classes of "java.lang.Object" have
been found!
> 	at org.jpox.metadata.MetaDataUtils.getImplementationNamesForReferenceField(MetaDataUtils.java:594)
> 	at org.jpox.store.rdbms.table.ColumnCreator.createColumnsForReferenceField(ColumnCreator.java:184)
> 	at org.jpox.store.rdbms.table.ColumnCreator.createColumnsForField(ColumnCreator.java:296)
> 	at org.jpox.store.rdbms.table.ColumnCreator.createColumns(ColumnCreator.java:95)
> 	at org.jpox.store.rdbms.table.ArrayTable.initialize(ArrayTable.java:83)
> 	at org.jpox.store.rdbms.RDBMSManager$ClassAdder.addClassTablesAndValidate(RDBMSManager.java:2404)
> 	at org.jpox.store.rdbms.RDBMSManager$ClassAdder.run(RDBMSManager.java:2033)
> 	at org.jpox.store.rdbms.RDBMSManager$MgmtTransaction.execute(RDBMSManager.java:1893)
> 	at org.jpox.store.rdbms.RDBMSManager.addClasses(RDBMSManager.java:479)
> 	at org.jpox.store.rdbms.RDBMSManager.addClass(RDBMSManager.java:493)
> 	at org.jpox.store.rdbms.RDBMSManager.getDatastoreClass(RDBMSManager.java:766)
> 	at org.jpox.state.StateManagerImpl.populateStrategyFields(StateManagerImpl.java:781)
> 	at org.jpox.state.StateManagerImpl.<init>(StateManagerImpl.java:584)
> 	at org.jpox.AbstractPersistenceManager.internalMakePersistent(AbstractPersistenceManager.java:1076)
> 	at org.jpox.AbstractPersistenceManager.makePersistent(AbstractPersistenceManager.java:1131)
> 	at org.apache.jdo.tck.models.fieldtypes.TestArrayCollections.runTest(TestArrayCollections.java:93)
> 	at org.apache.jdo.tck.models.fieldtypes.TestArrayCollections.test(TestArrayCollections.java:69)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:204)
> 	at org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:120)
> 	at org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:95)

-- 
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


Mime
View raw message