/** * JDK serialization hook for serializing * * @param oos The stream to write ourselves to * * @throws IOException Indicates an IO exception accessing the given stream */ public void serialize(ObjectOutputStream oos) throws IOException { log.tracef( "Starting serialization of [%s] EntityEntry entries", count ); oos.writeInt( count ); if ( count == 0 ) { return; } ManagedEntity managedEntity = head; while ( managedEntity != null ) { // so we know whether or not to build a ManagedEntityImpl on deserialize oos.writeBoolean( managedEntity == managedEntity.$$_hibernate_getEntityInstance() ); oos.writeObject( managedEntity.$$_hibernate_getEntityInstance() ); // we need to know which implementation of EntityEntry is being serialized oos.writeInt( managedEntity.$$_hibernate_getEntityEntry().getClass().getName().length() ); oos.writeChars( managedEntity.$$_hibernate_getEntityEntry().getClass().getName() ); managedEntity.$$_hibernate_getEntityEntry().serialize( oos ); managedEntity = managedEntity.$$_hibernate_getNextManagedEntity(); } }
final ManagedEntity next = managedEntity.$$_hibernate_getNextManagedEntity(); managedEntity.$$_hibernate_setPreviousManagedEntity( null ); managedEntity.$$_hibernate_setNextManagedEntity( null );
assertNotNull( managedParent.$$_hibernate_getEntityEntry() ); assertNull( managedParent.$$_hibernate_getPreviousManagedEntity() ); assertNull( managedParent.$$_hibernate_getNextManagedEntity() ); assertNull( managedParent.$$_hibernate_getEntityEntry() ); assertNull( managedParent.$$_hibernate_getPreviousManagedEntity() ); assertNull( managedParent.$$_hibernate_getNextManagedEntity() ); assertNull( managedParent.$$_hibernate_getEntityEntry() ); assertNull( managedParent.$$_hibernate_getPreviousManagedEntity() ); assertNull( managedParent.$$_hibernate_getNextManagedEntity() );
final ManagedEntity next = managedEntity.$$_hibernate_getNextManagedEntity(); managedEntity.$$_hibernate_setPreviousManagedEntity( null ); managedEntity.$$_hibernate_setNextManagedEntity( null );
/** * JDK serialization hook for serializing * * @param oos The stream to write ourselves to * * @throws IOException Indicates an IO exception accessing the given stream */ public void serialize(ObjectOutputStream oos) throws IOException { log.tracef( "Starting serialization of [%s] EntityEntry entries", count ); oos.writeInt( count ); if ( count == 0 ) { return; } ManagedEntity managedEntity = head; while ( managedEntity != null ) { // so we know whether or not to build a ManagedEntityImpl on deserialize oos.writeBoolean( managedEntity == managedEntity.$$_hibernate_getEntityInstance() ); oos.writeObject( managedEntity.$$_hibernate_getEntityInstance() ); // we need to know which implementation of EntityEntry is being serialized oos.writeInt( managedEntity.$$_hibernate_getEntityEntry().getClass().getName().length() ); oos.writeChars( managedEntity.$$_hibernate_getEntityEntry().getClass().getName() ); managedEntity.$$_hibernate_getEntityEntry().serialize( oos ); managedEntity = managedEntity.$$_hibernate_getNextManagedEntity(); } }
/** * Clear this context of all managed entities */ public void clear() { dirty = true; ManagedEntity node = head; while ( node != null ) { final ManagedEntity nextNode = node.$$_hibernate_getNextManagedEntity(); node.$$_hibernate_setEntityEntry( null ); node.$$_hibernate_setPreviousManagedEntity( null ); node.$$_hibernate_setNextManagedEntity( null ); node = nextNode; } if ( immutableManagedEntityXref != null ) { immutableManagedEntityXref.clear(); } if ( nonEnhancedEntityXref != null ) { nonEnhancedEntityXref.clear(); } head = null; tail = null; count = 0; reentrantSafeEntries = null; }
/** * The main bugaboo with IdentityMap that warranted this class in the first place. * * Return an array of all the entity/EntityEntry pairs in this context. The array is to make sure * that the iterators built off of it are safe from concurrency/reentrancy * * @return The safe array */ public Map.Entry<Object, EntityEntry>[] reentrantSafeEntityEntries() { if ( dirty ) { reentrantSafeEntries = new EntityEntryCrossRefImpl[count]; int i = 0; ManagedEntity managedEntity = head; while ( managedEntity != null ) { reentrantSafeEntries[i++] = new EntityEntryCrossRefImpl( managedEntity.$$_hibernate_getEntityInstance(), managedEntity.$$_hibernate_getEntityEntry() ); managedEntity = managedEntity.$$_hibernate_getNextManagedEntity(); } dirty = false; } return reentrantSafeEntries; }
/** * Down-grade locks to NONE for all entities in this context */ public void downgradeLocks() { if ( head == null ) { return; } ManagedEntity node = head; while ( node != null ) { node.$$_hibernate_getEntityEntry().setLockMode( LockMode.NONE ); node = node.$$_hibernate_getNextManagedEntity(); } }
/** * The main bugaboo with IdentityMap that warranted this class in the first place. * * Return an array of all the entity/EntityEntry pairs in this context. The array is to make sure * that the iterators built off of it are safe from concurrency/reentrancy * * @return The safe array */ public Map.Entry<Object, EntityEntry>[] reentrantSafeEntityEntries() { if ( dirty ) { reentrantSafeEntries = new EntityEntryCrossRefImpl[count]; int i = 0; ManagedEntity managedEntity = head; while ( managedEntity != null ) { reentrantSafeEntries[i++] = new EntityEntryCrossRefImpl( managedEntity.$$_hibernate_getEntityInstance(), managedEntity.$$_hibernate_getEntityEntry() ); managedEntity = managedEntity.$$_hibernate_getNextManagedEntity(); } dirty = false; } return reentrantSafeEntries; }
/** * Clear this context of all managed entities */ public void clear() { dirty = true; ManagedEntity node = head; while ( node != null ) { final ManagedEntity nextNode = node.$$_hibernate_getNextManagedEntity(); node.$$_hibernate_setEntityEntry( null ); node.$$_hibernate_setPreviousManagedEntity( null ); node.$$_hibernate_setNextManagedEntity( null ); node = nextNode; } if ( immutableManagedEntityXref != null ) { immutableManagedEntityXref.clear(); } if ( nonEnhancedEntityXref != null ) { nonEnhancedEntityXref.clear(); } head = null; tail = null; count = 0; reentrantSafeEntries = null; }
/** * Down-grade locks to NONE for all entities in this context */ public void downgradeLocks() { if ( head == null ) { return; } ManagedEntity node = head; while ( node != null ) { node.$$_hibernate_getEntityEntry().setLockMode( LockMode.NONE ); node = node.$$_hibernate_getNextManagedEntity(); } }