You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by fmchale <fm...@cisco.com> on 2008/05/15 02:19:29 UTC

OptimisticLockException confusion.

Hi,

I am having trouble catching the OptimisticLockException that is being
thrown when I have concurrent users trying to update the same entity. 
Basically I want to be able to do is to send the one user to another page in
my app when this exception is thrown, but for some reason my attempts to
catch it are not working. I apologize if its something minor, im kinda of
new to java ee. I thought by catching the openjpa OptimisticLockException
and throwing the javax.persistence.OptimisticLockException I could achieve
the desired behaviour in the web app.  But it seems I cannot catch the
openjpa Exception.

Thanks for any help. 


Entity with @version annotation
@Entity
@Table(name="mt_interns")
@DiscriminatorValue("CI")
public class ChoiceIntern extends Intern implements Serializable {
	private static final long serialVersionUID = 1L;

	@Column(name="has_position")
	private boolean hasPosition;
	
	@OneToMany(cascade = ALL,fetch=EAGER)
	@JoinTable(name = "MT_INTERN_CHOICES", joinColumns = { @JoinColumn(name =
"INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHOICE_ID") })
	private List<Choice> choices;
	
	@OneToMany(cascade = ALL,fetch=EAGER)
	@JoinTable(name = "MT_INTERN_SKILLS", joinColumns = { @JoinColumn(name =
"INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name = "SKILL_ID") })
	private List<InternSkill> skills;
......

Stateless Session Bean
...
				Match match = new Match(manager, intern, request, percentage);

				intern.setHasPosition(true);
				numberOfInterns = numberOfInterns + 1;
				request.setNumberOfInternsSelected(numberOfInterns);

				emMatchMaker.merge(intern);
				emMatchMaker.persist(match);
				emMatchMaker.merge(request);
		
				insertedInterns.add(intern);
			} catch (OptimisticException oe) {
				System.out.println("I caught the inner locking exception!");
				
				throw new javax.persistence.OptimisticLockException(oe);
			}
...

Output
7:03:26,296 WARN  [Transaction] Unexpected exception from beforeCompletion;
transaction will roll back
<openjpa-1.0.1-r420667:592145 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException: Optimistic locking
errors were detected when flushing to the data store.  The following objects
may have been concurrently modified in another transaction:
[englrn.matchmaker.model.Request-265,
englrn.matchmaker.model.ChoiceIntern-951]
	at
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2104)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
	at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
	at
org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
	at
org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
	at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
	at
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
	at $Proxy96.addMatches(Unknown Source)
	at
englrn.matchmaker.matching.web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java:570)
	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.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at
com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	at
javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
	at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
	at javax.faces.component.UICommand.broadcast(UICommand.java:121)
	at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:292)
	at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
	at
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at
org.apache.geronimo.jetty6.InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65)
	at
org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
	at
org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
	at
org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
	at
org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59)
	at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
	at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
	at
org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
	at java.lang.Thread.run(Thread.java:595)
Caused by: <openjpa-1.0.1-r420667:592145 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock
violation was detected when flushing object instance
"englrn.matchmaker.model.Request-265" to the data store.  This indicates
that the object was concurrently modified in another transaction.
FailedObject: englrn.matchmaker.model.Request-265
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:160)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:85)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
	... 65 more
NestedThrowables:
<openjpa-1.0.1-r420667:592145 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock
violation was detected when flushing object instance
"englrn.matchmaker.model.ChoiceIntern-951" to the data store.  This
indicates that the object was concurrently modified in another transaction.
FailedObject: englrn.matchmaker.model.ChoiceIntern-951
	at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:101)
	at
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
	at
org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:203)
	at
org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:89)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
	at
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
	at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
	at
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
	at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
	at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
	at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
	at
org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
	at
org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
	at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
	at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
	at
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
	at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
	at
org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
	at $Proxy96.addMatches(Unknown Source)
	at
englrn.matchmaker.matching.web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java:570)
	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.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at
com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
	at
javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
	at
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
	at javax.faces.component.UICommand.broadcast(UICommand.java:121)
	at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:292)
	at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
	at
org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
	at
org.apache.geronimo.jetty6.InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
	at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65)
	at
org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
	at
org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
	at
org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
	at
org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47)
	at
org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59)
	at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
	at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
	at org.mortbay.jetty.Server.handle(Server.java:324)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
	at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
	at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
	at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
	at
org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
	at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
	at java.lang.Thread.run(Thread.java:595)

-- 
View this message in context: http://www.nabble.com/OptimisticLockException-confusion.-tp17243604p17243604.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.


Re: OptimisticLockException confusion.

Posted by Rajeev Jha <jh...@gmail.com>.
Hi

If you trying  commit directly after persist w/o doing an explicit
flush then OptimisticLocking Exception maybe nested inside
RollBackException. What is the top most error on stack? You can catch
javax.persistence.PersistenceException and try to do this kind of
error translation


public static void getThrowable(javax.persistence.PersistenceException
perex, int code) {

		boolean updateError = false ;
		boolean deleteError = false ;
		KentException kentex = null ;
		
		Throwable th = null ;

		if( perex instanceof org.apache.openjpa.persistence.RollbackException) {
			th = perex.getCause();
			if(th instanceof OptimisticLockException) {
				updateError = true ;
			}
		}
		
		if(perex instanceof OptimisticLockException ){
			updateError = true ;
			th = perex ;
		}
		if(perex instanceof org.apache.openjpa.persistence.EntityNotFoundException) {
			deleteError = true ;
			th = perex ;
		}


Thanks

- rajeev.


On Thu, May 15, 2008 at 5:49 AM, fmchale <fm...@cisco.com> wrote:
>
> Hi,
>
> I am having trouble catching the OptimisticLockException that is being
> thrown when I have concurrent users trying to update the same entity.
> Basically I want to be able to do is to send the one user to another page in
> my app when this exception is thrown, but for some reason my attempts to
> catch it are not working. I apologize if its something minor, im kinda of
> new to java ee. I thought by catching the openjpa OptimisticLockException
> and throwing the javax.persistence.OptimisticLockException I could achieve
> the desired behaviour in the web app.  But it seems I cannot catch the
> openjpa Exception.
>
> Thanks for any help.
>
>
> Entity with @version annotation
> @Entity
> @Table(name="mt_interns")
> @DiscriminatorValue("CI")
> public class ChoiceIntern extends Intern implements Serializable {
>        private static final long serialVersionUID = 1L;
>
>        @Column(name="has_position")
>        private boolean hasPosition;
>
>        @OneToMany(cascade = ALL,fetch=EAGER)
>        @JoinTable(name = "MT_INTERN_CHOICES", joinColumns = { @JoinColumn(name =
> "INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name = "CHOICE_ID") })
>        private List<Choice> choices;
>
>        @OneToMany(cascade = ALL,fetch=EAGER)
>        @JoinTable(name = "MT_INTERN_SKILLS", joinColumns = { @JoinColumn(name =
> "INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name = "SKILL_ID") })
>        private List<InternSkill> skills;
> ......
>
> Stateless Session Bean
> ...
>                                Match match = new Match(manager, intern, request, percentage);
>
>                                intern.setHasPosition(true);
>                                numberOfInterns = numberOfInterns + 1;
>                                request.setNumberOfInternsSelected(numberOfInterns);
>
>                                emMatchMaker.merge(intern);
>                                emMatchMaker.persist(match);
>                                emMatchMaker.merge(request);
>
>                                insertedInterns.add(intern);
>                        } catch (OptimisticException oe) {
>                                System.out.println("I caught the inner locking exception!");
>
>                                throw new javax.persistence.OptimisticLockException(oe);
>                        }
> ...
>
> Output
> 7:03:26,296 WARN  [Transaction] Unexpected exception from beforeCompletion;
> transaction will roll back
> <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: Optimistic locking
> errors were detected when flushing to the data store.  The following objects
> may have been concurrently modified in another transaction:
> [englrn.matchmaker.model.Request-265,
> englrn.matchmaker.model.ChoiceIntern-951]
>        at
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2104)
>        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
>        at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
>        at
> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
>        at
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
>        at
> org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
>        at
> org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
>        at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
>        at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
>        at
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>        at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
>        at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
>        at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
>        at
> org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>        at $Proxy96.addMatches(Unknown Source)
>        at
> englrn.matchmaker.matching.web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java:570)
>        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.el.parser.AstValue.invoke(AstValue.java:131)
>        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
>        at
> com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
>        at
> javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
>        at
> org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
>        at javax.faces.component.UICommand.broadcast(UICommand.java:121)
>        at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:292)
>        at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
>        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
>        at
> org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
>        at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
>        at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
>        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
>        at
> org.apache.geronimo.jetty6.InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
>        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
>        at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65)
>        at
> org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
>        at
> org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
>        at
> org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
>        at
> org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59)
>        at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>        at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>        at org.mortbay.jetty.Server.handle(Server.java:324)
>        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>        at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
>        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>        at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>        at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
>        at
> org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>        at java.lang.Thread.run(Thread.java:595)
> Caused by: <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock
> violation was detected when flushing object instance
> "englrn.matchmaker.model.Request-265" to the data store.  This indicates
> that the object was concurrently modified in another transaction.
> FailedObject: englrn.matchmaker.model.Request-265
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java:160)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:85)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>        at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
>        at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>        ... 65 more
> NestedThrowables:
> <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: An optimistic lock
> violation was detected when flushing object instance
> "englrn.matchmaker.model.ChoiceIntern-951" to the data store.  This
> indicates that the object was concurrently modified in another transaction.
> FailedObject: englrn.matchmaker.model.ChoiceIntern-951
>        at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:101)
>        at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
>        at
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:203)
>        at
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:89)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>        at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
>        at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
>        at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
>        at
> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
>        at
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
>        at
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
>        at
> org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
>        at
> org.apache.openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
>        at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
>        at
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
>        at
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>        at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
>        at
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
>        at
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
>        at
> org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>        at $Proxy96.addMatches(Unknown Source)
>        at
> englrn.matchmaker.matching.web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java:570)
>        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.el.parser.AstValue.invoke(AstValue.java:131)
>        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
>        at
> com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
>        at
> javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:75)
>        at
> org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:54)
>        at javax.faces.component.UICommand.broadcast(UICommand.java:121)
>        at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:292)
>        at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
>        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
>        at
> org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
>        at
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
>        at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
>        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
>        at
> org.apache.geronimo.jetty6.InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
>        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
>        at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
>        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access$101(TwistyWebAppContext.java:40)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext$TwistyHandler.handle(TwistyWebAppContext.java:65)
>        at
> org.apache.geronimo.jetty6.handler.ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
>        at
> org.apache.geronimo.jetty6.handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
>        at
> org.apache.geronimo.jetty6.handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
>        at
> org.apache.geronimo.jetty6.handler.ComponentContextHandler.handle(ComponentContextHandler.java:47)
>        at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java:59)
>        at
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
>        at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
>        at org.mortbay.jetty.Server.handle(Server.java:324)
>        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
>        at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:842)
>        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
>        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
>        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
>        at
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
>        at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
>        at
> org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:344)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>        at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>        at java.lang.Thread.run(Thread.java:595)
>
> --
> View this message in context: http://www.nabble.com/OptimisticLockException-confusion.-tp17243604p17243604.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>
>

Re: OptimisticLockException confusion.

Posted by Craig L Russell <Cr...@Sun.COM>.
Hi,

Usually, inserts/updates/deletes are grouped for efficiency when the  
transaction is ended.

But for your case, you want to force the update to the database while  
you are still in control.

Try EntityManager.flush() and catch the exceptions.

Craig

On May 14, 2008, at 5:19 PM, fmchale wrote:

>
> Hi,
>
> I am having trouble catching the OptimisticLockException that is being
> thrown when I have concurrent users trying to update the same entity.
> Basically I want to be able to do is to send the one user to another  
> page in
> my app when this exception is thrown, but for some reason my  
> attempts to
> catch it are not working. I apologize if its something minor, im  
> kinda of
> new to java ee. I thought by catching the openjpa  
> OptimisticLockException
> and throwing the javax.persistence.OptimisticLockException I could  
> achieve
> the desired behaviour in the web app.  But it seems I cannot catch the
> openjpa Exception.
>
> Thanks for any help.
>
>
> Entity with @version annotation
> @Entity
> @Table(name="mt_interns")
> @DiscriminatorValue("CI")
> public class ChoiceIntern extends Intern implements Serializable {
> 	private static final long serialVersionUID = 1L;
>
> 	@Column(name="has_position")
> 	private boolean hasPosition;
> 	
> 	@OneToMany(cascade = ALL,fetch=EAGER)
> 	@JoinTable(name = "MT_INTERN_CHOICES", joinColumns =  
> { @JoinColumn(name =
> "INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name =  
> "CHOICE_ID") })
> 	private List<Choice> choices;
> 	
> 	@OneToMany(cascade = ALL,fetch=EAGER)
> 	@JoinTable(name = "MT_INTERN_SKILLS", joinColumns =  
> { @JoinColumn(name =
> "INTERN_ID") }, inverseJoinColumns = { @JoinColumn(name =  
> "SKILL_ID") })
> 	private List<InternSkill> skills;
> ......
>
> Stateless Session Bean
> ...
> 				Match match = new Match(manager, intern, request, percentage);
>
> 				intern.setHasPosition(true);
> 				numberOfInterns = numberOfInterns + 1;
> 				request.setNumberOfInternsSelected(numberOfInterns);
>
> 				emMatchMaker.merge(intern);
> 				emMatchMaker.persist(match);
> 				emMatchMaker.merge(request);
> 		
> 				insertedInterns.add(intern);
> 			} catch (OptimisticException oe) {
> 				System.out.println("I caught the inner locking exception!");
> 				
> 				throw new javax.persistence.OptimisticLockException(oe);
> 			}
> ...
>
> Output
> 7:03:26,296 WARN  [Transaction] Unexpected exception from  
> beforeCompletion;
> transaction will roll back
> <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: Optimistic  
> locking
> errors were detected when flushing to the data store.  The following  
> objects
> may have been concurrently modified in another transaction:
> [englrn.matchmaker.model.Request-265,
> englrn.matchmaker.model.ChoiceIntern-951]
> 	at
> org 
> .apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java: 
> 2104)
> 	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
> 	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java: 
> 1852)
> 	at
> org 
> .apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java: 
> 1770)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionManagerImpl.commit(TransactionManagerImpl.java: 
> 245)
> 	at
> org 
> .apache 
> .openejb 
> .core 
> .transaction 
> .TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
> 	at
> org 
> .apache 
> .openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer._invoke(StatelessContainer.java: 
> 233)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer._invoke(StatelessContainer.java: 
> 188)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
> 	at
> org 
> .apache 
> .openejb 
> .core 
> .ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java: 
> 217)
> 	at
> org 
> .apache 
> .openejb 
> .core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> 	at
> org 
> .apache 
> .openejb 
> .core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
> 	at
> org 
> .apache 
> .openejb 
> .util 
> .proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
> 	at $Proxy96.addMatches(Unknown Source)
> 	at
> englrn 
> .matchmaker 
> .matching 
> .web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java: 
> 570)
> 	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.el.parser.AstValue.invoke(AstValue.java:131)
> 	at  
> org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java: 
> 276)
> 	at
> com 
> .sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java: 
> 68)
> 	at
> javax 
> .faces 
> .component 
> ._MethodExpressionToMethodBinding 
> .invoke(_MethodExpressionToMethodBinding.java:75)
> 	at
> org 
> .apache 
> .myfaces 
> .application 
> .ActionListenerImpl.processAction(ActionListenerImpl.java:54)
> 	at javax.faces.component.UICommand.broadcast(UICommand.java:121)
> 	at  
> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java: 
> 292)
> 	at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
> 	at  
> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java: 
> 117)
> 	at
> org 
> .apache 
> .myfaces 
> .lifecycle 
> .InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
> 	at
> org 
> .apache 
> .myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
> 	at
> org 
> .apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
> 	at  
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
> 	at  
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: 
> 362)
> 	at
> org 
> .mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 
> 216)
> 	at  
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 
> 181)
> 	at  
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: 
> 726)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 
> 405)
> 	at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access 
> $101(TwistyWebAppContext.java:40)
> 	at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext 
> $TwistyHandler.handle(TwistyWebAppContext.java:65)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler 
> .ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.ComponentContextHandler.handle(ComponentContextHandler.java: 
> 47)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java: 
> 59)
> 	at
> org 
> .mortbay 
> .jetty 
> .handler 
> .ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
> 	at
> org 
> .mortbay 
> .jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> 	at  
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 
> 139)
> 	at org.mortbay.jetty.Server.handle(Server.java:324)
> 	at  
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 
> 505)
> 	at
> org.mortbay.jetty.HttpConnection 
> $RequestHandler.content(HttpConnection.java:842)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
> 	at
> org 
> .mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java: 
> 395)
> 	at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
> 	at
> org.apache.geronimo.pool.ThreadPool 
> $ContextClassLoaderRunnable.run(ThreadPool.java:344)
> 	at
> java.util.concurrent.ThreadPoolExecutor 
> $Worker.runTask(ThreadPoolExecutor.java:650)
> 	at
> java.util.concurrent.ThreadPoolExecutor 
> $Worker.run(ThreadPoolExecutor.java:675)
> 	at java.lang.Thread.run(Thread.java:595)
> Caused by: <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: An  
> optimistic lock
> violation was detected when flushing object instance
> "englrn.matchmaker.model.Request-265" to the data store.  This  
> indicates
> that the object was concurrently modified in another transaction.
> FailedObject: englrn.matchmaker.model.Request-265
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc 
> .kernel 
> .AbstractUpdateManager.populateRowManager(AbstractUpdateManager.java: 
> 160)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java: 
> 85)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java: 
> 72)
> 	at
> org 
> .apache 
> .openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> 	at
> org 
> .apache 
> .openjpa 
> .kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> 	... 65 more
> NestedThrowables:
> <openjpa-1.0.1-r420667:592145 nonfatal store error>
> org.apache.openjpa.persistence.OptimisticLockException: An  
> optimistic lock
> violation was detected when flushing object instance
> "englrn.matchmaker.model.ChoiceIntern-951" to the data store.  This
> indicates that the object was concurrently modified in another  
> transaction.
> FailedObject: englrn.matchmaker.model.ChoiceIntern-951
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc 
> .kernel 
> .PreparedStatementManagerImpl 
> .flushInternal(PreparedStatementManagerImpl.java:101)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc 
> .kernel 
> .PreparedStatementManagerImpl 
> .flush(PreparedStatementManagerImpl.java:73)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc 
> .kernel 
> .OperationOrderUpdateManager 
> .flushPrimaryRow(OperationOrderUpdateManager.java:203)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc 
> .kernel 
> .OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java: 
> 89)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java: 
> 89)
> 	at
> org 
> .apache 
> .openjpa 
> .jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java: 
> 72)
> 	at
> org 
> .apache 
> .openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> 	at
> org 
> .apache 
> .openjpa 
> .kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> 	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
> 	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java: 
> 1852)
> 	at
> org 
> .apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java: 
> 1770)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
> 	at
> org 
> .apache 
> .geronimo 
> .transaction 
> .manager.TransactionManagerImpl.commit(TransactionManagerImpl.java: 
> 245)
> 	at
> org 
> .apache 
> .openejb 
> .core 
> .transaction 
> .TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
> 	at
> org 
> .apache 
> .openejb.core.transaction.TxRequired.afterInvoke(TxRequired.java:75)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer._invoke(StatelessContainer.java: 
> 233)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer._invoke(StatelessContainer.java: 
> 188)
> 	at
> org 
> .apache 
> .openejb 
> .core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
> 	at
> org 
> .apache 
> .openejb 
> .core 
> .ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java: 
> 217)
> 	at
> org 
> .apache 
> .openejb 
> .core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> 	at
> org 
> .apache 
> .openejb 
> .core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
> 	at
> org 
> .apache 
> .openejb 
> .util 
> .proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
> 	at $Proxy96.addMatches(Unknown Source)
> 	at
> englrn 
> .matchmaker 
> .matching 
> .web.LoginBackingBean.addSelectedInternItems(LoginBackingBean.java: 
> 570)
> 	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.el.parser.AstValue.invoke(AstValue.java:131)
> 	at  
> org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java: 
> 276)
> 	at
> com 
> .sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java: 
> 68)
> 	at
> javax 
> .faces 
> .component 
> ._MethodExpressionToMethodBinding 
> .invoke(_MethodExpressionToMethodBinding.java:75)
> 	at
> org 
> .apache 
> .myfaces 
> .application 
> .ActionListenerImpl.processAction(ActionListenerImpl.java:54)
> 	at javax.faces.component.UICommand.broadcast(UICommand.java:121)
> 	at  
> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java: 
> 292)
> 	at javax.faces.component.UIViewRoot.process(UIViewRoot.java:209)
> 	at  
> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java: 
> 117)
> 	at
> org 
> .apache 
> .myfaces 
> .lifecycle 
> .InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
> 	at
> org 
> .apache 
> .myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:103)
> 	at
> org 
> .apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> 	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:148)
> 	at  
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .InternalJettyServletHolder.handle(InternalJettyServletHolder.java:65)
> 	at  
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java: 
> 362)
> 	at
> org 
> .mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java: 
> 216)
> 	at  
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 
> 181)
> 	at  
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java: 
> 726)
> 	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: 
> 405)
> 	at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext.access 
> $101(TwistyWebAppContext.java:40)
> 	at
> org.apache.geronimo.jetty6.handler.TwistyWebAppContext 
> $TwistyHandler.handle(TwistyWebAppContext.java:65)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler 
> .ThreadClassloaderHandler.handle(ThreadClassloaderHandler.java:46)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.InstanceContextHandler.handle(InstanceContextHandler.java:58)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.UserTransactionHandler.handle(UserTransactionHandler.java:48)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6 
> .handler.ComponentContextHandler.handle(ComponentContextHandler.java: 
> 47)
> 	at
> org 
> .apache 
> .geronimo 
> .jetty6.handler.TwistyWebAppContext.handle(TwistyWebAppContext.java: 
> 59)
> 	at
> org 
> .mortbay 
> .jetty 
> .handler 
> .ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
> 	at
> org 
> .mortbay 
> .jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> 	at  
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java: 
> 139)
> 	at org.mortbay.jetty.Server.handle(Server.java:324)
> 	at  
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: 
> 505)
> 	at
> org.mortbay.jetty.HttpConnection 
> $RequestHandler.content(HttpConnection.java:842)
> 	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:648)
> 	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
> 	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
> 	at
> org 
> .mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java: 
> 395)
> 	at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:214)
> 	at
> org.apache.geronimo.pool.ThreadPool 
> $ContextClassLoaderRunnable.run(ThreadPool.java:344)
> 	at
> java.util.concurrent.ThreadPoolExecutor 
> $Worker.runTask(ThreadPoolExecutor.java:650)
> 	at
> java.util.concurrent.ThreadPoolExecutor 
> $Worker.run(ThreadPoolExecutor.java:675)
> 	at java.lang.Thread.run(Thread.java:595)
>
> -- 
> View this message in context: http://www.nabble.com/OptimisticLockException-confusion.-tp17243604p17243604.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!