[jboss-cvs] jboss-seam/src/main/org/jboss/seam/persistence ...

Gavin King gavin.king at jboss.com
Mon Jun 18 16:38:22 EDT 2007


  User: gavin   
  Date: 07/06/18 16:38:22

  Modified:    src/main/org/jboss/seam/persistence  
                        HibernatePersistenceProvider.java
                        PersistenceProvider.java
  Log:
  JBSEAM-1489
  
  Revision  Changes    Path
  1.12      +29 -8     jboss-seam/src/main/org/jboss/seam/persistence/HibernatePersistenceProvider.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: HibernatePersistenceProvider.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/persistence/HibernatePersistenceProvider.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- HibernatePersistenceProvider.java	18 Jun 2007 15:53:55 -0000	1.11
  +++ HibernatePersistenceProvider.java	18 Jun 2007 20:38:22 -0000	1.12
  @@ -10,7 +10,9 @@
   import org.hibernate.EntityMode;
   import org.hibernate.FlushMode;
   import org.hibernate.Session;
  +import org.hibernate.StaleStateException;
   import org.hibernate.metadata.ClassMetadata;
  +import org.hibernate.type.VersionType;
   import org.jboss.seam.InterceptionType;
   import org.jboss.seam.ScopeType;
   import org.jboss.seam.Seam;
  @@ -62,6 +64,12 @@
      }
   
      @Override
  +   public void checkVersion(Object bean, EntityManager entityManager, Object oldVersion, Object version)
  +   {
  +      checkVersion(bean, getSession(entityManager), oldVersion, version);
  +   }
  +
  +   @Override
      public void enableFilter(Filter f, EntityManager entityManager)
      {
         org.hibernate.Filter filter = getSession(entityManager).enableFilter( f.getName() );
  @@ -90,16 +98,30 @@
         return (Session) entityManager.getDelegate();
      }
   
  -   public static Object getVersion(Object value, Session session)
  +   public static void checkVersion(Object value, Session session, Object oldVersion, Object version)
      {
  -      Class entityClass = Seam.getEntityClass( value.getClass() );
  -      if (entityClass==null)
  +      ClassMetadata classMetadata = getClassMetadata(value, session);
  +      VersionType versionType = (VersionType) classMetadata.getPropertyTypes()[ classMetadata.getVersionProperty() ];
  +      if ( !versionType.isEqual(oldVersion, version) )
  +      {
  +         throw new StaleStateException("current database version number does not match passivated version number");
  +      }
  +   }
  +
  +   public static Object getVersion(Object value, Session session)
         {
  -         return null;
  +      ClassMetadata classMetadata = getClassMetadata(value, session);
  +      return classMetadata!=null && classMetadata.isVersioned() ? 
  +               classMetadata.getVersion(value, EntityMode.POJO) : null;
         }
  -      else
  +
  +   private static ClassMetadata getClassMetadata(Object value, Session session)
  +   {
  +      Class entityClass = Seam.getEntityClass( value.getClass() );
  +      ClassMetadata classMetadata = null;
  +      if (entityClass!=null)
         {
  -         ClassMetadata classMetadata = session.getSessionFactory().getClassMetadata(entityClass);
  +         classMetadata = session.getSessionFactory().getClassMetadata(entityClass);
            if (classMetadata==null)
            {
               throw new IllegalArgumentException( 
  @@ -107,9 +129,8 @@
                        entityClass.getName() 
                     );
            }
  -         return classMetadata.isVersioned() ? 
  -                  classMetadata.getVersion(value, EntityMode.POJO) : null;
         }
  +      return classMetadata;
      }
   
   }
  
  
  
  1.13      +20 -0     jboss-seam/src/main/org/jboss/seam/persistence/PersistenceProvider.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PersistenceProvider.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/persistence/PersistenceProvider.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -b -r1.12 -r1.13
  --- PersistenceProvider.java	18 Jun 2007 05:57:35 -0000	1.12
  +++ PersistenceProvider.java	18 Jun 2007 20:38:22 -0000	1.13
  @@ -2,7 +2,10 @@
   
   import static org.jboss.seam.annotations.Install.BUILT_IN;
   
  +import java.util.Date;
  +
   import javax.persistence.EntityManager;
  +import javax.persistence.OptimisticLockException;
   import javax.transaction.Synchronization;
   
   import org.jboss.seam.Component;
  @@ -74,6 +77,23 @@
         return Entity.forClass( bean.getClass() ).getVersion(bean);
      }
      
  +   public void checkVersion(Object bean, EntityManager entityManager, Object oldVersion, Object version)
  +   {
  +      boolean equal;
  +      if (oldVersion instanceof Date)
  +      {
  +         equal = ( (Date) oldVersion ).getTime() == ( (Date) version ).getTime();
  +      }
  +      else
  +      {
  +         equal = oldVersion.equals(version);
  +      }
  +      if ( !equal )
  +      {
  +         throw new OptimisticLockException("current database version number does not match passivated version number");
  +      }
  +   }
  +
      /**
       * Enable a Filter. This is here just especially for Hibernate,
       * since we well know that other products don't have such cool
  
  
  



More information about the jboss-cvs-commits mailing list