Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate : No CurrentSessionContext configured

I'm stuck due to some silly mistake somewhere but not able to figure out !

Hibernate 4.2.6

I have referred to this question, asked several times previously, for example here

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration SYSTEM     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  <hibernate-configuration>     <session-factory>         <property name="hibernate.bytecode.use_reflection_optimizer">false</property>          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>         <property name="hibernate.connection.password">root</property>         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>         <property name="hibernate.connection.username">root</property>          <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>          <property name="show_sql">true</property>          <property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocalSessionContext</property>          <mapping resource="Event.hbm.xml"></mapping>     </session-factory> </hibernate-configuration> 

Event.hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC      "-//Hibernate/Hibernate Mapping DTD 3.0//EN"     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  <hibernate-mapping>      <class name="com.db.pojo.Event" table="Events">          <id name="id" column="Id">             <generator class="native"></generator>         </id>         <property name="title" column="Title"></property>          <property name="date" column="Date" type="timestamp"></property>      </class>  </hibernate-mapping> 

HibernateUtil

package com.db.util;  import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistryBuilder;  public class HibernateUtil {      private static final SessionFactory sessionFactory = buildSessionFactory();      private static SessionFactory buildSessionFactory() {         // TODO Auto-generated method stub          Configuration configuration = new Configuration();         configuration.configure("hibernate.cfg.xml");          ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder()                 .applySettings(configuration.getProperties());         return configuration.buildSessionFactory(serviceRegistryBuilder                 .buildServiceRegistry());     }      public static SessionFactory getSessionFactory() {         return sessionFactory;     }  } 

Whenever I try this :

Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

I get :

Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!     at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988)     at test.EventManager.createAndStoreEvent(EventManager.java:27)     at test.EventManager.main(EventManager.java:17) 

Edited after executing on my personal laptop

  1. The code runs fine if I use 'thread' in the cfg file
  2. If I use 'ThreadLocalSessionContext', I get the below exception(Please note that even the output on the console is now enormous than the previous run) - is it that the class 'ThreadLocalSessionContext' was not present in the 3.0 version(I tried to find in the API but the site doesn't have the older API )

Now I'm suspicious about the dtd - are Hibernate 3.0 jars being referred somewhere while the local ones are ignored, even though SYSTEM is specified? I got the previous exception(no current context) while executing the code on a machine with restricted Internet access. But when I executed the same on my personal laptop :

eventDesciption : Team eventDate : 2013-12-12 Nov 28, 2013 8:55:59 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final} Nov 28, 2013 8:55:59 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {4.2.6.Final} Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Environment buildBytecodeProvider INFO: HHH000021: Bytecode provider name : javassist Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration configure INFO: HHH000043: Configuring from resource: hibernate.cfg.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration getConfigurationInputStream INFO: HHH000040: Configuration resource: hibernate.cfg.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration addResource INFO: HHH000221: Reading mappings from resource: resources/Event.hbm.xml Nov 28, 2013 8:55:59 PM org.hibernate.cfg.Configuration doConfigure INFO: HHH000041: Configured SessionFactory: null Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!) Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000115: Hibernate connection pool size: 20 Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000006: Autocommit mode: false Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/test] Nov 28, 2013 8:55:59 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure INFO: HHH000046: Connection properties: {user=root, password=****} Nov 28, 2013 8:56:00 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect Nov 28, 2013 8:56:00 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 Nov 28, 2013 8:56:00 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) Nov 28, 2013 8:56:00 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory Nov 28, 2013 8:56:00 PM org.hibernate.internal.SessionFactoryImpl buildCurrentSessionContext ERROR: HHH000302: Unable to construct current session context [org.hibernate.context.ThreadLocalSessionContext] org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.context.ThreadLocalSessionContext]     at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:152)     at org.hibernate.internal.SessionFactoryImpl.buildCurrentSessionContext(SessionFactoryImpl.java:1544)     at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:516)     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1790)     at com.db.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:19)     at com.db.util.HibernateUtil.<clinit>(HibernateUtil.java:9)     at test.EventManager.createAndStoreEvent(EventManager.java:27)     at test.EventManager.main(EventManager.java:17) Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.hibernate.context.ThreadLocalSessionContext     at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:319)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at java.lang.Class.forName0(Native Method)     at java.lang.Class.forName(Unknown Source)     at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:149)     ... 7 more  Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!     at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:988)     at test.EventManager.createAndStoreEvent(EventManager.java:27)     at test.EventManager.main(EventManager.java:17) 
like image 903
Kaliyug Antagonist Avatar asked Nov 28 '13 11:11

Kaliyug Antagonist


2 Answers

As per the best of my knowledge, your configuration is not proper for current session. Instead of

<property name="hibernate.current_session_context_class">org.hibernate.context.ThreadLocal‌​SessionContext</property> 

use

<property name="hibernate.current_session_context_class">thread</property> 

For more information on this, please visit this link:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/architecture.html#architecture-current-session

Specially, read the last lines of last paragraph.

For those who're using Hibernate 4.1,

<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property> 

Reference: https://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/context/internal/ThreadLocalSessionContext.html

like image 151
RAS Avatar answered Sep 18 '22 11:09

RAS


Try changing

Session session = HibernateUtil.getSessionFactory().getCurrentSession();  

to :

Session session = HibernateUtil.getSessionFactory().openSession(); 
like image 24
Mukesh S Avatar answered Sep 18 '22 11:09

Mukesh S