@Override public void cascade( EventSource session, Object child, String entityName, Object anything, boolean isCascadeDeleteEnabled) { LOG.tracev( "Cascading to lock: {0}", entityName ); LockMode lockMode = LockMode.NONE; LockOptions lr = new LockOptions(); if ( anything instanceof LockOptions ) { LockOptions lockOptions = (LockOptions) anything; lr.setTimeOut( lockOptions.getTimeOut() ); lr.setScope( lockOptions.getScope() ); lr.setFollowOnLocking( lockOptions.getFollowOnLocking() ); if ( lockOptions.getScope() ) { lockMode = lockOptions.getLockMode(); } } lr.setLockMode( lockMode ); session.buildLockRequest( lr ).lock( entityName, child ); }
protected LockOptions lockOptions(String aliasToLock) { LockOptions lockOptions = new LockOptions(LockMode.UPGRADE); lockOptions.setAliasSpecificLockMode( aliasToLock, LockMode.UPGRADE ); return lockOptions; }
@Override public LockOptions getLockRequest(LockModeType lockModeType, Map<String, Object> properties) { LockOptions lockOptions = new LockOptions(); LockOptions.copy( this.lockOptions, lockOptions ); lockOptions.setLockMode( LockModeTypeHelper.getLockMode( lockModeType ) ); if ( properties != null ) { setLockOptions( properties, lockOptions ); } return lockOptions; }
@Override @SuppressWarnings("unchecked") public QueryImplementor setLockOptions(LockOptions lockOptions) { this.lockOptions.setLockMode( lockOptions.getLockMode() ); this.lockOptions.setScope( lockOptions.getScope() ); this.lockOptions.setTimeOut( lockOptions.getTimeOut() ); this.lockOptions.setFollowOnLocking( lockOptions.getFollowOnLocking() ); return this; }
/** * Make a copy. * * @return The copy */ public LockOptions makeCopy() { final LockOptions copy = new LockOptions(); copy( this, copy ); return copy; }
public LockEvent(Object object, LockMode lockMode, EventSource source) { super(source); this.object = object; this.lockOptions = new LockOptions().setLockMode(lockMode); }
final String result; if ( lockOptions == null || ( lockOptions.getLockMode() == LockMode.NONE && lockOptions.getAliasLockCount() == 0 ) ) { return sql; LockOptions locks = new LockOptions(); locks.setLockMode( lockOptions.getLockMode() ); locks.setTimeOut( lockOptions.getTimeOut() ); locks.setScope( lockOptions.getScope() ); Iterator iter = lockOptions.getAliasLockIterator(); while ( iter.hasNext() ) { Map.Entry me = (Map.Entry) iter.next(); locks.setAliasSpecificLockMode( getAliasName( (String) me.getKey() ), (LockMode) me.getValue() );
( lockOptions.getLockMode() == LockMode.NONE && ( lockOptions.getAliasLockCount() == 0 || ( lockOptions.getAliasLockCount() == 1 && lockOptions .getAliasSpecificLockMode( "this_" ) == LockMode.NONE ) ) ) ) { return sql; if ( ( parameters.getLockOptions().getFollowOnLocking() == null && dialect.useFollowOnLocking( parameters ) ) || ( parameters.getLockOptions().getFollowOnLocking() != null && parameters.getLockOptions().getFollowOnLocking() ) ) { final LockMode lockMode = determineFollowOnLockMode( lockOptions ); if ( lockMode != LockMode.UPGRADE_SKIPLOCKED ) { final LockOptions lockOptionsToUse = new LockOptions( lockMode ); lockOptionsToUse.setTimeOut( lockOptions.getTimeOut() ); lockOptionsToUse.setScope( lockOptions.getScope() ); parameters.setLockOptions( new LockOptions() ); return sql; final LockOptions locks = new LockOptions(lockOptions.getLockMode()); locks.setScope( lockOptions.getScope()); locks.setTimeOut( lockOptions.getTimeOut()); final LockMode lockMode = lockOptions.getAliasSpecificLockMode( drivingSqlAliases[i] ); if ( lockMode != null ) { final Lockable drivingPersister = ( Lockable ) getEntityPersisters()[i]; final String rootSqlAlias = drivingPersister.getRootTableAlias( drivingSqlAliases[i] ); locks.setAliasSpecificLockMode( rootSqlAlias, lockMode ); if ( keyColumnNames != null ) { keyColumnNames.put( rootSqlAlias, drivingPersister.getRootTableIdentifierColumnNames() );
( lockOptions.getLockMode() == LockMode.NONE && lockOptions.getAliasLockCount() == 0 ) ) { return sql; final LockOptions locks = new LockOptions( lockOptions.getLockMode() ); final Map<String, String[]> keyColumnNames = dialect.forUpdateOfColumns() ? new HashMap<>() : null; locks.setScope( lockOptions.getScope() ); locks.setTimeOut( lockOptions.getTimeOut() ); final String sqlAlias = drivingPersister.getRootTableAlias( drivingSqlAlias ); final LockMode effectiveLockMode = lockOptions.getEffectiveLockMode( userAlias ); locks.setAliasSpecificLockMode( sqlAlias, effectiveLockMode );
Dialect dialect, List<AfterLoadAction> afterLoadActions) { if ( ( parameters.getLockOptions().getFollowOnLocking() == null && dialect.useFollowOnLocking( parameters ) ) || ( parameters.getLockOptions().getFollowOnLocking() != null && parameters.getLockOptions().getFollowOnLocking() ) ) { final LockOptions lockOptions = new LockOptions( lockMode ); if ( lockOptions.getLockMode() != LockMode.UPGRADE_SKIPLOCKED ) { if ( lockOptions.getLockMode() != LockMode.NONE ) { LOG.usingFollowOnLocking(); lockOptions.setTimeOut( parameters.getLockOptions().getTimeOut() ); lockOptions.setScope( parameters.getLockOptions().getScope() ); afterLoadActions.add( new AfterLoadAction() { parameters.setLockOptions( new LockOptions() ); return true;
/** * Get the <tt>FOR UPDATE OF column_list</tt> fragment appropriate for this * dialect given the aliases of the columns to be write locked. * * @param aliases The columns to be write locked. * @param lockOptions the lock options to apply * @return The appropriate <tt>FOR UPDATE OF column_list</tt> clause string. */ @SuppressWarnings({"unchecked", "UnusedParameters"}) public String getForUpdateString(String aliases, LockOptions lockOptions) { LockMode lockMode = lockOptions.getLockMode(); final Iterator<Map.Entry<String, LockMode>> itr = lockOptions.getAliasLockIterator(); while ( itr.hasNext() ) { // seek the highest lock mode final Map.Entry<String, LockMode>entry = itr.next(); final LockMode lm = entry.getValue(); if ( lm.greaterThan( lockMode ) ) { lockMode = lm; } } lockOptions.setLockMode( lockMode ); return getForUpdateString( lockOptions ); }
public Query setLockOptions(LockOptions lockOption) { this.lockOptions.setLockMode(lockOption.getLockMode()); this.lockOptions.setScope(lockOption.getScope()); this.lockOptions.setTimeOut(lockOption.getTimeOut()); return this; }
protected void applySkipLocked(Query query) { query.setLockOptions( new LockOptions( lockMode() ) .setTimeOut( LockOptions.SKIP_LOCKED ) ); }
@Override @Nullable public <T> T get(final Class<T> entityClass, final Serializable id, @Nullable final LockMode lockMode) throws DataAccessException { return executeWithNativeSession(session -> { if (lockMode != null) { return session.get(entityClass, id, new LockOptions(lockMode)); } else { return session.get(entityClass, id); } }); }
@Test public void testLockTimeoutAliasNoWait() { String alias = "a"; assertEquals( " for update nowait", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_READ ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_READ ) .setTimeOut( LockOptions.NO_WAIT ) ) ); assertEquals( " for update nowait", dialect.getForUpdateString( alias, new LockOptions( LockMode.PESSIMISTIC_WRITE ).setAliasSpecificLockMode( alias, LockMode.PESSIMISTIC_WRITE ) .setTimeOut( LockOptions.NO_WAIT ) ) ); }
final LockMode requestedLockMode = lockOptionsToUse.getLockMode(); LockMode postRefreshLockMode = null; lockOptionsToUse = LockOptions.copy( event.getLockOptions(), new LockOptions() ); if ( currentLockMode == LockMode.WRITE || currentLockMode == LockMode.PESSIMISTIC_WRITE || lockOptionsToUse.setLockMode( LockMode.READ ); lockOptionsToUse.setLockMode( currentLockMode );
private LockOptions determineLockOptions(LockModeType lockModeType, Integer lockTimeoutHint, Boolean followOnLocking) { LockOptions lockOptions = new LockOptions( LockModeConverter.convertToLockMode( lockModeType ) ) .setFollowOnLocking( followOnLocking ); if ( lockTimeoutHint != null ) { lockOptions.setTimeOut( lockTimeoutHint ); } return lockOptions; }
@Override protected LockMode[] getLockModes(LockOptions lockOptions) { // unfortunately this stuff can't be cached because // it is per-invocation, not constant for the // QueryTranslator instance HashMap nameLockOptions = new HashMap(); if ( lockOptions == null ) { lockOptions = LockOptions.NONE; } if ( lockOptions.getAliasLockCount() > 0 ) { Iterator iter = lockOptions.getAliasLockIterator(); while ( iter.hasNext() ) { Map.Entry me = (Map.Entry) iter.next(); nameLockOptions.put( getAliasName( (String) me.getKey() ), me.getValue() ); } } LockMode[] lockModesArray = new LockMode[names.length]; for ( int i = 0; i < names.length; i++ ) { LockMode lm = (LockMode) nameLockOptions.get( names[i] ); //if ( lm == null ) lm = LockOptions.NONE; if ( lm == null ) { lm = lockOptions.getLockMode(); } lockModesArray[i] = lm; } return lockModesArray; }
/** * @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; }
LockMode lockMode = lockOptions.getLockMode(); final Iterator<Map.Entry<String, LockMode>> itr = lockOptions.getAliasLockIterator(); while ( itr.hasNext() ) { LockMode lockMode = lockOptions.getAliasSpecificLockMode( aliases ); if (lockMode == null ) { lockMode = lockOptions.getLockMode(); return getForUpdateString(aliases); case PESSIMISTIC_READ: return getReadLockString( aliases, lockOptions.getTimeOut() ); case PESSIMISTIC_WRITE: return getWriteLockString( aliases, lockOptions.getTimeOut() ); case UPGRADE_NOWAIT: case FORCE: