/** * Construct locking strategy. * * @param lockable The metadata for the entity to be locked. * @param lockMode Indicates the type of lock to be acquired. */ public OptimisticLockingStrategy(Lockable lockable, LockMode lockMode) { this.lockable = lockable; this.lockMode = lockMode; if ( lockMode.lessThan( LockMode.OPTIMISTIC ) ) { throw new HibernateException( "[" + lockMode + "] not valid for [" + lockable.getEntityName() + "]" ); } }
@Override public void serialize(ObjectOutputStream oos) throws IOException { final Status previousStatus = getPreviousStatus(); oos.writeObject( getEntityName() ); oos.writeObject( id ); oos.writeObject( getStatus().name() ); oos.writeObject( (previousStatus == null ? "" : previousStatus.name()) ); // todo : potentially look at optimizing these two arrays oos.writeObject( loadedState ); oos.writeObject( getDeletedState() ); oos.writeObject( version ); oos.writeObject( getLockMode().toString() ); oos.writeBoolean( isExistsInDatabase() ); oos.writeBoolean( isBeingReplicated() ); }
@Override public String appendLockHint(LockOptions lockOptions, String tableName) { return lockOptions.getLockMode().greaterThan( LockMode.READ ) ? tableName + " holdlock" : tableName; }
(Object[]) ois.readObject(), ois.readObject(), LockMode.valueOf( (String) ois.readObject() ), ois.readBoolean(), ois.readBoolean(),
public void read(Element element, JpdlXmlReader jpdlReader) { String lock = element.attributeValue("lock"); if (lock != null) { LockMode lockMode = LockMode.valueOf(lock); if (lockMode != null) parentLockMode = lockMode.toString(); else if ("pessimistic".equals(lock)) parentLockMode = LockMode.PESSIMISTIC_WRITE.toString(); else jpdlReader.addError("invalid parent lock mode '" + lock + "'"); } }
@Override @SuppressWarnings("RedundantIfStatement") public boolean equals(Object o) { if ( this == o ) { return true; } if ( o == null || getClass() != o.getClass() ) { return false; } final NativeSQLQueryNonScalarReturn that = (NativeSQLQueryNonScalarReturn) o; if ( alias != null ? !alias.equals( that.alias ) : that.alias != null ) { return false; } if ( lockMode != null ? !lockMode.equals( that.lockMode ) : that.lockMode != null ) { return false; } if ( !propertyResults.equals( that.propertyResults ) ) { return false; } return true; }
public void read(Element element, JpdlXmlReader jpdlReader) { String lock = element.attributeValue("lock"); if (lock != null) { LockMode lockMode = LockMode.parse(lock); if (lockMode != null) parentLockMode = lockMode.toString(); else if ("pessimistic".equals(lock)) parentLockMode = LockMode.UPGRADE.toString(); else jpdlReader.addError("invalid parent lock mode '" + lock + "'"); } }
private int determineHashCode() { int result = alias != null ? alias.hashCode() : 0; result = 31 * result + ( getClass().getName().hashCode() ); result = 31 * result + ( lockMode != null ? lockMode.hashCode() : 0 ); result = 31 * result + propertyResults.hashCode(); return result; }
public static LockMode fromXml(String name) { return LockMode.fromExternalForm( name ); }
(Object[]) ois.readObject(), ois.readObject(), LockMode.valueOf( (String) ois.readObject() ), ois.readBoolean(), ois.readBoolean(),
/** * @param lockOptions a collection of lock modes specified dynamically via the Query interface */ @Override protected LockMode[] getLockModes(LockOptions lockOptions) { if ( lockOptions == null ) { return defaultLockModes; } if ( lockOptions.getAliasLockCount() == 0 && ( lockOptions.getLockMode() == null || LockMode.NONE.equals( lockOptions.getLockMode() ) ) ) { return defaultLockModes; } // unfortunately this stuff can't be cached because // it is per-invocation, not constant for the // QueryTranslator instance LockMode[] lockModesArray = new LockMode[entityAliases.length]; for ( int i = 0; i < entityAliases.length; i++ ) { LockMode lockMode = lockOptions.getEffectiveLockMode( entityAliases[i] ); if ( lockMode == null ) { //NONE, because its the requested lock mode, not the actual! lockMode = LockMode.NONE; } lockModesArray[i] = lockMode; } return lockModesArray; }
private int determineHashCode() { int result = alias != null ? alias.hashCode() : 0; result = 31 * result + ( getClass().getName().hashCode() ); result = 31 * result + ( lockMode != null ? lockMode.hashCode() : 0 ); result = 31 * result + ( propertyResults != null ? propertyResults.hashCode() : 0 ); return result; }
public LockMode getLockMode(String query) { String hitName = QueryHints.NATIVE_LOCKMODE; String value =(String) hintsMap.get( hitName ); if ( value == null ) { return null; } try { return LockMode.fromExternalForm( value ); } catch ( MappingException e ) { throw new AnnotationException( "Unknown LockMode in hint: " + query + ":" + hitName, e ); } }
/** * Construct locking strategy. * * @param lockable The metadata for the entity to be locked. * @param lockMode Indicates the type of lock to be acquired. */ public OptimisticForceIncrementLockingStrategy(Lockable lockable, LockMode lockMode) { this.lockable = lockable; this.lockMode = lockMode; if ( lockMode.lessThan( LockMode.OPTIMISTIC_FORCE_INCREMENT ) ) { throw new HibernateException( "[" + lockMode + "] not valid for [" + lockable.getEntityName() + "]" ); } }
/** * Currently needed for follow-on locking. * * @return The greatest of all requested lock modes. */ public LockMode findGreatestLockMode() { LockMode lockModeToUse = getLockMode(); if ( lockModeToUse == null ) { lockModeToUse = LockMode.NONE; } if ( aliasSpecificLockModes == null ) { return lockModeToUse; } for ( LockMode lockMode : aliasSpecificLockModes.values() ) { if ( lockMode.greaterThan( lockModeToUse ) ) { lockModeToUse = lockMode; } } return lockModeToUse; }
public static LockMode interpretLockMode(Object value) { if ( value == null ) { return LockMode.NONE; } if ( LockMode.class.isInstance( value ) ) { return (LockMode) value; } else if ( LockModeType.class.isInstance( value ) ) { return getLockMode( (LockModeType) value ); } else if ( String.class.isInstance( value ) ) { // first try LockMode name LockMode lockMode = LockMode.valueOf( (String) value ); if ( lockMode == null ) { try { lockMode = getLockMode( LockModeType.valueOf( (String) value ) ); } catch ( Exception ignore ) { } } if ( lockMode != null ) { return lockMode; } } throw new IllegalArgumentException( "Unknown lock mode source : " + value ); }
if ( LockMode.PESSIMISTIC_FORCE_INCREMENT.equals( lockMode ) ) { final EntityPersister persister = entry.getPersister(); final Object nextVersion = persister.forceVersionIncrement( entry.forceLocked( entity, nextVersion ); else if ( LockMode.OPTIMISTIC_FORCE_INCREMENT.equals( lockMode ) ) { final EntityIncrementVersionProcess incrementVersion = new EntityIncrementVersionProcess( entity, entry ); event.getSession().getActionQueue().registerProcess( incrementVersion ); else if ( LockMode.OPTIMISTIC.equals( lockMode ) ) { final EntityVerifyVersionProcess verifyVersion = new EntityVerifyVersionProcess( entity, entry ); event.getSession().getActionQueue().registerProcess( verifyVersion );
/** * Custom serialization routine used during serialization of a * Session/PersistenceContext for increased performance. * * @param oos The stream to which we should write the serial data. * @throws java.io.IOException */ void serialize(ObjectOutputStream oos) throws IOException { oos.writeObject( entityName ); oos.writeObject( id ); oos.writeObject( entityMode.toString() ); oos.writeObject( status.toString() ); // todo : potentially look at optimizing these two arrays oos.writeObject( loadedState ); oos.writeObject( deletedState ); oos.writeObject( version ); oos.writeObject( lockMode.toString() ); oos.writeBoolean( existsInDatabase ); oos.writeBoolean( isBeingReplicated ); oos.writeBoolean( loadedWithLazyPropertiesUnfetched ); }
private int determineHashCode() { int result = alias != null ? alias.hashCode() : 0; result = 31 * result + ( getClass().getName().hashCode() ); result = 31 * result + ( lockMode != null ? lockMode.hashCode() : 0 ); result = 31 * result + ( propertyResults != null ? propertyResults.hashCode() : 0 ); return result; }
public static LockMode fromXml(String name) { return LockMode.fromExternalForm( name ); }