openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pinaki Poddar <ppod...@apache.org>
Subject Re: [jira] Commented: (OPENJPA-327) EntityListener that modify property value of a entity, causes invalid state exception
Date Sun, 22 Feb 2009 02:31:27 GMT

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 <post-update method-name="postUpdate"/> 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.


Mime
View raw message