/** * Schedules audit data removal from session level cache after transaction completion. The operation is performed * regardless of commit success. * * @param session Active Hibernate session. * @param data Audit data that shall be evicted (e.g. revision data or entity snapshot) */ public void scheduleAuditDataRemoval(final Session session, final Object data) { ( (EventSource) session ).getActionQueue().registerProcess( new AfterTransactionCompletionProcess() { public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor sessionImplementor) { if ( !sessionImplementor.isClosed() ) { try { ( (Session) sessionImplementor ).evict( data ); } catch ( HibernateException ignore ) { } } } } ); } }
auditProcesses.put( transaction, auditProcess ); session.getActionQueue().registerProcess( new BeforeTransactionCompletionProcess() { public void doBeforeTransactionCompletion(SessionImplementor session) { session.getActionQueue().registerProcess( new AfterTransactionCompletionProcess() { public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) {
private void evict(Serializable id, CollectionPersister collectionPersister, EventSource session) { if ( LOG.isDebugEnabled() ) { LOG.debug( "Evict CollectionRegion " + collectionPersister.getRole() + " for id " + id ); } AfterTransactionCompletionProcess afterTransactionProcess = new CollectionEvictCacheAction( collectionPersister, null, id, session ).lockCache(); session.getActionQueue().registerProcess( afterTransactionProcess ); }
@Override public void onPostInsert(PostInsertEvent event) { event.getSession().getActionQueue().registerProcess( new BeforeTransactionCompletionProcess() { @Override public void doBeforeTransactionCompletion(SessionImplementor session) { beforeCounter.increase(); } } ); event.getSession().getActionQueue().registerProcess( new AfterTransactionCompletionProcess() { @Override public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { afterCounter.increase(); } } ); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SharedSessionContractImplementor session) { if ( !lockable.isVersioned() ) { throw new OptimisticLockException( object, "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } final EntityEntry entry = session.getPersistenceContext().getEntry( object ); // Register the EntityVerifyVersionProcess action to run just prior to transaction commit. ( (EventSource) session ).getActionQueue().registerProcess( new EntityVerifyVersionProcess( object, entry ) ); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SharedSessionContractImplementor session) { if ( !lockable.isVersioned() ) { throw new HibernateException( "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } final EntityEntry entry = session.getPersistenceContext().getEntry( object ); // Register the EntityIncrementVersionProcess action to run just prior to transaction commit. ( (EventSource) session ).getActionQueue().registerProcess( new EntityIncrementVersionProcess( object, entry ) ); }
LOG.debug( "Evict CollectionRegion " + role ); final SoftLock softLock = collectionPersister.getCacheAccessStrategy().lockRegion(); session.getActionQueue().registerProcess( (success, session1) -> { collectionPersister.getCacheAccessStrategy().unlockRegion( softLock ); } );
if ( reuseEntityIdentifier || getRevisionType( audEntitiesCfg, data ) != RevisionType.ADD ) { ( (EventSource) session ).getActionQueue().registerProcess( new BeforeTransactionCompletionProcess() { @Override public void doBeforeTransactionCompletion(final SessionImplementor sessionImplementor) {
( ( EventSource ) s ).getActionQueue().registerProcess( new BeforeTransactionCompletionProcess() { @Override public void doBeforeTransactionCompletion(SessionImplementor session) {
session.getActionQueue().registerProcess( new BeforeCallbackCompletionHandler() );
event.getSession().getActionQueue().registerProcess( incrementVersion ); event.getSession().getActionQueue().registerProcess( verifyVersion );
private void evictCachedCollections(Type[] types, Serializable id, EventSource source) throws HibernateException { for ( Type type : types ) { if ( type.isCollectionType() ) { CollectionPersister collectionPersister = source.getFactory().getMetamodel().collectionPersister( ( (CollectionType) type ).getRole() ); if ( collectionPersister.hasCache() ) { final CollectionDataAccess cache = collectionPersister.getCacheAccessStrategy(); final Object ck = cache.generateCacheKey( id, collectionPersister, source.getFactory(), source.getTenantIdentifier() ); final SoftLock lock = cache.lockItem( source, ck, null ); cache.remove( source, ck ); source.getActionQueue().registerProcess( (success, session) -> cache.unlockItem( session, ck, lock ) ); } } else if ( type.isComponentType() ) { CompositeType actype = (CompositeType) type; evictCachedCollections( actype.getSubtypes(), id, source ); } } } }
( (EventSource) session ).getActionQueue().registerProcess( new AfterTransactionCompletionProcess() { @Override ( (EventSource) session ).getActionQueue().registerProcess( new AfterTransactionCompletionProcess() { @Override
final SoftLock lock = cache.lockItem( source, ck, previousVersion ); cache.remove( source, ck ); source.getActionQueue().registerProcess( (success, session) -> cache.unlockItem( session, ck, lock ) );
private void audit(AbstractEvent hibernateEvent, final AuditLog auditLog) { hibernateEvent.getSession().getActionQueue().registerProcess(new AfterTransactionCompletionProcess() { @Override public void doAfterTransactionCompletion(boolean success, SessionImplementor session) { if (success) { auditLogService.log(auditLog); } } }); } }
private void evict(Object id, PersistentCollectionDescriptor collectionDescriptor, EventSource session) { if ( LOG.isDebugEnabled() ) { LOG.debug( "Evict CollectionRegion " + collectionDescriptor.getNavigableRole().getFullPath() + " for id " + id ); } AfterTransactionCompletionProcess afterTransactionProcess = new CollectionEvictCacheAction( collectionDescriptor, null, id, session ).lockCache(); session.getActionQueue().registerProcess( afterTransactionProcess ); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SessionImplementor session) { if ( !lockable.isVersioned() ) { throw new HibernateException( "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } EntityEntry entry = session.getPersistenceContext().getEntry( object ); EntityIncrementVersionProcess incrementVersion = new EntityIncrementVersionProcess( object, entry ); EventSource source = (EventSource) session; // Register the EntityIncrementVersionProcess action to run just prior to transaction commit. source.getActionQueue().registerProcess( incrementVersion ); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SessionImplementor session) { if ( !lockable.isVersioned() ) { throw new OptimisticLockException( object, "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } EntityEntry entry = session.getPersistenceContext().getEntry(object); EventSource source = (EventSource)session; EntityVerifyVersionProcess verifyVersion = new EntityVerifyVersionProcess(object, entry); // Register the EntityVerifyVersionProcess action to run just prior to transaction commit. source.getActionQueue().registerProcess(verifyVersion); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SessionImplementor session) { if ( !lockable.isVersioned() ) { throw new HibernateException( "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } EntityEntry entry = session.getPersistenceContext().getEntry( object ); EntityIncrementVersionProcess incrementVersion = new EntityIncrementVersionProcess( object, entry ); EventSource source = (EventSource) session; // Register the EntityIncrementVersionProcess action to run just prior to transaction commit. source.getActionQueue().registerProcess( incrementVersion ); }
@Override public void lock(Serializable id, Object version, Object object, int timeout, SharedSessionContractImplementor session) { if ( StringHelper.isEmpty( lockable.getVersionColumnName() ) ) { throw new HibernateException( "[" + lockMode + "] not supported for non-versioned entities [" + lockable.getEntityName() + "]" ); } final EntityEntry entry = session.getPersistenceContext().getEntry( object ); // Register the EntityIncrementVersionProcess action to run just prior to transaction commit. ( (EventSource) session ).getActionQueue().registerProcess( new EntityIncrementVersionProcess( object, entry ) ); }