Rick, Thanks, the problem seemed fixed, another problem occurred though (fortunately it seems tractable.)
I know the dynamic enhancement is kind of buggy, however it was convenient when developing. Because I have not encountered bugs, I have continued using it. If some one has what may happen when using dynamic enhancing, let me know it. Thanks. On Mar 3, 2011, at 02:25 , Rick Curtis wrote: > Kawanaka - > > I'm pretty certain this has to do with setting RuntimeUnenhancedClasses to > supported. Don't do that. > > Please configure build time enhancement, or the javaagent[1]. > > [1] http://openjpa.apache.org/runtime-enhancement.html > > Thanks, > Rick > > On Wed, Mar 2, 2011 at 11:20 AM, KAWANAKA Shinya <[email protected]>wrote: > >> Rick, >> >> I used runtime enhancement at that time. The below is extracted from my >> persistence.xml (password etc. are omitted.) >> # DataCache and QueryCache are off here, but I tried all the possibilities. >> >> >> >> <persistence-unit name="postgres"> >> >> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> >> >> <class>entity.Questionnaire</class> >> >> <properties> >> <property name="openjpa.ConnectionDriverName" >> value="org.apache.commons.dbcp.BasicDataSource"/> >> <property name="openjpa.ConnectionProperties" >> value="DriverClassName=org.postgresql.Driver,Url=jdbc:postgresql:omitted,Username=omitted,Password=omitted"/> >> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> >> >> <property name="openjpa.jdbc.DBDictionary" value="postgres" /> >> >> <property name="openjpa.jdbc.SynchronizeMappings" >> value="buildSchema(SchemaAction='drop,add')" /> >> <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/> >> >> <property name="openjpa.DataCache" value="false"/> >> <property name="openjpa.QueryCache" value="false"/> >> <property name="openjpa.RemoteCommitProvider" value="sjvm"/> >> </properties> >> >> </persistence-unit> >> >> >> On Mar 3, 2011, at 02:11 , Rick Curtis wrote: >> >>> Kawanaka - >>> >>> I'm going to start with my typical first question.... How are you >> enhancing >>> your Entities? Can you post the contents of your persistence.xml file? >>> >>> Thanks, >>> Rick >>> >>> On Wed, Mar 2, 2011 at 10:31 AM, KAWANAKA Shinya <[email protected] >>> wrote: >>> >>>> Hi list, >>>> >>>> I encountered the weird situation that an optimistic lock violation >>>> happened. I would like you to judge this is my fault or a bug. >>>> >>>> First I created an entity listed on here ( >> https://gist.github.com/851075). >>>> Then I wrote several tests that used the entity. In the following test, >> an >>>> optimistic lock violation happened. >>>> >>>> === CODE STARTS HERE === >>>> EntityManager em = emf.createEntityManager(); >>>> { >>>> em.getTransaction().begin(); >>>> for (int i = 0; i < 10; ++i) { >>>> Questionnaire q = new Questionnaire("id" + i, "eventId", >>>> "question", i, "answerText"); >>>> em.persist(q); >>>> } >>>> // em.flush(); // (1) >>>> em.getTransaction().commit(); >>>> } >>>> >>>> { >>>> em.getTransaction().begin(); >>>> // em.flush(); // (3) >>>> Query q = em.createQuery("DELETE FROM Questionnaires t"); >>>> q.executeUpdate(); >>>> em.getTransaction().commit(); // (2) >>>> } >>>> >>>> em.close(); >>>> === CODE END HERE === >>>> >>>> In (2) the exception happened. The stack trace is attached at the last. >>>> When I changed the field type of 'questionNo' to Integer (int -> >> Integer), >>>> the violation did not happen. >>>> >>>> Some one advised me to use flush() at (1), but it did not help. >>>> >>>> When I added (3) and traced the function, I found that >>>> ImplHelper.getUpdateField(sm) in >> AbstractUpdateManager#populateRowManager >>>> returned a dirty flag that said the 'questionNo' was dirty. >>>> >>>> === CODE HERE === >>>> } else if ((dirty = ImplHelper.getUpdateFields(sm)) != null) { >>>> update(sm, dirty, (ClassMapping) sm.getMetaData(), rowMgr, >>>> store, customs, false); >>>> === END === >>>> >>>> I only used a single thread, so I don't think the entities were changed >> in >>>> the other threads. (Remember that the field type of 'questionNo' was >> changed >>>> to Integer, the code worked.) >>>> >>>> Does anyone know why the violation happens? >>>> >>>> My environment is >>>> Mac OS X Snow leopard, Sun Java 6, and OpenJPA-2.0.1. >>>> >>>> >>>> >>>> Exception in thread "main" <openjpa-2.0.1-r422266:989424 fatal store >> error> >>>> org.apache.openjpa.persistence.RollbackException: Optimistic locking >> errors >>>> were detected when flushing to the data store. The following objects >> may >>>> have been concurrently modified in another transaction: >>>> [entity.Questionnaire-id3, entity.Questionnaire-id1, >>>> entity.Questionnaire-id5, entity.Questionnaire-id2, >>>> entity.Questionnaire-id6, entity.Questionnaire-id0, >>>> entity.Questionnaire-id8, entity.Questionnaire-id9, >>>> entity.Questionnaire-id4, entity.Questionnaire-id7] >>>> at >>>> >> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:584) >>>> at client.Test.run(Test.java:44) >>>> at client.Test.main(Test.java:17) >>>> Caused by: <openjpa-2.0.1-r422266:989424 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: >>>> [entity.Questionnaire-id3, entity.Questionnaire-id1, >>>> entity.Questionnaire-id5, entity.Questionnaire-id2, >>>> entity.Questionnaire-id6, entity.Questionnaire-id0, >>>> entity.Questionnaire-id8, entity.Questionnaire-id9, >>>> entity.Questionnaire-id4, entity.Questionnaire-id7] >>>> at >>>> >> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2291) >>>> at >> org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2139) >>>> at >>>> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2037) >>>> at >>>> >> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1955) >>>> at >>>> >> org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81) >>>> at >> org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1479) >>>> at >>>> >> org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:925) >>>> at >>>> >> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:560) >>>> ... 2 more >>>> Caused by: <openjpa-2.0.1-r422266:989424 nonfatal store error> >>>> org.apache.openjpa.persistence.OptimisticLockException: An optimistic >> lock >>>> violation was detected when flushing object instance >>>> "entity.Questionnaire-id3" to the data store. This indicates that the >>>> object was concurrently modified in another transaction. >>>> FailedObject: entity.Questionnaire@72940b84 >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:123) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:81) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:99) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:87) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:550) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:107) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:103) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:76) >>>> at >>>> >> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:731) >>>> at >>>> >> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:131) >>>> ... 9 more >>>> >>>> >>>> -- >>>> Kawanaka Shinya <[email protected]> >>>> http://mayah.jp/ >>>> >>>> >>>> >>>> >>>> >>>> >>>> >> >> -- >> Kawanaka Shinya <[email protected]> >> http://mayah.jp/ >> >> >> >> >> >> -- Kawanaka Shinya <[email protected]> http://mayah.jp/
