java - Concurrent Modification - JPA AppEngine -


im using java , jpa 1 in google app engine web app. have problem caused by: javax.transaction.xa.xaexception: concurrent modification

profile , viewedprofile corresponding getters , setters:

public class profile {     ...     @onetoone(cascade={cascadetype.persist, cascadetype.remove})     private viewedprofile viewed = null;     ... }   public class viewedprofile {     ...     private linkedhashset<string> viewedby = null;     private linkedhashset<string> profilesviewed = null;     ... } 

the methods error:

public void recentlyviewed (string email, string emailvisited) throws persistenceexception{     entitymanager em = emf.get().createentitymanager();     entitytransaction tx = null;     profile user = null;      try{         tx = em.gettransaction();         tx.begin();          user = em.find(profile.class, email);          //nobody viewed profile yet         if (user.getviewed() == null){             linkedhashset<string> set = new linkedhashset<string>();             set.add( emailvisited );             viewedprofile view = new viewedprofile();             view.setprofilesviewed( set);             user.setviewed( view );          } else if ( user.getviewed().getprofilesviewed().contains( emailvisited ) ){             //remove added bubble             user.getviewed().getprofilesviewed().remove( emailvisited );             user.getviewed().getprofilesviewed().add( emailvisited );         } else {             user.getviewed().getprofilesviewed().add( emailvisited );             if (user.getviewed().getprofilesviewed().size() > max_visited){                 user.getviewed().getprofilesviewed().remove(                         user.getviewed().getprofilesviewed().iterator().next());             }         }          tx.commit();     }finally{         try {             if (tx != null && tx.isactive()) {                 tx.rollback();             }         } {             em.close();         }     }  } 

the stacktrace:

uncaught exception servlet javax.persistence.rollbackexception: transaction failed commit     @ org.datanucleus.jpa.entitytransactionimpl.commit(entitytransactionimpl.java:118)     @ org.datanucleus.store.appengine.jpa.datastoreentitytransactionimpl.commit(datastoreentitytransactionimpl.java:58)     @ ...recentlyviewed(detailsaccess.java:356)     @ ...randomuser(useraction.java:258)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)     @ java.lang.reflect.method.invoke(method.java:45)     @ com.opensymphony.xwork2.defaultactioninvocation.invokeaction(defaultactioninvocation.java:453)     @ com.opensymphony.xwork2.defaultactioninvocation.invokeactiononly(defaultactioninvocation.java:292)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:255)     @ org.apache.struts2.interceptor.debugging.debugginginterceptor.intercept(debugginginterceptor.java:256)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.defaultworkflowinterceptor.dointercept(defaultworkflowinterceptor.java:176)     @ com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.validator.validationinterceptor.dointercept(validationinterceptor.java:265)     @ org.apache.struts2.interceptor.validation.annotationvalidationinterceptor.dointercept(annotationvalidationinterceptor.java:68)     @ com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.conversionerrorinterceptor.intercept(conversionerrorinterceptor.java:138)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.parametersinterceptor.dointercept(parametersinterceptor.java:211)     @ com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.parametersinterceptor.dointercept(parametersinterceptor.java:211)     @ com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.staticparametersinterceptor.intercept(staticparametersinterceptor.java:190)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ org.apache.struts2.interceptor.multiselectinterceptor.intercept(multiselectinterceptor.java:75)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ org.apache.struts2.interceptor.checkboxinterceptor.intercept(checkboxinterceptor.java:90)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ org.apache.struts2.interceptor.fileuploadinterceptor.intercept(fileuploadinterceptor.java:243)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.modeldriveninterceptor.intercept(modeldriveninterceptor.java:100)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.scopedmodeldriveninterceptor.intercept(scopedmodeldriveninterceptor.java:141)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.chaininginterceptor.intercept(chaininginterceptor.java:145)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.prepareinterceptor.dointercept(prepareinterceptor.java:171)     @ com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.i18ninterceptor.intercept(i18ninterceptor.java:176)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ org.apache.struts2.interceptor.servletconfiginterceptor.intercept(servletconfiginterceptor.java:164)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.aliasinterceptor.intercept(aliasinterceptor.java:192)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ com.opensymphony.xwork2.interceptor.exceptionmappinginterceptor.intercept(exceptionmappinginterceptor.java:187)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ ...logininterceptor.intercept(logininterceptor.java:37)     @ com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:249)     @ org.apache.struts2.impl.strutsactionproxy.execute(strutsactionproxy.java:54)     @ org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:510)     @ org.apache.struts2.dispatcher.ng.executeoperations.executeaction(executeoperations.java:77)     @ org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter.dofilter(strutsprepareandexecutefilter.java:91)     @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157)     @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157)     @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157)     @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157)     @ org.mortbay.jetty.servlet.servlethandler$cachedchain.dofilter(servlethandler.java:1157)     @ org.mortbay.jetty.servlet.servlethandler.handle(servlethandler.java:388)     @ org.mortbay.jetty.security.securityhandler.handle(securityhandler.java:216)     @ org.mortbay.jetty.servlet.sessionhandler.handle(sessionhandler.java:182)     @ org.mortbay.jetty.handler.contexthandler.handle(contexthandler.java:765)     @ org.mortbay.jetty.webapp.webappcontext.handle(webappcontext.java:418)     @ org.mortbay.jetty.handler.handlerwrapper.handle(handlerwrapper.java:152)     @ org.mortbay.jetty.server.handle(server.java:326)     @ org.mortbay.jetty.httpconnection.handlerequest(httpconnection.java:542)     @ org.mortbay.jetty.httpconnection$requesthandler.headercomplete(httpconnection.java:923)     @ org.mortbay.jetty.httpconnection.handle(httpconnection.java:404)     @ com.google.tracing.tracecontext$tracecontextrunnable.runincontext(tracecontext.java:480)     @ com.google.tracing.tracecontext$tracecontextrunnable$1.run(tracecontext.java:487)     @ com.google.tracing.tracecontext.runincontext(tracecontext.java:774)     @ com.google.tracing.tracecontext$dointracecontext.runincontext(tracecontext.java:751)     @ com.google.tracing.tracecontext$abstracttracecontextcallback.runininheritedcontextnounref(tracecontext.java:342)     @ com.google.tracing.tracecontext$abstracttracecontextcallback.runininheritedcontext(tracecontext.java:334)     @ com.google.tracing.tracecontext$tracecontextrunnable.run(tracecontext.java:484)     @ java.lang.thread.run(thread.java:722) caused by: javax.persistence.persistenceexception: transaction rolled due failure during commit     @ org.datanucleus.jpa.nucleusjpahelper.getjpaexceptionfornucleusexception(nucleusjpahelper.java:283)     @ org.datanucleus.jpa.entitytransactionimpl.commit(entitytransactionimpl.java:116)     ... 81 more caused by: javax.transaction.xa.xaexception: concurrent modification     @ org.datanucleus.store.appengine.datastorexaresource.commit(datastorexaresource.java:93)     @ org.d...(length 9822) 

i suspect problem linkedhashset, tried in separate project.

public class person {      private linkedhashset<string> viewers = null;      public linkedhashset<string> getviewers() {         return viewers;     }     public void setviewers(linkedhashset<string> viewers) {         this.viewers = viewers;     }  } 

then modification of set:

    person p = new person();     linkedhashset<string> viewers = new linkedhashset<string>();     viewers.add("one");     viewers.add("two");     viewers.add("three");     viewers.add("four");     p.setviewers(viewers);      p.getviewers().remove(p.getviewers().iterator().next());     p.getviewers().remove("two");     p.getviewers().add("two");      (string s: p.getviewers()){         system.out.println(s);     } 

but 1 work. help? thanks


Comments

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -