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

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.
>>> --
>>> View this message in context: http://www.nabble.com/Non-transactional-sequenced-ID-generation-causes-unique-constraint-violation-tp20054596p20054596.html
>>> Sent from the EclipseLink - Users mailing list archive at Nabble.com.
>>>
>>> _______________________________________________
>>> eclipselink-users mailing list
>>> eclipselink-users@xxxxxxxxxxx
>>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>>
>> _______________________________________________
>> eclipselink-users mailing list
>> eclipselink-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>


Back to the top