Merge branch 'local_grails'
[grails.git] / src / web / org / codehaus / groovy / grails / webflow / persistence / FlowAwareCurrentSessionContext.java
blob702ef05b9e4d0766f58ea23ef7a4cedfccd2d2d8
1 /* Copyright 2004-2005 Graeme Rocher
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
15 package org.codehaus.groovy.grails.webflow.persistence;
17 import org.hibernate.HibernateException;
18 import org.hibernate.classic.Session;
19 import org.hibernate.engine.SessionFactoryImplementor;
20 import org.springframework.orm.hibernate3.SpringSessionContext;
21 import org.springframework.webflow.core.collection.MutableAttributeMap;
22 import org.springframework.webflow.execution.FlowExecutionContext;
23 import org.springframework.webflow.execution.FlowExecutionContextHolder;
25 /**
26 * A Hibernate CurrentSessionContext that is aware of flow requests and looks up the Session from the flow
27 * instead of the current Thread
29 * @author Graeme Rocher
30 * @since 1.0
31 * <p/>
32 * Created: Jan 18, 2008
34 public class FlowAwareCurrentSessionContext extends SpringSessionContext{
35 /**
36 * Create a new SpringSessionContext for the given Hibernate SessionFactory.
38 * @param sessionFactory the SessionFactory to provide current Sessions for
40 public FlowAwareCurrentSessionContext(SessionFactoryImplementor sessionFactory) {
41 super(sessionFactory);
44 public Session currentSession() throws HibernateException {
45 try {
46 FlowExecutionContext context = FlowExecutionContextHolder.getFlowExecutionContext();
47 MutableAttributeMap flowScope = context.getActiveSession().getScope();
48 Session s = (Session)flowScope.get("session", org.hibernate.Session.class);
49 if(s == null) return super.currentSession();
50 else return s;
51 } catch (IllegalStateException e) {
52 return super.currentSession();