Package org.hibernate.event.spi

Examples of org.hibernate.event.spi.EventSource


      CacheEntry entry,
      Serializable entityId,
      EntityPersister persister,
      LoadEvent event) {

    final EventSource session = event.getSession();
    final SessionFactoryImplementor factory = session.getFactory();
    final EntityPersister subclassPersister = factory.getEntityPersister( entry.getSubclass() );

    if ( LOG.isTraceEnabled() ) {
      LOG.tracef(
          "Converting second-level cache entry [%s] into entity : %s",
          entry,
          MessageHelper.infoString( persister, entityId, factory )
      );
    }

    final Object entity;
    if ( entry.isReferenceEntry() ) {
      final Object optionalObject = event.getInstanceToLoad();
      if ( optionalObject != null ) {
        throw new HibernateException(
            String.format(
                "Attempt to load entity [%s] from cache using provided object instance, but cache " +
                    "is storing references",
                MessageHelper.infoString( persister, entityId, factory )
            )
        );
      }

      entity = ( (ReferenceCacheEntryImpl) entry ).getReference();
      if ( entity == null ) {
        throw new IllegalStateException(
            "Reference cache entry contained null : " + MessageHelper.infoString(
                persister,
                entityId,
                factory
            )
        );
      }
    }
    else {
      final Object optionalObject = event.getInstanceToLoad();
      entity = optionalObject == null
          ? session.instantiate( subclassPersister, entityId )
          : optionalObject;
    }

    // make it circular-reference safe
    final EntityKey entityKey = session.generateEntityKey( entityId, subclassPersister );
    TwoPhaseLoad.addUninitializedCachedEntity(
        entityKey,
        entity,
        subclassPersister,
        LockMode.NONE,
        entry.areLazyPropertiesUnfetched(),
        entry.getVersion(),
        session
    );

    final PersistenceContext persistenceContext = session.getPersistenceContext();
    final Object[] values;
    final Object version;
    final boolean isReadOnly;
    if ( entry.isReferenceEntry() ) {
      values = null;
      version = null;
      isReadOnly = true;
    }
    else {
      final Type[] types = subclassPersister.getPropertyTypes();
      // initializes the entity by (desired) side-effect
      values = ( (StandardCacheEntryImpl) entry ).assemble(
          entity, entityId, subclassPersister, session.getInterceptor(), session
      );
      if ( ( (StandardCacheEntryImpl) entry ).isDeepCopyNeeded() ) {
        TypeHelper.deepCopy(
            values,
            types,
            subclassPersister.getPropertyUpdateability(),
            values,
            session
        );
      }
      version = Versioning.getVersion( values, subclassPersister );
      LOG.tracef( "Cached Version : %s", version );

      final Object proxy = persistenceContext.getProxy( entityKey );
      if ( proxy != null ) {
        // there is already a proxy for this impl
        // only set the status to read-only if the proxy is read-only
        isReadOnly = ( (HibernateProxy) proxy ).getHibernateLazyInitializer().isReadOnly();
      }
      else {
        isReadOnly = session.isDefaultReadOnly();
      }
    }

    persistenceContext.addEntry(
        entity,
View Full Code Here


      final Serializable id,
      final EntityPersister persister,
      final LoadEvent event) throws HibernateException {

    final Object optionalObject = event.getInstanceToLoad();
    final EventSource session = event.getSession();
    final SessionFactoryImplementor factory = session.getFactory();

    if ( LOG.isTraceEnabled() ) {
      LOG.tracev(
          "Assembling entity from second-level cache: {0}",
          MessageHelper.infoString( persister, id, factory )
      );
    }

    EntityPersister subclassPersister = factory.getEntityPersister( entry.getSubclass() );
    Object result = optionalObject == null ?
        session.instantiate( subclassPersister, id ) : optionalObject;

    // make it circular-reference safe
    final EntityKey entityKey = session.generateEntityKey( id, subclassPersister );
    TwoPhaseLoad.addUninitializedCachedEntity(
        entityKey,
        result,
        subclassPersister,
        LockMode.NONE,
        entry.areLazyPropertiesUnfetched(),
        entry.getVersion(),
        session
    );

    Type[] types = subclassPersister.getPropertyTypes();
    Object[] values = entry.assemble(
        result,
        id,
        subclassPersister,
        session.getInterceptor(),
        session
    ); // intializes result by side-effect
    TypeHelper.deepCopy(
        values,
        types,
        subclassPersister.getPropertyUpdateability(),
        values,
        session
    );

    Object version = Versioning.getVersion( values, subclassPersister );
    LOG.tracev( "Cached Version: {0}", version );

    final PersistenceContext persistenceContext = session.getPersistenceContext();
    boolean isReadOnly = session.isDefaultReadOnly();
    if ( persister.isMutable() ) {
      Object proxy = persistenceContext.getProxy( entityKey );
      if ( proxy != null ) {
        // there is already a proxy for this impl
        // only set the status to read-only if the proxy is read-only
View Full Code Here

   */
  protected void flushEverythingToExecutions(FlushEvent event) throws HibernateException {

    LOG.trace( "Flushing session" );

    EventSource session = event.getSession();

    final PersistenceContext persistenceContext = session.getPersistenceContext();
    session.getInterceptor().preFlush( new LazyIterator( persistenceContext.getEntitiesByKey() ) );

    prepareEntityFlushes( session, persistenceContext );
    // we could move this inside if we wanted to
    // tolerate collection initializations during
    // collection dirty checking:
View Full Code Here

  @SuppressWarnings( value = {"unchecked"} )
  private void logFlushResults(FlushEvent event) {
    if ( !LOG.isDebugEnabled() ) {
      return;
    }
    final EventSource session = event.getSession();
    final PersistenceContext persistenceContext = session.getPersistenceContext();
    LOG.debugf(
        "Flushed: %s insertions, %s updates, %s deletions to %s objects",
        session.getActionQueue().numberOfInsertions(),
        session.getActionQueue().numberOfUpdates(),
        session.getActionQueue().numberOfDeletions(),
        persistenceContext.getNumberOfManagedEntities()
    );
    LOG.debugf(
        "Flushed: %s (re)creations, %s updates, %s removals to %s collections",
        session.getActionQueue().numberOfCollectionCreations(),
        session.getActionQueue().numberOfCollectionUpdates(),
        session.getActionQueue().numberOfCollectionRemovals(),
        persistenceContext.getCollectionEntries().size()
    );
    new EntityPrinter( session.getFactory() ).toString(
        persistenceContext.getEntitiesByKey().entrySet()
    );
  }
View Full Code Here

   */
  private int flushEntities(final FlushEvent event, final PersistenceContext persistenceContext) throws HibernateException {

    LOG.trace( "Flushing entities and processing referenced collections" );

    final EventSource source = event.getSession();
    final Iterable<FlushEntityEventListener> flushListeners = source.getFactory().getServiceRegistry()
        .getService( EventListenerRegistry.class )
        .getEventListenerGroup( EventType.FLUSH_ENTITY )
        .listeners();

    // Among other things, updateReachables() will recursively load all
    // collections that are moving roles. This might cause entities to
    // be loaded.

    // So this needs to be safe from concurrent modification problems.

    final Map.Entry<Object,EntityEntry>[] entityEntries = persistenceContext.reentrantSafeEntityEntries();
    final int count = entityEntries.length;

    for ( Map.Entry<Object,EntityEntry> me : entityEntries ) {

      // Update the status of the object and if necessary, schedule an update

      EntityEntry entry = me.getValue();
      Status status = entry.getStatus();

      if ( status != Status.LOADING && status != Status.GONE ) {
        final FlushEntityEvent entityEvent = new FlushEntityEvent( source, me.getKey(), entry );
        for ( FlushEntityEventListener listener : flushListeners ) {
          listener.onFlushEntity( entityEvent );
        }
      }
    }

    source.getActionQueue().sortActions();

    return count;
  }
View Full Code Here

    final Object object = event.getObject();
    if ( object == null ) {
      throw new NullPointerException( "null passed to Session.evict()" );
    }

    final EventSource source = event.getSession();
    final PersistenceContext persistenceContext = source.getPersistenceContext();

    if ( object instanceof HibernateProxy ) {
      final LazyInitializer li = ( (HibernateProxy) object ).getHibernateLazyInitializer();
      final Serializable id = li.getIdentifier();
      if ( id == null ) {
        throw new IllegalArgumentException( "Could not determine identifier of proxy passed to evict()" );
      }

      final EntityPersister persister = source.getFactory().getEntityPersister( li.getEntityName() );
      final EntityKey key = source.generateEntityKey( id, persister );
      persistenceContext.removeProxy( key );

      if ( !li.isUninitialized() ) {
        final Object entity = persistenceContext.removeEntity( key );
        if ( entity != null ) {
View Full Code Here

    return super.invokeDeleteLifecycle( session, entity, persister );
  }

  @Override
  protected void performDetachedEntityDeletionCheck(DeleteEvent event) {
    EventSource source = event.getSession();
    String entityName = event.getEntityName();
    EntityPersister persister = source.getEntityPersister( entityName, event.getObject() );
    Serializable id =  persister.getIdentifier( event.getObject(), source );
    entityName = entityName == null ? source.guessEntityName( event.getObject() ) : entityName;
    throw new IllegalArgumentException("Removing a detached instance "+ entityName + "#" + id);
  }
View Full Code Here

    this.callbackHandler = callbackHandler;
  }

  public void onPostUpdate(PostUpdateEvent event) {
    Object entity = event.getEntity();
    EventSource eventSource = event.getSession();
    handlePostUpdate(entity, eventSource);
  }
View Full Code Here

    }
  }

  public void onPostRecreateCollection(PostCollectionRecreateEvent event) {
    Object entity = event.getCollection().getOwner();
    EventSource eventSource = event.getSession();
    handlePostUpdate(entity, eventSource);
  }
View Full Code Here

    handlePostUpdate(entity, eventSource);
  }

  public void onPostRemoveCollection(PostCollectionRemoveEvent event) {
    Object entity = event.getCollection().getOwner();
    EventSource eventSource = event.getSession();
    handlePostUpdate(entity, eventSource);   
  }
View Full Code Here

TOP

Related Classes of org.hibernate.event.spi.EventSource

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.