Note that there are some explanatory texts on larger screens.

plurals
  1. PONo CurrentSessionContext configured!: ThreadLocalSessionContext.bind(session); isn't binding my session properly
    primarykey
    data
    text
    <p>I'm using Hibernate 4.0.1.Final. </p> <p>I'm having trouble binding a session when testing my service. I used <code>ThreadLocalSessionContext.bind(session)</code> to try and bind the session so that <code>sessionFactory.getCurrentSession()</code> returns a valid session but it isn't working. </p> <p>Calling <code>sessionFactory.getCurrentSession()</code> produces an exception (below). In my service class, I have:</p> <pre><code>public class OrganizationServiceImpl extends AbstractTransactionService implements OrganizationService { public void saveOrganization(final String eodbId, final String parentEodbId, final String name, final String description, final String organizationType, final String url, final String stateAbbrev) { Session session = null; try { session = startOperation(); final State state = orgDao.findStateByAbbrev(stateAbbrev); … protected Session startOperation() throws HibernateException { final Session session = sessionFactory.openSession(); ThreadLocalSessionContext.bind(session); tx = session.beginTransaction(); return session; } </code></pre> <p>Here's the JUnit test that invokes this service …</p> <pre><code>@Before public void setupOrgServiceTest() { Configuration config = new Configuration() .setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect") .setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver") .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:lyceaTestDb") .setProperty("hibernate.connection.username", "sa") .setProperty("hibernate.connection.password", "") .setProperty("hibernate.connection.pool_size", "1") .setProperty("hibernate.connection.autocommit", "true") .setProperty("hibernate.cache.provider_class", "org.hibernate.cache.HashtableCacheProvider") .setProperty("hibernate.hbm2ddl.auto", "create-drop") .setProperty("hibernate.show_sql", "true") .addAnnotatedClass(Organization.class) .addAnnotatedClass(State.class); final ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); sessionFactory = config.buildSessionFactory(serviceRegistry); orgService = new OrganizationServiceImpl(sessionFactory); } // setupOrgSErviceTest @Test public void testSaveOrg() { orgService.saveOrganization(testProps.getProperty("test.school.eodbId"), testProps.getProperty("test.school.parent.eodbId"), testProps.getProperty("test.school.name"), testProps.getProperty("test.school.description"), testProps.getProperty("test.school.org.type"), testProps.getProperty("test.school.url"), testProps.getProperty("test.school.state")); } // testSaveOrg </code></pre> <p>The exception I get when calling <code>sessionFactory.getCurrentSession()</code> is</p> <pre><code>org.myco.myproject.orgsclient.exceptions.DataAccessLayerException: org.hibernate.HibernateException: No CurrentSessionContext configured! at org.myco.myproject.orgsclient.service.AbstractTransactionService.handleException(AbstractTransactionService.java:28) at org.myco.myproject.orgsclient.service.OrganizationServiceImpl.saveOrganization(OrganizationServiceImpl.java:42) at org.myco.myproject.orgsclient.service.OrganizationServiceTest.testSaveOrg(OrganizationServiceTest.java:40) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:881) at org.myco.myproject.orgsclient.dao.OrganizationDAOImpl.findStateByAbbrev(OrganizationDAOImpl.java:29) at org.myco.myproject.orgsclient.service.OrganizationServiceImpl.saveOrganization(OrganizationServiceImpl.java:30) ... 24 more </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload