openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeremy Bauer (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-1336) Intermittent test failure in org.apache.openjpa.persistence.generationtype.TestGeneratedValues when running on MySQL
Date Mon, 05 Oct 2009 14:45:31 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-1336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12762196#action_12762196
] 

Jeremy Bauer commented on OPENJPA-1336:
---------------------------------------

I documented this issue in a test case a while back, but unfortunately, did not add the caveat
to the user docs.

>From TestGeneratedValues.testUUIDGenerators():
+ // Compare original hex values with new values. They should be equal.
+ // Note: UUID 'string' values are not compared. In most cases they will
+ // be the same, but in an environment where data is converted to
+ // a considerably different character encoding of the database (ex.
+ // Unicode -> EBCDIC) upon persistence, the uuid string returned by the
+ // database may not be equal to the original value. This is a common
+ // issue with string data, but even more likely for a uuids given that
+ // uuid strings are produced from pseudo-random byte arrays, which yield
+ // all sorts of variant characters.

IMHO, using uuid-string is a bad idea since, depending on the platform (client and db) it
could lead to data conversion issues. uuid-hex or uuid-type4-hex is a much better choice since
invariant characters are used to represent the uuid. Changing the default encoding could drastically
affect the behavior of existing apps so I wouldn't recommend it. Have you considered adding
a configuration property to allow users to configure the default encoding to use when generating
uuid strings? That would maintain backward compatibility and provide a configurable solution
for issues such as these.

> Intermittent test failure in org.apache.openjpa.persistence.generationtype.TestGeneratedValues
when running on MySQL
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1336
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1336
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: lib
>            Reporter: Rick Curtis
>         Attachments: OPENJPA-1336.test.patch
>
>
> As reported in OPENJPA-1168:
> Milosz Tylenda added a comment - 09/Jul/09 09:17 AM
> This reminds me of a test case which sometimes fails for me while running against MySQL
and which I did not have time to look at. Maybe this is connected although the test case is
single-threaded. The stack trace I am receiving is:
> testDefaultValues(org.apache.openjpa.persistence.generationtype.TestGeneratedValues)
Time elapsed: 0.787 sec <<< FAILURE!
> junit.framework.AssertionFailedError
>         at junit.framework.Assert.fail(Assert.java:47)
>         at junit.framework.Assert.assertTrue(Assert.java:20)
>         at junit.framework.Assert.assertFalse(Assert.java:34)
>         at junit.framework.Assert.assertFalse(Assert.java:41)
>         at org.apache.openjpa.persistence.generationtype.TestGeneratedValues.testDefaultValues(TestGeneratedValues.java:49)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at junit.framework.TestCase.runTest(TestCase.java:154)
>         at junit.framework.TestCase.runBare(TestCase.java:127)
>         at org.apache.openjpa.persistence.test.PersistenceTestCase.runBare(PersistenceTestCase.java:466)
>         at junit.framework.TestResult$1.protect(TestResult.java:106)
>         at junit.framework.TestResult.runProtected(TestResult.java:124)
>         at junit.framework.TestResult.run(TestResult.java:109)
>         at junit.framework.TestCase.run(TestCase.java:118)
>         at org.apache.openjpa.persistence.test.PersistenceTestCase.run(PersistenceTestCase.java:181)
>         at junit.framework.TestSuite.runTest(TestSuite.java:208)
>         at junit.framework.TestSuite.run(TestSuite.java:203)
>         at sun.reflect.GeneratedMethodAccessor58.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
>         at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
>         at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
>         at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
>         at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
> The TestGeneratedValues.java:49 contains:
>         assertFalse(gv.getUuidstring().equals(gv2.getUuidstring()));
> This means UUID generator sometimes generates duplicates. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message