Showing posts with label Session Module in Nhibernate. Show all posts
Showing posts with label Session Module in Nhibernate. Show all posts

Wednesday, January 5, 2011

Nhibernate Session Module Design

Session Module is the heart & head of nhibernate framework, so here i am publishing the design of SessionModule

Reference required :
using System;
using System.Web;
using NHibernate;
using NHibernate.Cfg;

Session Module class :
public class SessionModule : System.Web.IHttpModule
{
private static readonly string SESSION_KEY = "CONTEXT_SESSION";
private const string TRANSACTION_KEY = "CONTEXT_TRANSACTION";

[ThreadStatic]
private static NHibernate.ISession m_session;

private static ISessionFactory m_sessionFactory;

public void Dispose()
{

}

public void Init(System.Web.HttpApplication context)
{
log4net.Config.XmlConfigurator.Configure();
context.BeginRequest += new EventHandler(BeginRequestHandlerExecute);
context.EndRequest += new EventHandler(EndRequestHandlerExecute);
// http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx
Configuration cfg = new Configuration();
m_sessionFactory = cfg.BuildSessionFactory();

}

private void BeginRequestHandlerExecute(object sender, EventArgs e)
{
CurrentSession = m_sessionFactory.OpenSession() ;

}

private void EndRequestHandlerExecute(object sender, EventArgs e)
{
ISession currentSession = CurrentSession;
if (currentSession != null)
currentSession.Close();
}

public static ISession CurrentSession
{
get
{
ISession session = (ISession)HttpContext.Current.Items[SESSION_KEY];
return session;
}
set
{
HttpContext.Current.Items[SESSION_KEY] = value;
//SetCurrentSession(value);
}
}


public static ITransaction CurrentTransaction
{
get
{
ITransaction tran = (ITransaction)HttpContext.Current.Items[TRANSACTION_KEY];
return tran;
}
set
{
HttpContext.Current.Items[TRANSACTION_KEY] = value;
}
}
}