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

Tim McConnell commented on OPENJPA-466:
---------------------------------------

Hi Milosz, here is what I've done over the past couple days. I have two 
machines -- Windows XP, Windows 2003 -- each with MySQL (8.3 on one machine, 
8.4 on the other machine), DB2 (8.2 and 9.5), and Oracle (10g on both) 
installed on them. To reproduce the original problem I use 25000 entities, 6 
iterations, and 8 threads in the TestSequence test program. With these settings 
I can easily reproduce the failure on both machines on all three databases. 
Here are the results of the various patches attached to this JIRA. Note that I 
raised the number entities to 40000 to stress each patch (but still used 6 
iterations and 8 threads):

1. Patch OPENJPA-466 (attached by you with the change to AbstractJDBCSeq.java): 
Failures on all three databases on both machines. Note that the failures 
manifest themselves differently on each database. For example the failures on 
PostgreSQL show up as 

ERROR: duplicate key value violates unique constraint 

on Oracle as: ORA-00001: unique constraint (SYSTEM.SYS_C008294) violated

and finally on DB2 as:  org.apache.openjpa.persistence.EntityExistsException: 
DB2 SQL error: SQLCODE: -803, SQLSTATE: 23505

2. Patch volite.patch only (i.e., no other patches used): Failures on all three 
databases on both machines

3. Patch OPENJPA-466-SYNCHRONIZED.patch only (which is a modified version of my 
original patch but is what was originally committed to trunk): Success on all 
three databases on both machines.

So here are my recommendations:

The OPENJPA-466-SYNCHRONIZED patch works in all scenarios that I've tested it 
in. More importantly, it fixed the original problem reported by the user, and 
has no adverse impact on performance. Please note as well that that user 
environment was an extremely large, high-volume, multi-threaded, multi-core 
installation. Not meaning to be overly brusque -- but it simply works in every 
scenario that it's been used it. Until or unless someone (other than me as I 
don't intend to spend any more time on this JIRA) can provide a scenario where 
it does not work it should be committed to trunk and retrofitted to all 
previous versions of OpenJPA, and any previously-committed patches should be 
reverted. Thanks much



> Primary key constraint violated using (Oracle) sequence to generate ID in 
> multithreaded app
> -------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-466
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-466
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.0.0, 1.0.1, 1.1.0, 1.2.0
>         Environment: OpenJPA 1.0.0 (also tried 1.0.1 and 1.1.0-SNAPSHOT)
> Oracle XE 10g (JDBC driver 10.2.0.3.0)
> Windows XP Pro
>            Reporter: Frank Le
>            Assignee: Milosz Tylenda
>            Priority: Blocker
>             Fix For: 2.0.0
>
>         Attachments: OPENJPA-466-SYNCRONIZED.patch, OPENJPA-466.patch, 
> OPENJPA-466.patch, volatile.patch
>
>
> Here's how I annotate the ID:
>     @Id
>     @SequenceGenerator(name = "FooSeq", sequenceName = "seq_foo", 
> allocationSize = 20)
>     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FooSeq")
>     private Long id;
> Here's how I create the (Oracle) sequence:
> CREATE SEQUENCE seq_foo START WITH 1 INCREMENT BY 1;
> I get a primary key unique constraint violated in a multithreaded app i.e. it 
> doesn't happen in single-threaded!
> You can simply reproduce this error by either create blocking queue or 
> blocking thread pool say size 5 to insert 10000+ object.

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