Hi,
I have seen a lot of examples about session management where the idea is
trying to hide the ISession from the application ( as far as I understood ).
However implementing session management seems to be a complex task and there
is few documentation about how to do that that for both Winforms and
Webforms apps.
Because of that I was thinking if an explicit way would be better for sake
of simplicity by using a class like that below:
public class ConnectionManager
{
private static AppType _appType;
private static ISessionFactory _sessionFactory;
public static void Iniciar(AppType appType, ISessionFactory
sessionFactory)
{
_appType = appType;
_sessionFactory = sessionFactory;
}
//////////////////////////////////////////////////////////////////
// ONLY USED WHEN CONNECTION MANAGER IS IN WINFORM MODE !!!
//////////////////////////////////////////////////////////////////
private static ISession _currentWinFormSession;
private static ITransaction _currentWinFormTransaction;
//////////////////////////////////////////////////////////////////
public static ISession CurrentSession
{
get
{
if (_appType == AppType.Web) {
return (ISession)HttpContext.Current.Session["session"];
}
else { return _currentWinFormSession; }
}
set
{
if (_appType == AppType.Web) {
HttpContext.Current.Session["session"] = value;}
else { _currentWinFormSession = value; }
}
}
private static ITransaction CurrentTransaction
{
get
{
if (_appType == AppType.Web) {
return
(ITransaction)HttpContext.Current.Session["transaction"];
}
else { return _currentWinFormTransaction; }
}
set
{
if (_appType == AppType.Web)
{HttpContext.Current.Session["transaction"] = value;}
else { _currentWinFormTransaction = value; }
}
}
public static void Open()
{
ISession sessao = ConnectionManager.CurrentSession;
if (sessao != null) {throw new SystemException("More than on e
session is opened");}
ConnectionManager.CurrentSession = _sessionFactory.OpenSession();
}
public static void Close()
{
ISession sessao = ConnectionManager.CurrentSession;
if (sessao != null) sessao.Close();
ConnectionManager.CurrentSession = null;
}
public static void BeginTransaction()
{
ISession sessao = ConnectionManager.CurrentSession;
ConnectionManager.CurrentTransaction = sessao.BeginTransaction();
}
public static void CommitTransaction()
{
ConnectionManager.CurrentTransaction.Commit();
}
public static void RollbackTransaction()
{
ConnectionManager.CurrentTransaction.Rollback();
}
}
When an event is triggered by the application, the workflow would be:
void SomeButton_Clicked(...........)
{
try
{
ConnectionManager.Open( );
ConnectionManager.BeginTransaction( );
: : : : code block : : : :
ConnectionManager.CommitTransaction( );
}
catch(Exception ex)
{
ConnectionManager.Rollback( );
: : : exception handling : : : :
}
finally
{
ConnectionManager.Close();
}
}
What do you think about this approach ?
What would be the problems behind it that would prevent so many people not
to use it ?
Thanks in advance.
--
Humberto C Marchezi
---------------------------------------------------------
Master in Electrical Engineering - Automation
Software Consultant and Developer
at the Town Hall of Vitória
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---