/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * PUBLIC: * Return this objects ObjectChangePolicy. */ public ObjectChangePolicy getObjectChangePolicy() { // part of fix for 4410581: project xml must save change policy // if no change-policy XML element, field is null: lazy-init to default if (changePolicy == null) { changePolicy = new DeferredChangeDetectionPolicy(); } return changePolicy; }
/** * INTERNAL: * For an aggregate mapping the reference descriptor is cloned. The cloned descriptor is then * assigned primary keys and table names before initialize. Once the cloned descriptor is initialized * it is assigned as reference descriptor in the aggregate mapping. This is a very specific * behavior for aggregate mappings. The original descriptor is used only for creating clones and * after that the aggregate mapping never uses it. * Some initialization is done in postInitialize to ensure the target descriptor's references are initialized. */ public void postInitialize(AbstractSession session) throws DescriptorException { super.postInitialize(session); if (getReferenceDescriptor() != null) { // Changed as part of fix for bug#4410581 aggregate mapping can not be set to use change tracking if owning descriptor does not use it. // Basically the policies should be the same, but we also allow deferred with attribute for CMP2 (courser grained). if (getDescriptor().getObjectChangePolicy().getClass().equals(DeferredChangeDetectionPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } getReferenceDescriptor().postInitialize(session); } }
/** * INTERNAL: */ public void process(MetadataDescriptor descriptor) { // Set the change tracking flag on the Metadata Descriptor. descriptor.setHasChangeTracking(); // Process the change tracking metadata. ClassDescriptor classDescriptor = descriptor.getClassDescriptor(); if (m_type == null || m_type.equals(ChangeTrackingType.AUTO.name())) { // By setting the policy to null, this will unset any global // settings. EclipseLink will then determine the change tracking // policy at runtime. classDescriptor.setObjectChangePolicy(null); } else if (m_type.equals(ChangeTrackingType.ATTRIBUTE.name())) { classDescriptor.setObjectChangePolicy(new AttributeChangeTrackingPolicy()); } else if (m_type.equals(ChangeTrackingType.OBJECT.name())) { classDescriptor.setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } else if (m_type.equals(ChangeTrackingType.DEFERRED.name())) { classDescriptor.setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } }
/** * INTERNAL: * Initialize the mapping. */ @Override public void postInitialize(AbstractSession session) throws DescriptorException { super.postInitialize(session); if (getReferenceDescriptor() != null) { getReferenceDescriptor().getCachePolicy().setCacheIsolation(this.descriptor.getCachePolicy().getCacheIsolation()); // Changed as part of fix for bug#4410581 aggregate mapping can not be set to use change tracking if owning descriptor does not use it. // Basically the policies should be the same, but we also allow deferred with attribute for CMP2 (courser grained). if (getDescriptor().getObjectChangePolicy().getClass().equals(DeferredChangeDetectionPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } } }
/** * INTERNAL: * Initialize the mapping. */ @Override public void postInitialize(AbstractSession session) throws DescriptorException { super.postInitialize(session); if (getReferenceDescriptor() != null) { getReferenceDescriptor().getCachePolicy().setCacheIsolation(this.descriptor.getCachePolicy().getCacheIsolation()); // Changed as part of fix for bug#4410581 aggregate mapping can not be set to use change tracking if owning descriptor does not use it. // Basically the policies should be the same, but we also allow deferred with attribute for CMP2 (courser grained). if (getDescriptor().getObjectChangePolicy().getClass().equals(DeferredChangeDetectionPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } } }
getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) {
getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) {
private void customizeObjectChangePolicy(final ClassDescriptor clazzDescriptor, final Session session) { final String propertyValue = (String) session.getProperty( PersistenceUnitProperties.ZALANDO_ECLIPSELINK_CHANGE_TRACKER_NAME); ChangeTrackingType changeTrackingType = ChangeTrackingType.AUTO; if (propertyValue != null && (!propertyValue.trim().isEmpty())) { try { changeTrackingType = ChangeTrackingType.valueOf(propertyValue); } catch (Exception e) { logWarning(session, COULD_NOT_DETERMINE_CHANGE_TRACKING_TYPE, propertyValue); changeTrackingType = ChangeTrackingType.AUTO; } } switch (changeTrackingType) { case DEFERRED : clazzDescriptor.setObjectChangePolicy(new DeferredChangeDetectionPolicy()); logFine(session, SET_OBJECT_CHANGE_POLICY_TO, DEFERRED_CHANGE_DETECTION_POLICY); break; case OBJECT : clazzDescriptor.setObjectChangePolicy(new ObjectChangeTrackingPolicy()); logFine(session, SET_OBJECT_CHANGE_POLICY_TO, OBJECT_CHANGE_TRACKING_POLICY); break; case ATTRIBUTE : clazzDescriptor.setObjectChangePolicy(new AttributeChangeTrackingPolicy()); logFine(session, SET_OBJECT_CHANGE_POLICY_TO, ATTRIBUTE_CHANGE_TRACKING_POLICY); break; case AUTO : default : logFine(session, USE_DEFAULT_CHANGE_TRACKING_POLICY); } }
/** * INTERNAL: * For an aggregate mapping the reference descriptor is cloned. The cloned descriptor is then * assigned primary keys and table names before initialize. Once the cloned descriptor is initialized * it is assigned as reference descriptor in the aggregate mapping. This is a very specific * behavior for aggregate mappings. The original descriptor is used only for creating clones and * after that the aggregate mapping never uses it. * Some initialization is done in postInitialize to ensure the target descriptor's references are initialized. */ @Override public void postInitialize(AbstractSession session) throws DescriptorException { super.postInitialize(session); if (getReferenceDescriptor() != null) { getReferenceDescriptor().getCachePolicy().setCacheIsolation(this.descriptor.getCachePolicy().getCacheIsolation()); // Changed as part of fix for bug#4410581 aggregate mapping can not be set to use change tracking if owning descriptor does not use it. // Basically the policies should be the same, but we also allow deferred with attribute for CMP2 (courser grained). if (getDescriptor().getObjectChangePolicy().getClass().equals(DeferredChangeDetectionPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) { getReferenceDescriptor().setObjectChangePolicy(new ObjectChangeTrackingPolicy()); } //need to set the primary key classification as the mappings for the pk fields might not be available if (getReferenceDescriptor().isAggregateDescriptor()){ getReferenceDescriptor().getObjectBuilder().setPrimaryKeyClassifications(this.getDescriptor().getObjectBuilder().getPrimaryKeyClassifications()); getReferenceDescriptor().setHasSimplePrimaryKey(this.getDescriptor().hasSimplePrimaryKey()); } getReferenceDescriptor().postInitialize(session); } }
getReferenceDescriptor().setObjectChangePolicy(new DeferredChangeDetectionPolicy()); } else if (getDescriptor().getObjectChangePolicy().getClass().equals(ObjectChangeTrackingPolicy.class) && getReferenceDescriptor().getObjectChangePolicy().getClass().equals(AttributeChangeTrackingPolicy.class)) {