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
;
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
32 * Created: Jan 18, 2008
34 public class FlowAwareCurrentSessionContext
extends SpringSessionContext
{
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
{
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();
51 } catch (IllegalStateException e
) {
52 return super.currentSession();