Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Non transactional sequenced ID generation causes unique constraint violation

Also ensure your id is null/0 before you persist your object.  And that your
application is not persisting the same object to multiple different entity
managers.



Tim Hollosy wrote:
> 
> Shouldn't you be seeing the select nextval from DUAL before your
> inserts? If all of those statements are happening I'm not sure how you
> could run into concurrency issues...
> 
> ./tch
> 
> 
> 
> On Mon, Oct 20, 2008 at 1:30 AM, Mohsen Saboorian <mohsens@xxxxxxxxx>
> wrote:
>> Yes, it's an Oracle sequence 10g.
>>
>> On Mon, Oct 20, 2008 at 1:13 AM, Tim Hollosy <hollosyt@xxxxxxxxx> wrote:
>>> So your sequence is pulling from the DB, correct?
>>>
>>> ./tch
>>>
>>>
>>>
>>> On Sun, Oct 19, 2008 at 5:51 AM, Mohsen Saboorian <mohsens@xxxxxxxxx>
>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> In a RESOURCE_LOCAL environment we get the following exception when we
>>>> stress test the system using 20 concurrent users. The test scenario is
>>>> quite
>>>> simple: Open new form for entity E1, fill the form, and press Save
>>>> button.
>>>>
>>>> Our JPA code is like this:
>>>>
>>>> EntityTransaction tx = em.getTransaction()
>>>> try {
>>>>        tx.begin();
>>>>        em.persist(obj);
>>>>        em.flush();
>>>>        tx.commit();
>>>> } catch (Exception ex) {
>>>>        if (tx.isActive()) tx.rollback();
>>>>        ex.printStackTrace();
>>>> }
>>>>
>>>>
>>>> The error is as follows:
>>>>
>>>> [ITO]  INFO (EmaSessionListener.java:17) Initializing user
>>>> configurations.
>>>> [EL Warning]: 2008.10.19
>>>> 13:00:54.668--UnitOfWork(5099540)--Thread(Thread[http-8080-Processor24,5,main])--Exception
>>>> [EclipseLink-4002] (Eclipse Persistence Services - 1.0.1 (Build
>>>> 20080905)):
>>>> org.eclipse.persistence.exceptions.DatabaseException
>>>> Internal Exception: java.sql.SQLException: ORA-00001: unique constraint
>>>> (EMA1.SYS_C005509) violated
>>>>
>>>> Error Code: 1
>>>> Call: INSERT INTO TB_EXPERTIZE (XPT_ID, XPT_CODE, XPT_WAGE,
>>>> XPT_PROFICIENCY,
>>>> XPT_LAST_UPDATE, XPT_MISSION_WAGE) VALUES (?, ?, ?, ?, ?, ?)
>>>>        bind => [48054, null, 1212, poi, 2008-11-08, 1212]
>>>> Query: InsertObjectQuery(Expertize (48054))
>>>> [ITO] ERROR (BaseSession.java:205) Save object Expertize (48054) failed
>>>> for
>>>> class: Expertize
>>>> javax.persistence.PersistenceException: Exception [EclipseLink-4002]
>>>> (Eclipse Persistence Services - 1.0.1 (Build 20080905)):
>>>> org.eclipse.persistence.exceptions.DatabaseException
>>>> Internal Exception: java.sql.SQLException: ORA-00001: unique constraint
>>>> (EMA1.SYS_C005509) violated
>>>>
>>>> Error Code: 1
>>>> Call: INSERT INTO TB_EXPERTIZE (XPT_ID, XPT_CODE, XPT_WAGE,
>>>> XPT_PROFICIENCY,
>>>> XPT_LAST_UPDATE, XPT_MISSION_WAGE) VALUES (?, ?, ?, ?, ?, ?)
>>>>        bind => [48054, null, 1212, poi, 2008-11-08, 1212]
>>>> Query: InsertObjectQuery(Expertize (48054))
>>>>        at
>>>> org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:387)
>>>>        at net.itorbit.ema.biz.BaseSession.save(BaseSession.java:203)
>>>>        at
>>>> net.itorbit.ema.biz.BaseInfoSession.save(BaseInfoSession.java:32)
>>>>        at
>>>> net.itorbit.ema.action.ExpertizeAction.executeSave(ExpertizeAction.java:39)
>>>>        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.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
>>>>        at
>>>> org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
>>>>        at
>>>> org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
>>>>        at
>>>> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>>>>        at
>>>> org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
>>>>        at
>>>> org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
>>>>        at
>>>> org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
>>>>        at
>>>> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
>>>>        at
>>>> org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
>>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
>>>>        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>>>>        at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>>>>        at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>>>>        at
>>>> net.itorbit.ema.helper.LocaleFilter.doFilter(LocaleFilter.java:20)
>>>>        at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>>>>        at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>>>>        at
>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>>>>        at
>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>>>>        at
>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>>>>        at
>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>>>>        at
>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>>>>        at
>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>>>>        at
>>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>>>>        at
>>>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
>>>>        at
>>>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>>>>        at
>>>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>>>>        at
>>>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>>>>        at java.lang.Thread.run(Thread.java:595)
>>>> Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services -
>>>> 1.0.1 (Build 20080905)):
>>>> org.eclipse.persistence.exceptions.DatabaseException
>>>> Internal Exception: java.sql.SQLException: ORA-00001: unique constraint
>>>> (EMA1.SYS_C005509) viola
>>>>
>>>>
>>>> The ID annotation code in the entity is like this:
>>>>        @Id
>>>>        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator =
>>>> "ema_id_sq")
>>>>        public Long getId() {
>>>>                return id;
>>>>        }
>>>>
>>>> Where ema_id_sq is:
>>>> @SequenceGenerator(name = "ema_id_sq")
>>>>
>>>>
>>>> Thanks,
>>>> Mohsen.
>>>> --
> 


-----
---
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
-- 
View this message in context: http://www.nabble.com/Non-transactional-sequenced-ID-generation-causes-unique-constraint-violation-tp20054596p20068288.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top