Announcement Announcement Module
Collapse
No announcement yet.
How to exposeTransactionAware on a 2nd sessionFactory in hibernate4? Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • How to exposeTransactionAware on a 2nd sessionFactory in hibernate4?

    The test below was working in my application with Hibernate3. When I upgraded it to hibernate4, it started failing.

    Code:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(inheritLocations=false,locations={
    "/hibernate/spring-SF-tests.xml",
    "/hibernate/spring-transaction.xml",
    "/hibernate/testBeans.xml"
    ,"/hibernate/spring-audit.xml",
    "/hibernate/iwrs-mail-beans-test.xml",
    "/hibernate/fake-audit-meaning.xml"
    })
    @TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
    public class CodeAuditIntegrationTest extends CodeIntegrationTest {
    
    @Autowired
    private SessionFactory auditFactory;
    
    
    @Before
    public void cleanAudit(){
    auditFactory.getCurrentSession().createQuery("delete from AuditLogRecord").executeUpdate();
    }
    
    @Test
    public void clinicalTrialAssociationTest() {
    super.clinicalTrialAssociationTest();
    }
    
    }
    Which is failing with:
    org.hibernate.HibernateException: No Session found for current thread
    at org.springframework.orm.hibernate4.SpringSessionCo ntext.currentSession(SpringSessionContext.java:97)
    at org.hibernate.internal.SessionFactoryImpl.getCurre ntSession(SessionFactoryImpl.java:881)
    I have 2 different session factories in my app: sessionFactory and auditFactory. Both are configured in spring (see [1]).
    The problem is that in an hibernate4 configuration the property exposeTransactionAwareSessionFactory was removed. I had that set to true for my auditFactory. I believe removing this property makes the injected auditFactory not being able to pick up the session in the transaction (as txManger is configured for sessionFactory), therefore yielding the error.

    Questions:
    1. how can I make the auditFactory have transactions managed by spring on this test?
    2. that's what was happening with the exposeTransactionAwareSessionFactory property in hib3, correct?

    Thanks!

    [1] The relavant XML configuration:
    Code:
    <bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <tx:annotation-driven transaction-manager="txManager" />
    
            <bean id="sessionFactory" scope="singleton"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2dll}</prop>
    <prop key="hibernate.hbm2ddl.import_files">${hibernate.sql_scripts}</prop>
    </props>
    </property>
    <property name="packagesToScan">...</property>
    <property name="annotatedPackages">...</property>
    <property name="mappingLocations">...</property>
    
    <property name="dataSource" ref="c3p0DataSource" />
    <property name="entityInterceptor" ref="auditInterceptor" />
    </bean>
    
    <bean id="auditFactory" scope="singleton"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="exposeTransactionAwareSessionFactory"> -->needs to be removed in hibernate4!
    <value>true</value>
    </property>
    <property name="mappingLocations">...</property>
    <property name="packagesToScan">...</property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2dll}</prop>
    </props>
    </property>
    <property name="dataSource" ref="c3p0DataSource" />
    </bean>

  • #2
    Does any Spring guru have any idea regarding this?

    Comment

    Working...
    X