Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 59418 invoked from network); 22 Feb 2009 02:31:57 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 22 Feb 2009 02:31:57 -0000 Received: (qmail 22657 invoked by uid 500); 22 Feb 2009 02:31:57 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 22636 invoked by uid 500); 22 Feb 2009 02:31:57 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 22625 invoked by uid 99); 22 Feb 2009 02:31:57 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 21 Feb 2009 18:31:57 -0800 X-ASF-Spam-Status: No, hits=0.2 required=10.0 tests=SPF_HELO_PASS,SPF_PASS,WHOIS_MYPRIVREG X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of lists+1214986235816-210739@n2.nabble.com designates 216.139.236.158 as permitted sender) Received: from [216.139.236.158] (HELO kuber.nabble.com) (216.139.236.158) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 22 Feb 2009 02:31:48 +0000 Received: from tervel.nabble.com ([192.168.236.150]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1Lb47r-0005Im-7M for dev@openjpa.apache.org; Sat, 21 Feb 2009 18:31:27 -0800 Message-ID: <1235269887160-2366080.post@n2.nabble.com> Date: Sat, 21 Feb 2009 18:31:27 -0800 (PST) From: Pinaki Poddar To: dev@openjpa.apache.org Subject: Re: [jira] Commented: (OPENJPA-327) EntityListener that modify property value of a entity, causes invalid state exception In-Reply-To: <1907488030.1235247841961.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: ppoddar@apache.org References: <18651899.1187816671078.JavaMail.jira@brutus> <1907488030.1235247841961.JavaMail.jira@brutus> X-Virus-Checked: Checked by ClamAV on apache.org Hi, I ran it with Oracle because the test uses Database's native Sequence generation capability. Can you please describe what exactly you do on MySQL side to make the test run with MySQL which afaik do not have a native sequence generator such as in Oracle. I will run the test the with other generation strategy against MySQL -- but my guess is this failure has got something to do with generation strategy being used and how a particular database handles it. And hence I did not modify that aspect of the test classses. JIRA jira@apache.org wrote: > > > [ > https://issues.apache.org/jira/browse/OPENJPA-327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12675594#action_12675594 > ] > > Adam Hardy commented on OPENJPA-327: > ------------------------------------ > > I see it with mySQL and Derby. > > >> EntityListener that modify property value of a entity, causes invalid >> state exception >> ------------------------------------------------------------------------------------- >> >> Key: OPENJPA-327 >> URL: https://issues.apache.org/jira/browse/OPENJPA-327 >> Project: OpenJPA >> Issue Type: Bug >> Components: jpa >> Affects Versions: 1.0.0 >> Environment: windows xp, jdk 5 >> code was build time enhanced >> Reporter: Henry Lai >> Attachments: ptpissue1.zip >> >> >> entitylistener callback that modifies property value of the entity throws >> exception >> The following test code produces the following exception >> <1.0.0-SNAPSHOT-SNAPSHOT fatal user error> >> org.apache.openjpa.persistence.InvalidStateException: Attempt to set >> column "T1ENTITY.VER_ID" to two different values: (class >> java.lang.Integer)"2", (class java.lang.Integer)"3" This can occur when >> you fail to set both sides of a two-sided relation between objects, or >> when you map different fields to the same column, but you do not keep the >> values of these fields in synch. >> at org.apache.openjpa.jdbc.sql.PrimaryRow.setObject(PrimaryRow.java:338) >> at org.apache.openjpa.jdbc.sql.RowImpl.setObject(RowImpl.java:505) >> /** >> * for entity with version field, and if the lifecycle listener such as >> * pre-persist, post-persist handler modifies the entity >> * then when flush is invoke, results in optimistic lock exception >> * >> * this test failes in openjpa 0.9.6 >> * this test failes in openjpa 0.9.7 >> * this test failes in openjpa 1.0.0 >> * >> * This test case will past with either of following changes >> * 1) comment out em.flush(); >> * 2) uncomment in the orm.xml >> file >> * >> */ >> public void testMultipleInsertWithEntityListener(){ >> >> PersistenceProviderImpl openJPA = new PersistenceProviderImpl(); >> EntityManagerFactory factory = >> openJPA.createEntityManagerFactory("test", >> "ptp/test/issue1/persistence.xml", >> System.getProperties() ); >> >> EntityManager em = factory.createEntityManager(); >> em.getTransaction().begin(); >> T1Entity e1 = new T1Entity(); >> T1Entity e2 = new T1Entity(); >> e1.setName("Mickey"); >> e2.setName("Goofy"); >> >> em.persist(e1); >> em.flush(); // works if this line is commented out >> >> em.persist(e2); >> em.getTransaction().commit(); >> em.close(); >> } >> package ptp.test.issue1; >> import java.sql.Timestamp; >> public class T1EntityListener { >> static int count; >> int instNum; >> public T1EntityListener() { >> instNum = count++; >> System.out.println("T1EntityListener=" + this + ", instance=" + >> instNum ); >> } >> public void preUpdate(Object entity) { >> audit( "preUpdate", entity); >> } >> public void postUpdate(Object entity) { >> audit( "postUpdate", entity); >> } >> public void prePersist(Object entity) { >> audit( "prePersist", entity); >> } >> public void postPersist(Object entity) { >> audit( "postPersist", entity); >> } >> public void audit(String eventName, Object entity) { >> if (entity instanceof IAudit) { >> IAudit auditEntity = (IAudit) entity; >> System.out.println("****T1EntityListener inst=" + instNum + ", >> event=" + eventName + ", entity=" + auditEntity + ", ver=" + >> auditEntity.getVerId()); >> try { >> auditEntity.setModifyDateTime(createTimeStamp()); >> } catch (Exception e) { >> throw new RuntimeException(e); >> } >> } >> } >> >> private Timestamp createTimeStamp() { >> return new Timestamp(System.currentTimeMillis()); >> } > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > > > -- View this message in context: http://n2.nabble.com/-jira--Created%3A-%28OPENJPA-327%29-EntityListener-that-modify-property-value-of-a-entity%2C-causes-invalid-state-exception-tp215677p2366080.html Sent from the OpenJPA Developers mailing list archive at Nabble.com.