Skip to content

Commit 2d0a757

Browse files
committed
HHH-7944 envers classloader issues
1 parent 50a9995 commit 2d0a757

File tree

1 file changed

+17
-4
lines changed

1 file changed

+17
-4
lines changed

hibernate-envers/src/main/java/org/hibernate/envers/configuration/AuditConfiguration.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.hibernate.envers.strategy.ValidityAuditStrategy;
4040
import org.hibernate.envers.synchronization.AuditProcessManager;
4141
import org.hibernate.envers.tools.reflection.ReflectionTools;
42+
import org.hibernate.internal.util.ClassLoaderHelper;
4243
import org.hibernate.internal.util.ReflectHelper;
4344
import org.hibernate.property.Getter;
4445
import org.hibernate.service.classloading.spi.ClassLoaderService;
@@ -95,6 +96,11 @@ public AuditConfiguration(Configuration cfg) {
9596
}
9697

9798
public AuditConfiguration(Configuration cfg, ClassLoaderService classLoaderService) {
99+
// TODO: Temporarily allow Envers to continuing using
100+
// hibernate-commons-annotations' for reflection and class loading.
101+
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
102+
Thread.currentThread().setContextClassLoader( ClassLoaderHelper.getContextClassLoader() );
103+
98104
Properties properties = cfg.getProperties();
99105

100106
ReflectionManager reflectionManager = cfg.getReflectionManager();
@@ -115,6 +121,8 @@ public AuditConfiguration(Configuration cfg, ClassLoaderService classLoaderServi
115121
cfg, reflectionManager, globalCfg, auditEntCfg, auditStrategy,
116122
revInfoCfgResult.getRevisionInfoXmlMapping(), revInfoCfgResult.getRevisionInfoRelationMapping()
117123
);
124+
125+
Thread.currentThread().setContextClassLoader( tccl );
118126
}
119127

120128
private AuditStrategy initializeAuditStrategy(Class<?> revisionInfoClass, PropertyData revisionInfoTimestampData) {
@@ -123,11 +131,16 @@ private AuditStrategy initializeAuditStrategy(Class<?> revisionInfoClass, Proper
123131
try {
124132

125133
Class<?> auditStrategyClass = null;
126-
if ( classLoaderService != null ) {
127-
auditStrategyClass = classLoaderService.classForName( auditEntCfg.getAuditStrategyName() );
134+
try {
135+
auditStrategyClass = this.getClass().getClassLoader().loadClass( auditEntCfg.getAuditStrategyName() );
128136
}
129-
else {
130-
auditStrategyClass = ReflectHelper.classForName( auditEntCfg.getAuditStrategyName() );
137+
catch (Exception e) {
138+
if ( classLoaderService != null ) {
139+
auditStrategyClass = classLoaderService.classForName( auditEntCfg.getAuditStrategyName() );
140+
}
141+
else {
142+
auditStrategyClass = ReflectHelper.classForName( auditEntCfg.getAuditStrategyName() );
143+
}
131144
}
132145

133146
strategy = (AuditStrategy) ReflectHelper.getDefaultConstructor(auditStrategyClass).newInstance();

0 commit comments

Comments
 (0)