Uploaded image for project: 'iBatis for .NET'
  1. iBatis for .NET
  2. IBATISNET-185

Allow custom ISessionStoreFactory

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • DataMapper 1.6
    • DataAccess, DataMapper
    • None

    Description

      The interfaces and abstract class in IBatisNet.DataAccess.SessionScope and IBatisNet.DataMapper.SessionScope should be combined and moved into IBatisNet.Common and a new interface named IBatisNet.Common.SessionStore.ISessionStoreFactory should be created:

      public interface ISessionStoreFactory
      {
      void Initialize(IDictionary properties);
      ISessionStore GetSessionStore(string sessionStore);
      // void Shutdown(); ???
      }

      "setting" nodes in the SqlMap.config file currently only contains boolean values. I think we should keep with that convention if possible and introduce a seperate node named "sessionStoreFactory" that should mimic the custom cache support (allow properties to be passed into the Initialize method):

      <sessionStoreFactory type="Company.IBatisNet.CustomSessionStoreFactory, Company.IBatisNet">
      <property name="Hello" value="World" />
      </sessionStoreFactory>

      IBatisNet should ship with at least two factories:

      CallContextSessionStoreFactory
      HybridSessionStoreFactory (HttpContext != null ? HttpContextSessionStore : CallContextSessionStore)

      The default factory would be HybirdSessionStoreFactory. The user could manually specify one of the built-in factories by using an upper case alias:

      <sessionStoreFactory type="CALLCONTEXT" />
      <sessionStoreFactory type="HYBRID" />

      For the DataAccess project, a context could use a custom session store factory like this:

      <daoSessionHandler id="SqlMap">
      <property name="resource" value="SqlMap_MSSQL_OleDb.config"/>
      <property name="sessionStoreFactory" value="Company.IBatisNet.CustomSessionStoreFactory, Company.IBatisNet"/>
      <property name="Hello" value="World"/>
      </daoSessionHandler>

      The IDictionary passed into ISessionStoreFactory.Initialize would contain three keys: resource, sessionStoreFactory, and Hello.

      If you wanted to always use CALLCONTEXT with a data access context:

      <daoSessionHandler id="SqlMap">
      <property name="resource" value="SqlMap_MSSQL_OleDb.config"/>
      <property name="sessionStoreFactory" value="CALLCONTEXT"/>
      </daoSessionHandler>

      Attachments

        Activity

          People

            gilles Gilles Bayon
            ron liu ron
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: