Author: fbascheper
Date: 2010-09-28 19:50:53 -0400 (Tue, 28 Sep 2010)
New Revision: 20745
Removed:
core/trunk/envers/src/test/java/org/hibernate/envers/test/integration/strategy/
Modified:
core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditConfiguration.java
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditEntitiesConfiguration.java
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java
core/trunk/envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java
core/trunk/envers/src/test/resources/testng.xml
Log:
HHH5371 - Rollback until after 3.6.0 release as per Adam's request via IM
Modified:
core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml
===================================================================
---
core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/documentation/envers/src/main/docbook/en-US/content/configuration.xml 2010-09-28
23:50:53 UTC (rev 20745)
@@ -249,33 +249,6 @@
valid if the validity audit strategy is used.
</entry>
</row>
- <row>
- <entry>
-
<property>org.hibernate.envers.audit_strategy_validity_store_revend_timestamp</property>
- </entry>
- <entry>
- false
- </entry>
- <entry>
- Should the timestamp of the end revision be stored, until which
the data was valid, in addition to the end revision itself.
- This is useful to be able to purge old Audit records out of a
relational database by using table partitioning.
- Partitioning requires a column that exists within the table.
- This property is only evaluated if the ValidityAuditStrategy is
used.
- </entry>
- </row>
- <row>
- <entry>
-
<property>org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name</property>
- </entry>
- <entry>
- REVEND_TSTMP
- </entry>
- <entry>
- Column name of the timestamp of the end revision until which the
data was valid.
- Only used if the ValidityAuditStrategy is used, and
-
org.hibernate.envers.audit_strategy_validity_store_revend_timestamp evaluates to true
- </entry>
- </row>
</tbody>
</tgroup>
</table>
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditConfiguration.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditConfiguration.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditConfiguration.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -28,18 +28,16 @@
import java.util.WeakHashMap;
import org.hibernate.MappingException;
-import org.hibernate.annotations.common.reflection.ReflectionManager;
-import org.hibernate.cfg.Configuration;
import org.hibernate.envers.entities.EntitiesConfigurations;
-import org.hibernate.envers.entities.PropertyData;
import org.hibernate.envers.revisioninfo.RevisionInfoNumberReader;
import org.hibernate.envers.revisioninfo.RevisionInfoQueryCreator;
-import org.hibernate.envers.strategy.AuditStrategy;
-import org.hibernate.envers.strategy.ValidityAuditStrategy;
import org.hibernate.envers.synchronization.AuditProcessManager;
-import org.hibernate.envers.tools.reflection.ReflectionTools;
-import org.hibernate.property.Getter;
+import org.hibernate.envers.strategy.AuditStrategy;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.annotations.common.reflection.ReflectionManager;
+
/**
* @author Adam Warski (adam at warski dot org)
* @author Stephanie Pau at Markit Group Plc
@@ -81,6 +79,7 @@
return auditStrategy;
}
+ @SuppressWarnings({ "unchecked" })
public AuditConfiguration(Configuration cfg) {
Properties properties = cfg.getProperties();
@@ -90,33 +89,20 @@
auditEntCfg = new AuditEntitiesConfiguration(properties,
revInfoCfgResult.getRevisionInfoEntityName());
globalCfg = new GlobalConfiguration(properties);
auditProcessManager = new
AuditProcessManager(revInfoCfgResult.getRevisionInfoGenerator());
+
+ try {
+ Class auditStrategyClass =
Thread.currentThread().getContextClassLoader().loadClass(auditEntCfg.getAuditStrategyName());
+ auditStrategy = (AuditStrategy) auditStrategyClass.newInstance();
+ } catch (Exception e) {
+ throw new MappingException(String.format("Unable to create
AuditStrategy[%s] instance." , auditEntCfg.getAuditStrategyName()));
+ }
+
revisionInfoQueryCreator = revInfoCfgResult.getRevisionInfoQueryCreator();
revisionInfoNumberReader = revInfoCfgResult.getRevisionInfoNumberReader();
- auditStrategy = initializeAuditStrategy(revInfoCfgResult.getRevisionInfoClass(),
- revInfoCfgResult.getRevisionInfoTimestampData());
entCfg = new EntitiesConfigurator().configure(cfg, reflectionManager, globalCfg,
auditEntCfg, auditStrategy,
revInfoCfgResult.getRevisionInfoXmlMapping(),
revInfoCfgResult.getRevisionInfoRelationMapping());
}
- private AuditStrategy initializeAuditStrategy(Class<?> revisionInfoClass,
PropertyData revisionInfoTimestampData) {
- AuditStrategy strategy;
-
- try {
- Class<?> auditStrategyClass =
Thread.currentThread().getContextClassLoader().loadClass(auditEntCfg.getAuditStrategyName());
- strategy = (AuditStrategy) auditStrategyClass.newInstance();
- } catch (Exception e) {
- throw new MappingException(String.format("Unable to create
AuditStrategy[%s] instance." , auditEntCfg.getAuditStrategyName()));
- }
-
- if (strategy instanceof ValidityAuditStrategy) {
- // further initialization required
- Getter revisionTimestampGetter = ReflectionTools.getGetter(revisionInfoClass,
revisionInfoTimestampData);
- ((ValidityAuditStrategy)
strategy).setRevisionTimestampGetter(revisionTimestampGetter);
- }
-
- return strategy;
- }
-
//
private static Map<Configuration, AuditConfiguration> cfgs
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditEntitiesConfiguration.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditEntitiesConfiguration.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/AuditEntitiesConfiguration.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -25,11 +25,17 @@
import static org.hibernate.envers.tools.Tools.getProperty;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import org.hibernate.MappingException;
import org.hibernate.envers.strategy.DefaultAuditStrategy;
+import org.hibernate.envers.strategy.ValidityAuditStrategy;
/**
* Configuration of versions entities - names of fields, entities and tables created to
store versioning information.
@@ -55,9 +61,6 @@
private final Map<String, String> customAuditTablesNames;
private final String revisionEndFieldName;
-
- private final boolean revisionEndTimestampEnabled;
- private final String revisionEndTimestampFieldName;
public AuditEntitiesConfiguration(Properties properties, String
revisionInfoEntityName) {
this.revisionInfoEntityName = revisionInfoEntityName;
@@ -94,21 +97,6 @@
"org.hibernate.envers.audit_strategy_valid_time_end_name",
"REVEND");
- String revisionEndTimestampEnabledStr = getProperty(properties,
-
"org.hibernate.envers.audit_strategy_validity_store_revend_timestamp",
-
"org.hibernate.envers.audit_strategy_validity_store_revend_timestamp",
- "false");
- revisionEndTimestampEnabled =
Boolean.parseBoolean(revisionEndTimestampEnabledStr);
-
- if (revisionEndTimestampEnabled) {
- revisionEndTimestampFieldName = getProperty(properties,
-
"org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name",
-
"org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name",
- "REVEND_TSTMP");
- } else {
- revisionEndTimestampFieldName = null;
- }
-
customAuditTablesNames = new HashMap<String, String>();
revisionNumberPath = originalIdPropName + "." + revisionFieldName +
".id";
@@ -123,14 +111,6 @@
return revisionFieldName;
}
- public boolean isRevisionEndTimestampEnabled() {
- return revisionEndTimestampEnabled;
- }
-
- public String getRevisionEndTimestampFieldName() {
- return revisionEndTimestampFieldName;
- }
-
public String getRevisionNumberPath() {
return revisionNumberPath;
}
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/RevisionInfoConfiguration.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -29,6 +29,7 @@
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
+import org.hibernate.envers.Audited;
import org.hibernate.envers.*;
import org.hibernate.envers.entities.PropertyData;
import org.hibernate.envers.configuration.metadata.MetadataTools;
@@ -175,6 +176,7 @@
"property");
}
+ @SuppressWarnings({"unchecked"})
public RevisionInfoConfigurationResult configure(Configuration cfg, ReflectionManager
reflectionManager) {
Iterator<PersistentClass> classes = (Iterator<PersistentClass>)
cfg.getClassMappings();
boolean revisionEntityFound = false;
@@ -243,8 +245,7 @@
new RevisionInfoQueryCreator(revisionInfoEntityName,
revisionInfoIdData.getName(),
revisionInfoTimestampData.getName(), isTimestampAsDate()),
generateRevisionInfoRelationMapping(),
- new RevisionInfoNumberReader(revisionInfoClass, revisionInfoIdData),
revisionInfoEntityName,
- revisionInfoClass, revisionInfoTimestampData);
+ new RevisionInfoNumberReader(revisionInfoClass, revisionInfoIdData),
revisionInfoEntityName);
}
private boolean isTimestampAsDate() {
@@ -260,22 +261,17 @@
private final Element revisionInfoRelationMapping;
private final RevisionInfoNumberReader revisionInfoNumberReader;
private final String revisionInfoEntityName;
- private final Class<?> revisionInfoClass;
- private final PropertyData revisionInfoTimestampData;
RevisionInfoConfigurationResult(RevisionInfoGenerator revisionInfoGenerator,
Document revisionInfoXmlMapping,
RevisionInfoQueryCreator revisionInfoQueryCreator,
Element revisionInfoRelationMapping,
- RevisionInfoNumberReader revisionInfoNumberReader,
String revisionInfoEntityName, Class<?> revisionInfoClass,
- PropertyData revisionInfoTimestampData) {
+ RevisionInfoNumberReader revisionInfoNumberReader,
String revisionInfoEntityName) {
this.revisionInfoGenerator = revisionInfoGenerator;
this.revisionInfoXmlMapping = revisionInfoXmlMapping;
this.revisionInfoQueryCreator = revisionInfoQueryCreator;
this.revisionInfoRelationMapping = revisionInfoRelationMapping;
this.revisionInfoNumberReader = revisionInfoNumberReader;
this.revisionInfoEntityName = revisionInfoEntityName;
- this.revisionInfoClass = revisionInfoClass;
- this.revisionInfoTimestampData = revisionInfoTimestampData;
}
public RevisionInfoGenerator getRevisionInfoGenerator() {
@@ -301,13 +297,4 @@
public String getRevisionInfoEntityName() {
return revisionInfoEntityName;
}
-
- public Class<?> getRevisionInfoClass() {
- return revisionInfoClass;
- }
-
- public PropertyData getRevisionInfoTimestampData() {
- return revisionInfoTimestampData;
- }
-
}
\ No newline at end of file
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/AuditMetadataGenerator.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -55,7 +55,6 @@
import org.hibernate.type.ComponentType;
import org.hibernate.type.ManyToOneType;
import org.hibernate.type.OneToOneType;
-import org.hibernate.type.TimestampType;
import org.hibernate.type.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,7 +64,7 @@
* @author Sebastian Komander
* @author Tomasz Bech
* @author Stephanie Pau at Markit Group Plc
- * @author Hernán Chanfreau
+ * @author Hern�n Chanfreau
*/
public final class AuditMetadataGenerator {
private static final Logger log =
LoggerFactory.getLogger(AuditMetadataGenerator.class);
@@ -145,7 +144,7 @@
addEndRevision(any_mapping);
}
- private void addEndRevision(Element any_mapping ) {
+ private void addEndRevision(Element any_mapping) {
// Add the end-revision field, if the appropriate strategy is used.
if (auditStrategy instanceof ValidityAuditStrategy) {
Element end_rev_mapping = (Element) revisionInfoRelationMapping.clone();
@@ -154,16 +153,10 @@
MetadataTools.addOrModifyColumn(end_rev_mapping,
verEntCfg.getRevisionEndFieldName());
any_mapping.add(end_rev_mapping);
-
- if (verEntCfg.isRevisionEndTimestampEnabled()) {
- // add a column for the timestamp of the end revision
- String revisionInfoTimestampSqlType = TimestampType.INSTANCE.getName();
- Element timestampProperty = MetadataTools.addProperty(any_mapping,
verEntCfg.getRevisionEndTimestampFieldName(), revisionInfoTimestampSqlType, true, true,
false);
- MetadataTools.addColumn(timestampProperty,
verEntCfg.getRevisionEndTimestampFieldName(), 0, 0, 0, null);
- }
}
}
+ @SuppressWarnings({"unchecked"})
void addValue(Element parent, Value value, CompositeMapperBuilder currentMapper,
String entityName,
EntityXmlMappingData xmlMappingData, PropertyAuditingData
propertyAuditingData,
boolean insertable, boolean firstPass) {
@@ -211,6 +204,7 @@
}
}
+ @SuppressWarnings({"unchecked"})
private void addProperties(Element parent, Iterator<Property> properties,
CompositeMapperBuilder currentMapper,
ClassAuditingData auditingData, String entityName,
EntityXmlMappingData xmlMappingData,
boolean firstPass) {
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/configuration/metadata/MetadataTools.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -49,7 +49,7 @@
return id_mapping;
}
- public static Element addProperty(Element parent, String name, String type, boolean
insertable, boolean updateable, boolean key) {
+ public static Element addProperty(Element parent, String name, String type, boolean
insertable, boolean key) {
Element prop_mapping;
if (key) {
prop_mapping = parent.addElement("key-property");
@@ -59,7 +59,7 @@
prop_mapping.addAttribute("name", name);
prop_mapping.addAttribute("insert", Boolean.toString(insertable));
- prop_mapping.addAttribute("update", Boolean.toString(updateable));
+ prop_mapping.addAttribute("update", "false");
if (type != null) {
prop_mapping.addAttribute("type", type);
@@ -68,10 +68,6 @@
return prop_mapping;
}
- public static Element addProperty(Element parent, String name, String type, boolean
insertable, boolean key) {
- return addProperty(parent, name, type, insertable, false, key);
- }
-
private static void addOrModifyAttribute(Element parent, String name, String value)
{
Attribute attribute = parent.attribute(name);
if (attribute == null) {
Modified:
core/trunk/envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java
===================================================================
---
core/trunk/envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java 2010-09-28
22:24:09 UTC (rev 20744)
+++
core/trunk/envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java 2010-09-28
23:50:53 UTC (rev 20745)
@@ -1,7 +1,6 @@
package org.hibernate.envers.strategy;
import java.io.Serializable;
-import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -16,7 +15,6 @@
import org.hibernate.envers.entities.mapper.relation.MiddleIdData;
import org.hibernate.envers.tools.query.Parameters;
import org.hibernate.envers.tools.query.QueryBuilder;
-import org.hibernate.property.Getter;
/**
* Audit strategy which persists and retrieves audit information using a validity
algorithm, based on the
@@ -41,11 +39,7 @@
* @author Adam Warski (adam at warski dot org)
*/
public class ValidityAuditStrategy implements AuditStrategy {
-
- /** getter for the revision entity field annotated with @RevisionTimestamp */
- private Getter revisionTimestampGetter = null;
-
- public void perform(Session session, String entityName, AuditConfiguration auditCfg,
Serializable id, Object data,
+ public void perform(Session session, String entityName, AuditConfiguration auditCfg,
Serializable id, Object data,
Object revision) {
AuditEntitiesConfiguration audEntCfg = auditCfg.getAuditEntCfg();
String auditedEntityName = audEntCfg.getAuditEntityName(entityName);
@@ -74,22 +68,27 @@
public void performCollectionChange(Session session, AuditConfiguration auditCfg,
PersistentCollectionChangeData
persistentCollectionChangeData, Object revision) {
// Update the end date of the previous row if this operation is expected to have
a previous row
- // Constructing a query (there are multiple id fields):
- // select e from audited_middle_ent e where e.end_rev is null and e.id1 = :id1
and e.id2 = :id2 ...
+ if (getRevisionType(auditCfg, persistentCollectionChangeData.getData()) !=
RevisionType.ADD) {
+ /*
+ Constructing a query (there are multiple id fields):
+ select e from audited_middle_ent e where e.end_rev is null and e.id1 = :id1
and e.id2 = :id2 ...
+ */
- QueryBuilder qb = new
QueryBuilder(persistentCollectionChangeData.getEntityName(), "e");
+ QueryBuilder qb = new
QueryBuilder(persistentCollectionChangeData.getEntityName(), "e");
- // Adding a parameter for each id component, except the rev number
- String originalIdPropName = auditCfg.getAuditEntCfg().getOriginalIdPropName();
- Map<String, Object> originalId = (Map<String, Object>)
persistentCollectionChangeData.getData().get(
+ // Adding a parameter for each id component, except the rev number
+ String originalIdPropName =
auditCfg.getAuditEntCfg().getOriginalIdPropName();
+ Map<String, Object> originalId = (Map<String, Object>)
persistentCollectionChangeData.getData().get(
originalIdPropName);
- for (Map.Entry<String, Object> originalIdEntry : originalId.entrySet()) {
- if
(!auditCfg.getAuditEntCfg().getRevisionFieldName().equals(originalIdEntry.getKey())) {
- qb.getRootParameters().addWhereWithParam(originalIdPropName + "."
+ originalIdEntry.getKey(),
- true, "=", originalIdEntry.getValue());
- }
+ for (Map.Entry<String, Object> originalIdEntry : originalId.entrySet())
{
+ if
(!auditCfg.getAuditEntCfg().getRevisionFieldName().equals(originalIdEntry.getKey())) {
+ qb.getRootParameters().addWhereWithParam(originalIdPropName +
"." + originalIdEntry.getKey(),
+ true, "=", originalIdEntry.getValue());
+ }
+ }
+
+ updateLastRevision(session, auditCfg, qb, originalId,
persistentCollectionChangeData.getEntityName(), revision);
}
- updateLastRevision(session, auditCfg, qb, originalId,
persistentCollectionChangeData.getEntityName(), revision);
// Save the audit data
session.save(persistentCollectionChangeData.getEntityName(),
persistentCollectionChangeData.getData());
@@ -111,11 +110,7 @@
addRevisionRestriction(rootParameters, revisionProperty, revisionEndProperty,
addAlias);
}
- public void setRevisionTimestampGetter(Getter revisionTimestampGetter) {
- this.revisionTimestampGetter = revisionTimestampGetter;
- }
-
- private void addRevisionRestriction(Parameters rootParameters,
+ private void addRevisionRestriction(Parameters rootParameters,
String revisionProperty, String revisionEndProperty, boolean addAlias) {
// e.revision <= _revision and (e.endRevision > _revision or e.endRevision is
null)
@@ -134,7 +129,7 @@
private void updateLastRevision(Session session, AuditConfiguration auditCfg,
QueryBuilder qb,
Object id, String auditedEntityName, Object revision)
{
String revisionEndFieldName =
auditCfg.getAuditEntCfg().getRevisionEndFieldName();
-
+
// e.end_rev is null
qb.getRootParameters().addWhere(revisionEndFieldName, true, "is",
"null", false);
@@ -146,28 +141,10 @@
Object previousData = l.get(0);
((Map<String, Object>) previousData).put(revisionEndFieldName,
revision);
- if (auditCfg.getAuditEntCfg().isRevisionEndTimestampEnabled()) {
- // Determine the value of the revision property annotated with
@RevisionTimestamp
- Date revisionEndTimestamp;
- String revEndTimestampFieldName =
auditCfg.getAuditEntCfg().getRevisionEndTimestampFieldName();
- Object revEndTimestampObj = this.revisionTimestampGetter.get(revision);
-
- // convert to a java.util.Date
- if (revEndTimestampObj instanceof Date) {
- revisionEndTimestamp = (Date) revEndTimestampObj;
- } else {
- revisionEndTimestamp = new Date((Long) revEndTimestampObj);
- }
-
- // Setting the end revision timestamp
- ((Map<String, Object>) previousData).put(revEndTimestampFieldName,
revisionEndTimestamp);
- }
-
// Saving the previous version
session.save(auditedEntityName, previousData);
-
- } else if(l.size() > 1) {
- throw new RuntimeException("Cannot find previous revision for entity
" + auditedEntityName + " and id " + id + " received " + l.size()
+ " rows back");
+ } else {
+ throw new RuntimeException("Cannot find previous revision for entity
" + auditedEntityName + " and id " + id);
}
}
}
Modified: core/trunk/envers/src/test/resources/testng.xml
===================================================================
--- core/trunk/envers/src/test/resources/testng.xml 2010-09-28 22:24:09 UTC (rev 20744)
+++ core/trunk/envers/src/test/resources/testng.xml 2010-09-28 23:50:53 UTC (rev 20745)
@@ -68,7 +68,6 @@
<package name="org.hibernate.envers.test.integration.secondary"
/>
<package
name="org.hibernate.envers.test.integration.secondary.ids" />
<package
name="org.hibernate.envers.test.integration.serialization" />
- <package name="org.hibernate.envers.test.integration.strategy"
/>
<package name="org.hibernate.envers.test.integration.superclass"
/>
<package
name="org.hibernate.envers.test.integration.entityNames.auditedEntity" />
<package
name="org.hibernate.envers.test.integration.entityNames.manyToManyAudited"
/>