public void acquireLock(ObjectBuildingQuery query){ // PERF: Only use deferred locking if required. // CR#3876308 If joining is used, deferred locks are still required. if (query.requiresDeferredLocks()) { this.acquireDeferredLock(); int counter = 0; while ((this.object == null) && (counter < 1000)) { if (this.getActiveThread() == Thread.currentThread()) { break; } //must release lock here to prevent acquiring multiple deferred locks but only //releasing one at the end of the build object call. //bug 5156075 this.releaseDeferredLock(); //sleep and try again if we are not the owner of the lock for CR 2317 // prevents us from modifying a cache key that another thread has locked. try { Thread.sleep(10); } catch (InterruptedException exception) { } this.acquireDeferredLock(); counter++; } if (counter == 1000) { throw ConcurrencyException.maxTriesLockOnBuildObjectExceded(this.getActiveThread(), Thread.currentThread()); } } else { this.acquire(); } }
if (query.requiresDeferredLocks()) { this.acquireDeferredLock();
nestedQuery.setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks()); return nestedQuery;
nestedQuery.setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks()); return nestedQuery;
if (query.requiresDeferredLocks()) { cacheKey = this.getIdentityMapAccessorInstance().acquireDeferredLock(primaryKey, concreteDescriptor.getJavaClass(), concreteDescriptor, query.isCacheCheckComplete() || query.shouldRetrieveBypassCache());
if (query.requiresDeferredLocks()) { cacheKey = this.getIdentityMapAccessorInstance().acquireDeferredLock(primaryKey, concreteDescriptor.getJavaClass(), concreteDescriptor, query.isCacheCheckComplete() || query.shouldRetrieveBypassCache());
if (query.isObjectBuildingQuery() && ((ObjectBuildingQuery)query).requiresDeferredLocks() || descriptor.shouldAcquireCascadedLocks()) { return session.getIdentityMapAccessorInstance().getFromIdentityMapWithDeferredLock(primaryKey, getReadObjectQuery().getReferenceClass(), false, descriptor); } else {
if (query.isObjectBuildingQuery() && ((ObjectBuildingQuery)query).requiresDeferredLocks() || descriptor.shouldAcquireCascadedLocks()) { return session.getIdentityMapAccessorInstance().getFromIdentityMapWithDeferredLock(primaryKey, getReadObjectQuery().getReferenceClass(), false, descriptor); } else {
nestedQuery.setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks()); nestedQuery.setPrefetchedCacheKeys(sourceQuery.getPrefetchedCacheKeys()); nestedQuery.setShouldRefreshIdentityMapResult(sourceQuery.shouldRefreshIdentityMapResult());
nestedQuery.setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks()); nestedQuery.setPrefetchedCacheKeys(sourceQuery.getPrefetchedCacheKeys()); nestedQuery.setShouldRefreshIdentityMapResult(sourceQuery.shouldRefreshIdentityMapResult());
nestedQuery.setRequiresDeferredLocks(baseQuery.requiresDeferredLocks());
nestedQuery.setRequiresDeferredLocks(baseQuery.requiresDeferredLocks());
if (query.requiresDeferredLocks()) { cacheKey.releaseDeferredLock(); } else { if (query.requiresDeferredLocks()) { sharedCacheKey.releaseDeferredLock(); } else {
if (query.requiresDeferredLocks()) { cacheKey.releaseDeferredLock(); } else { if (query.requiresDeferredLocks()) { sharedCacheKey.releaseDeferredLock(); } else {
if (query.requiresDeferredLocks()) { cacheKey.releaseDeferredLock(); } else {
if (query.requiresDeferredLocks()) { cacheKey.releaseDeferredLock(); } else {
targetQuery.setAccessors(sourceQuery.getAccessors()); ((ObjectLevelReadQuery)targetQuery).setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks());
targetQuery.setAccessors(sourceQuery.getAccessors()); ((ObjectLevelReadQuery)targetQuery).setRequiresDeferredLocks(sourceQuery.requiresDeferredLocks());