From fe16334dd49d9ed9402142d2287ac3b72265d07e Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 10 Oct 2012 14:24:14 +0200 Subject: [PATCH] Hibernate 4 LocalSessionFactoryBuilder sets thread context ClassLoader (for JBoss 7 compatibility) Issue: SPR-9846 --- .../hibernate4/LocalSessionFactoryBuilder.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java b/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java index 0113d07b6d2..0a4bc9ee204 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java @@ -239,7 +239,22 @@ public class LocalSessionFactoryBuilder extends Configuration { @Override @SuppressWarnings("deprecation") public SessionFactory buildSessionFactory() throws HibernateException { - return super.buildSessionFactory(); + ClassLoader appClassLoader = (ClassLoader) getProperties().get(AvailableSettings.APP_CLASSLOADER); + Thread currentThread = Thread.currentThread(); + ClassLoader threadContextClassLoader = currentThread.getContextClassLoader(); + boolean overrideClassLoader = + (appClassLoader != null && !appClassLoader.equals(threadContextClassLoader)); + if (overrideClassLoader) { + currentThread.setContextClassLoader(appClassLoader); + } + try { + return super.buildSessionFactory(); + } + finally { + if (overrideClassLoader) { + currentThread.setContextClassLoader(threadContextClassLoader); + } + } } }