/** * Merge the attribute values. */ protected void mergeAttributeValue(Object targetAttributeValue, boolean isTargetUnInitialized, Object sourceAttributeValue, MergeManager mergeManager, AbstractSession targetSession) { // don't merge read-only attributes if (mergeManager.getSession().isClassReadOnly(sourceAttributeValue.getClass())) { return; } if (mergeManager.getSession().isClassReadOnly(targetAttributeValue.getClass())) { return; } // Toggle change tracking during the merge. ClassDescriptor descriptor = getReferenceDescriptor(sourceAttributeValue, mergeManager.getSession()); descriptor.getObjectChangePolicy().dissableEventProcessing(targetAttributeValue); try { descriptor.getObjectBuilder().mergeIntoObject(targetAttributeValue, isTargetUnInitialized, sourceAttributeValue, mergeManager, targetSession); } finally { descriptor.getObjectChangePolicy().enableEventProcessing(targetAttributeValue); } }
/** * Merge the attribute values. */ protected void mergeAttributeValue(Object targetAttributeValue, boolean isTargetUnInitialized, Object sourceAttributeValue, MergeManager mergeManager) { // don't merge read-only attributes if (mergeManager.getSession().isClassReadOnly(sourceAttributeValue.getClass())) { return; } if (mergeManager.getSession().isClassReadOnly(targetAttributeValue.getClass())) { return; } // Toggle change tracking during the merge. ClassDescriptor descriptor = getReferenceDescriptor(sourceAttributeValue, mergeManager.getSession()); descriptor.getObjectChangePolicy().dissableEventProcessing(targetAttributeValue); try { descriptor.getObjectBuilder().mergeIntoObject(targetAttributeValue, isTargetUnInitialized, sourceAttributeValue, mergeManager); } finally { descriptor.getObjectChangePolicy().enableEventProcessing(targetAttributeValue); } }
/** * Merge the attribute values. */ protected void mergeAttributeValue(Object targetAttributeValue, boolean isTargetUnInitialized, Object sourceAttributeValue, MergeManager mergeManager, AbstractSession targetSession) { // don't merge read-only attributes if (mergeManager.getSession().isClassReadOnly(sourceAttributeValue.getClass())) { return; } if (mergeManager.getSession().isClassReadOnly(targetAttributeValue.getClass())) { return; } // Toggle change tracking during the merge. ClassDescriptor descriptor = getReferenceDescriptor(sourceAttributeValue, mergeManager.getSession()); descriptor.getObjectChangePolicy().dissableEventProcessing(targetAttributeValue); try { descriptor.getObjectBuilder().mergeIntoObject(targetAttributeValue, isTargetUnInitialized, sourceAttributeValue, mergeManager, targetSession); } finally { descriptor.getObjectChangePolicy().enableEventProcessing(targetAttributeValue); } }
/** * INTERNAL: * This method is called from clone and register. It includes the processing * required to clone an object, including populating attributes, putting in * UOW identitymap and building a backupclone */ protected void populateAndRegisterObject(Object original, Object workingClone, CacheKey unitOfWorkCacheKey, CacheKey parentCacheKey, ClassDescriptor descriptor) { // This must be registered before it is built to avoid cycles. unitOfWorkCacheKey.setObject(workingClone); unitOfWorkCacheKey.setReadTime(parentCacheKey.getReadTime()); unitOfWorkCacheKey.setWriteLockValue(parentCacheKey.getWriteLockValue()); //Set ChangeListener for ObjectChangeTrackingPolicy and AttributeChangeTrackingPolicy, //but not DeferredChangeDetectionPolicy. Build backup clone for DeferredChangeDetectionPolicy //or ObjectChangeTrackingPolicy, but not for AttributeChangeTrackingPolicy. // - Set listener before populating attributes so aggregates can find the parent's listener ObjectChangePolicy changePolicy = descriptor.getObjectChangePolicy(); changePolicy.setChangeListener(workingClone, this, descriptor); changePolicy.dissableEventProcessing(workingClone); ObjectBuilder builder = descriptor.getObjectBuilder(); builder.populateAttributesForClone(original, parentCacheKey, workingClone, null, this); Object backupClone = changePolicy.buildBackupClone(workingClone, builder, this); // PERF: Avoid put if no backup clone. if (workingClone != backupClone) { getCloneMapping().put(workingClone, backupClone); } changePolicy.enableEventProcessing(workingClone); }
/** * INTERNAL: * This method is called from clone and register. It includes the processing * required to clone an object, including populating attributes, putting in * UOW identitymap and building a backupclone */ protected void populateAndRegisterObject(Object original, Object workingClone, CacheKey unitOfWorkCacheKey, CacheKey parentCacheKey, ClassDescriptor descriptor) { // This must be registered before it is built to avoid cycles. unitOfWorkCacheKey.setObject(workingClone); unitOfWorkCacheKey.setReadTime(parentCacheKey.getReadTime()); unitOfWorkCacheKey.setWriteLockValue(parentCacheKey.getWriteLockValue()); //Set ChangeListener for ObjectChangeTrackingPolicy and AttributeChangeTrackingPolicy, //but not DeferredChangeDetectionPolicy. Build backup clone for DeferredChangeDetectionPolicy //or ObjectChangeTrackingPolicy, but not for AttributeChangeTrackingPolicy. // - Set listener before populating attributes so aggregates can find the parent's listener ObjectChangePolicy changePolicy = descriptor.getObjectChangePolicy(); changePolicy.setChangeListener(workingClone, this, descriptor); changePolicy.dissableEventProcessing(workingClone); ObjectBuilder builder = descriptor.getObjectBuilder(); builder.populateAttributesForClone(original, parentCacheKey, workingClone, null, this); Object backupClone = changePolicy.buildBackupClone(workingClone, builder, this); // PERF: Avoid put if no backup clone. if (workingClone != backupClone) { getCloneMapping().put(workingClone, backupClone); } changePolicy.enableEventProcessing(workingClone); }
descriptor.getObjectChangePolicy().enableEventProcessing(registeredObject);
policy.enableEventProcessing(workingClone);
/** * INTERNAL: * This method is called from clone and register. It includes the processing * required to clone an object, including populating attributes, putting in * UOW identitymap and building a backupclone */ protected void populateAndRegisterObject(Object original, Object workingClone, CacheKey unitOfWorkCacheKey, CacheKey parentCacheKey, ClassDescriptor descriptor) { // This must be registered before it is built to avoid cycles. unitOfWorkCacheKey.setObject(workingClone); unitOfWorkCacheKey.setReadTime(parentCacheKey.getReadTime()); unitOfWorkCacheKey.setWriteLockValue(parentCacheKey.getWriteLockValue()); //Set ChangeListener for ObjectChangeTrackingPolicy and AttributeChangeTrackingPolicy, //but not DeferredChangeDetectionPolicy. Build backup clone for DeferredChangeDetectionPolicy //or ObjectChangeTrackingPolicy, but not for AttributeChangeTrackingPolicy. // - Set listener before populating attributes so aggregates can find the parent's listener descriptor.getObjectChangePolicy().setChangeListener(workingClone, this, descriptor); descriptor.getObjectChangePolicy().dissableEventProcessing(workingClone); ObjectBuilder builder = descriptor.getObjectBuilder(); builder.populateAttributesForClone(original, workingClone, this); Object backupClone = descriptor.getObjectChangePolicy().buildBackupClone(workingClone, builder, this); // PERF: Avoid put is no backup clone. if (workingClone != backupClone) { getCloneMapping().put(workingClone, backupClone); } descriptor.getObjectChangePolicy().enableEventProcessing(workingClone); }
policy.enableEventProcessing(workingClone);
policy.enableEventProcessing(workingClone);
descriptor.getObjectChangePolicy().enableEventProcessing(clone);
descriptor.getObjectChangePolicy().enableEventProcessing(registeredObject);
descriptor.getObjectBuilder().mergeIntoObject(original, false, clone, this, this.session); } finally { descriptor.getObjectChangePolicy().enableEventProcessing(original);
descriptor.getObjectChangePolicy().enableEventProcessing(registeredObject);
descriptor.getObjectChangePolicy().enableEventProcessing(clone);
descriptor.getObjectBuilder().mergeIntoObject(original, false, clone, this, this.session); } finally { descriptor.getObjectChangePolicy().enableEventProcessing(original);
descriptor.getObjectChangePolicy().enableEventProcessing(clone);
policy.clearChanges(workingClone, unitOfWork, descriptor); policy.enableEventProcessing(workingClone); unitOfWork.getCloneMapping().put(workingClone, backupClone); query.recordCloneForPessimisticLocking(workingClone, unitOfWork);
policy.clearChanges(workingClone, unitOfWork, descriptor, isARefresh); policy.enableEventProcessing(workingClone); unitOfWork.getCloneMapping().put(workingClone, backupClone); query.recordCloneForPessimisticLocking(workingClone, unitOfWork);
policy.clearChanges(workingClone, unitOfWork, descriptor, isARefresh); policy.enableEventProcessing(workingClone); unitOfWork.getCloneMapping().put(workingClone, backupClone); query.recordCloneForPessimisticLocking(workingClone, unitOfWork);