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

Reply via email to