Example usage for org.hibernate.persister.entity EntityPersister isVersioned

List of usage examples for org.hibernate.persister.entity EntityPersister isVersioned

Introduction

In this page you can find the example usage for org.hibernate.persister.entity EntityPersister isVersioned.

Prototype

boolean isVersioned();

Source Link

Document

Determine whether optimistic locking by column is enabled for this entity.

Usage

From source file:com.utest.dao.UtestDeleteEventListener.java

License:Apache License

@SuppressWarnings("unchecked")
@Override/*from ww  w  . j av a2s  . co m*/
/**
 * Handle the given delete event.  This is the cascaded form.
 *
 * @param event The delete event.
 * @param transientEntities The cache of entities already deleted
 *
 * @throws HibernateException
 */
public void onDelete(DeleteEvent event, Set transientEntities) throws HibernateException {
    final EventSource source = event.getSession();

    final PersistenceContext persistenceContext = source.getPersistenceContext();
    Object entity = persistenceContext.unproxyAndReassociate(event.getObject());
    EntityEntry entityEntry = persistenceContext.getEntry(entity);

    final EntityPersister persister = source.getEntityPersister(event.getEntityName(), entity);
    final Object version;

    if (persister.isVersioned()) {
        version = persister.getVersion(entity, source.getEntityMode());
        // Make sure version has not changed on deleted entities
        if ((entity instanceof TimelineEntity) && !((TimelineEntity) entity).isNew()) {
            if (!persister.getVersionType().isEqual(version, entityEntry.getVersion())) {
                throw new StaleObjectStateException(persister.getEntityName(), entityEntry.getId());
            }
        }
    }
    super.onDelete(event, transientEntities);

}

From source file:com.utest.dao.UtestFlushEntityEventListener.java

License:Apache License

@Override
public void onFlushEntity(final FlushEntityEvent event) throws HibernateException {

    final Object object = event.getEntity();
    final EntityEntry entry = event.getEntityEntry();
    final EntityPersister persister = entry.getPersister();
    // final Status status = entry.getStatus();
    final SessionImplementor session = event.getSession();
    if (persister.isVersioned()) {
        final Object version = persister.getVersion(object, session.getEntityMode());
        // Make sure version has not changed on updated entities
        if ((object instanceof TimelineEntity) && !((TimelineEntity) object).isNew()) {
            if (!persister.getVersionType().isEqual(version, entry.getVersion())) {
                throw new StaleObjectStateException(persister.getEntityName(), entry.getId());
            }/*  ww  w  . j  av a 2s .  c  o  m*/
        }
    }
    super.onFlushEntity(event);
}

From source file:fr.keyconsulting.oliphant.NotifyListener.java

License:Open Source License

public Serializable processLoadEvent(PostLoadEvent event, boolean throwStaleException)
        throws StaleObjectStateException {
    if (sessionFactory == null) {
        // our first event, initialize the listener
        sessionFactory = (SessionFactoryImplementor) event.getSession().getSessionFactory();
        specificNotifyListener.setUp();/*from w  w w .  jav a  2  s.c  o m*/
    }
    Object object = event.getEntity();
    EventSource session = event.getSession();
    EntityPersister persister = event.getPersister();
    String uid = getUid(object, session);
    if (persister.isVersioned()) {
        if (!versions.containsKey(uid)) {
            // We have not yet received notifications for this object
            versions.put(uid, Base64
                    .encodeBytes(persister.getVersion(object, session.getEntityMode()).toString().getBytes()));
        }
    }
    return true;
}

From source file:fr.keyconsulting.oliphant.NotifyListener.java

License:Open Source License

public boolean isKnownToBeStaleInL2(Object object, EventSource session) {
    final EntityPersister persister = sessionFactory.getEntityPersister(session.getEntityName(object));
    String uid = getUid(object, session);
    if (!versions.containsKey(uid)) {
        return false;
    }//from   w  w w .  ja v a 2 s  .co  m
    if (persister.isVersioned()) {
        if (persister.hasCache() && session.getCacheMode().isGetEnabled()) {
            final EntityRegionAccessStrategy cacheAccessStrategy = persister.getCacheAccessStrategy();
            if (cacheAccessStrategy == null) {
                return false;
            }
            final CacheKey ck = new CacheKey(session.getIdentifier(object), persister.getIdentifierType(),
                    persister.getRootEntityName(), session.getEntityMode(), session.getFactory());
            CacheEntry cachedObject = (CacheEntry) cacheAccessStrategy.get(ck, Long.MAX_VALUE);
            if (cachedObject == null) {
                return false;
            }
            if (Base64.encodeBytes(cachedObject.getDisassembledState()[persister.getVersionProperty()]
                    .toString().getBytes()) != versions.get(uid)) {
                return true;
            }
        }
    }
    return false;
}

From source file:fr.keyconsulting.oliphant.NotifyListener.java

License:Open Source License

public void evictFromL2(Object object, EventSource session) {
    final EntityPersister persister = sessionFactory.getEntityPersister(session.getEntityName(object));
    if (persister.isVersioned()) {
        if (persister.hasCache() && session.getCacheMode().isGetEnabled()) {
            final EntityRegionAccessStrategy cacheAccessStrategy = persister.getCacheAccessStrategy();
            if (cacheAccessStrategy == null) {
                return;
            }//from   w  ww.  j a v  a  2  s  .c  om
            final CacheKey ck = new CacheKey(session.getIdentifier(object), persister.getIdentifierType(),
                    persister.getRootEntityName(), session.getEntityMode(), session.getFactory());
            cacheAccessStrategy.evict(ck);
            Serializable identifier = session.getIdentifier(object);
            LOG.debug("* Object " + identifier + " evicted from L2");
        }
    }
}

From source file:org.tonguetied.audit.AbstractAuditLogEventListener.java

License:Apache License

/**
 * Determine if this field is used for optimistic locking.
 * /*from w w w.  jav  a 2 s  .  co  m*/
 * @param persister
 * @param name
 * @return <code>true</code> if the field is used for optimistic locking,
 * <code>false</code> otherwise
 */
private boolean isOptlockField(EntityPersister persister, final String name) {
    return persister.isVersioned() && "version".equals(name);
}