HHH-6964 EnversIntegrator is always detected by default while initializing Serviceregistry using Native Hibernate API causing a MappingException even when Envers is not used
This commit is contained in:
parent
aa33b57242
commit
e07aff45da
|
@ -39,6 +39,7 @@ 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.service.classloading.spi.ClassLoaderService;
|
||||
|
||||
/**
|
||||
* @author Adam Warski (adam at warski dot org)
|
||||
|
@ -53,6 +54,7 @@ public class AuditConfiguration {
|
|||
private final RevisionInfoQueryCreator revisionInfoQueryCreator;
|
||||
private final RevisionInfoNumberReader revisionInfoNumberReader;
|
||||
private final ModifiedEntityNamesReader modifiedEntityNamesReader;
|
||||
private final ClassLoaderService classLoaderService;
|
||||
|
||||
public AuditEntitiesConfiguration getAuditEntCfg() {
|
||||
return auditEntCfg;
|
||||
|
@ -87,28 +89,39 @@ public class AuditConfiguration {
|
|||
}
|
||||
|
||||
public AuditConfiguration(Configuration cfg) {
|
||||
Properties properties = cfg.getProperties();
|
||||
|
||||
ReflectionManager reflectionManager = cfg.getReflectionManager();
|
||||
globalCfg = new GlobalConfiguration(properties);
|
||||
RevisionInfoConfiguration revInfoCfg = new RevisionInfoConfiguration(globalCfg);
|
||||
RevisionInfoConfigurationResult revInfoCfgResult = revInfoCfg.configure(cfg, reflectionManager);
|
||||
auditEntCfg = new AuditEntitiesConfiguration(properties, revInfoCfgResult.getRevisionInfoEntityName());
|
||||
auditProcessManager = new AuditProcessManager(revInfoCfgResult.getRevisionInfoGenerator());
|
||||
revisionInfoQueryCreator = revInfoCfgResult.getRevisionInfoQueryCreator();
|
||||
revisionInfoNumberReader = revInfoCfgResult.getRevisionInfoNumberReader();
|
||||
modifiedEntityNamesReader = revInfoCfgResult.getModifiedEntityNamesReader();
|
||||
auditStrategy = initializeAuditStrategy(revInfoCfgResult.getRevisionInfoClass(),
|
||||
revInfoCfgResult.getRevisionInfoTimestampData());
|
||||
entCfg = new EntitiesConfigurator().configure(cfg, reflectionManager, globalCfg, auditEntCfg, auditStrategy,
|
||||
revInfoCfgResult.getRevisionInfoXmlMapping(), revInfoCfgResult.getRevisionInfoRelationMapping());
|
||||
this(cfg, null);
|
||||
}
|
||||
public AuditConfiguration(Configuration cfg, ClassLoaderService classLoaderService) {
|
||||
Properties properties = cfg.getProperties();
|
||||
|
||||
ReflectionManager reflectionManager = cfg.getReflectionManager();
|
||||
globalCfg = new GlobalConfiguration(properties);
|
||||
RevisionInfoConfiguration revInfoCfg = new RevisionInfoConfiguration(globalCfg);
|
||||
RevisionInfoConfigurationResult revInfoCfgResult = revInfoCfg.configure(cfg, reflectionManager);
|
||||
auditEntCfg = new AuditEntitiesConfiguration(properties, revInfoCfgResult.getRevisionInfoEntityName());
|
||||
auditProcessManager = new AuditProcessManager(revInfoCfgResult.getRevisionInfoGenerator());
|
||||
revisionInfoQueryCreator = revInfoCfgResult.getRevisionInfoQueryCreator();
|
||||
revisionInfoNumberReader = revInfoCfgResult.getRevisionInfoNumberReader();
|
||||
modifiedEntityNamesReader = revInfoCfgResult.getModifiedEntityNamesReader();
|
||||
this.classLoaderService = classLoaderService;
|
||||
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());
|
||||
|
||||
Class<?> auditStrategyClass = null;
|
||||
if(classLoaderService!=null){
|
||||
auditStrategyClass = classLoaderService.classForName( auditEntCfg.getAuditStrategyName() );
|
||||
} else {
|
||||
auditStrategyClass = Thread.currentThread().getContextClassLoader().loadClass(auditEntCfg.getAuditStrategyName());
|
||||
}
|
||||
|
||||
strategy = (AuditStrategy) auditStrategyClass.newInstance();
|
||||
} catch (Exception e) {
|
||||
throw new MappingException(
|
||||
|
@ -131,15 +144,18 @@ public class AuditConfiguration {
|
|||
= new WeakHashMap<Configuration, AuditConfiguration>();
|
||||
|
||||
public synchronized static AuditConfiguration getFor(Configuration cfg) {
|
||||
AuditConfiguration verCfg = cfgs.get(cfg);
|
||||
|
||||
if (verCfg == null) {
|
||||
verCfg = new AuditConfiguration(cfg);
|
||||
cfgs.put(cfg, verCfg);
|
||||
|
||||
cfg.buildMappings();
|
||||
}
|
||||
|
||||
return verCfg;
|
||||
return getFor( cfg, null );
|
||||
}
|
||||
public synchronized static AuditConfiguration getFor(Configuration cfg, ClassLoaderService classLoaderService) {
|
||||
AuditConfiguration verCfg = cfgs.get(cfg);
|
||||
|
||||
if (verCfg == null) {
|
||||
verCfg = new AuditConfiguration(cfg, classLoaderService);
|
||||
cfgs.put(cfg, verCfg);
|
||||
|
||||
cfg.buildMappings();
|
||||
}
|
||||
|
||||
return verCfg;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ import org.hibernate.integrator.spi.Integrator;
|
|||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||
import org.hibernate.metamodel.source.MetadataImplementor;
|
||||
import org.hibernate.service.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
|
||||
|
||||
/**
|
||||
|
@ -60,7 +61,7 @@ public class EnversIntegrator implements Integrator {
|
|||
EventListenerRegistry listenerRegistry = serviceRegistry.getService( EventListenerRegistry.class );
|
||||
listenerRegistry.addDuplicationStrategy( EnversListenerDuplicationStrategy.INSTANCE );
|
||||
|
||||
final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration );
|
||||
final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration, serviceRegistry.getService( ClassLoaderService.class ) );
|
||||
|
||||
if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
|
||||
listenerRegistry.appendListeners( EventType.POST_DELETE, new EnversPostDeleteEventListenerImpl( enversConfiguration ) );
|
||||
|
|
Loading…
Reference in New Issue