I have the source of 1.2.1 compiled under 2005.
My DatabaseManager code follows:
Public Module DatabaseManager
Private _lock As Object = New Object()
Private _mapper As SqlMapper
Private _nestedMapper As SqlMapper
Public Sub Configure(ByVal configurationFile As FileInfo, ByVal nestedConfigurationFile As FileInfo)
Dim builder As DomSqlMapBuilder = New DomSqlMapBuilder()
Dim nestedBuilder As DomSqlMapBuilder = New DomSqlMapBuilder()
SyncLock (_lock)
If _mapper Is Nothing Then
_mapper = builder.Configure(configurationFile)
End If
If _nestedMapper Is Nothing Then
If nestedConfigurationFile IsNot Nothing Then
If _log.IsInfoEnabled Then
_log.Info("Configuring nested mapper using configuration file {0} ", nestedConfigurationFile.Name)
End If
_nestedMapper = nestedBuilder.Configure(nestedConfigurationFile)
If _log.IsInfoEnabled Then
_log.Info("Done configuring nested mapper using configuration file {0} ", nestedConfigurationFile.Name)
End If
End If
End If
End SyncLock
End Sub
Friend Function NestedInstance() As SqlMapper
Dim mapper As SqlMapper
SyncLock (_lock)
mapper = _nestedMapper
End SyncLock
Return mapper
End Function
Friend Function Instance() As SqlMapper
Dim mapper As SqlMapper
SyncLock (_lock)
mapper = _mapper
End SyncLock
Return mapper
End Function
End Module
On 1/4/06, Gilles Bayon <[EMAIL PROTECTED]> wrote:
Each SqlMapper use a different 'TLS' session store.Which iBATIS version do you use ?
On 1/4/06, Michael Schall <[EMAIL PROTECTED] > wrote:I need the ability to have muliple transactions / connections open to
the same database on the same thread at the same time.
For example I want to:
1) Open a connection and transaction (Session1) to a database
2) Perform multiple inserts to tables in the database
3) Commit and close (Session1)
Easy right.
My problem is that in order to perform the multiple inserts I need to
get / update information in another table. I have created multiple
DomSqlMapBuilders, configure them with different configuration files,
and store them as separate SqlMapper instances. So my example needs
to look like
1) Open a connection and transaction (Session1 on SqlMapper1) to a database
2) Open a connection and transaction (Session2 on SqlMapper2) to the
same database
3) Get and Increment Counter (Session2)
4) Commit and close (Session2)
5) Perform insert to table in the database using counter (Session1)
6) Open a connection and transaction (Session2) to the same database
7) Get and Increment Counter (Session2)
8) Commit and close (Session2)
9) Perform insert to table in the database using counter (Session1)
10) ...
11) Commit and close (Session1)
If for any reason I need to rollback (Session1) at step 10, the
actions performed on (Session2) should not be rolled back as they have
been committed.
However when I try and do step 2 SqlMapper2 is already in a
transaction. It seems like due to the way the session is stored in
TLS, it will only allow for one session to be stored per thread.
Is there a way to get this to work? I can submit code if that helps.
Thanks for your time.
Mike

