I have resolved problem by not using Enterprise Library. Instead my
.NET functions RequestLock and ReleaseLock were modified to use
dotConnect for Oracle classes directly. i.e OracleConnection and
OracleCommand.
The problem with Enterprise Library was how those classes were managing connections.
The code you see below now works. The _DatabaseConnection object is
created when the application starts up. It opens up a connection
(OracleConnection object) that is subsequently referenced by these
functions. The key is the connection does not go away and therefore the
locks are maintained.
Public Function RequestLock(ByVal lockName As String) As Boolean
Dim isLocked As Boolean = True
Try
Dim conn As OracleConnection
Dim cmd As OracleCommand
Dim param As OracleParameter
conn = _DatabaseConnection.GetConnection()
cmd = conn.CreateCommand()
cmd.CommandText = "REQUEST_LOCK"
cmd.CommandType = CommandType.StoredProcedure
param = cmd.CreateParameter()
param.Direction = ParameterDirection.Input
param.OracleDbType = Devart.Data.Oracle.OracleDbType.VarChar
param.Value = lockName
param.ParameterName = "i_lock_name"
cmd.Parameters.Add(param)
cmd.ExecuteNonQuery()
Catch ex As Exception
isLocked = False
End Try
Return isLocked
End Function
Public Function ReleaseLock(ByVal lockName As String) As Boolean
Dim isReleased As Boolean = True
Try
Dim conn As OracleConnection
Dim cmd As OracleCommand
Dim param As OracleParameter
conn = _DatabaseConnection.GetConnection()
cmd = conn.CreateCommand()
cmd.CommandText = "RELEASE_LOCK"
cmd.CommandType = CommandType.StoredProcedure
param = cmd.CreateParameter()
param.Direction = ParameterDirection.Input
param.OracleDbType = Devart.Data.Oracle.OracleDbType.VarChar
param.Value = lockName
param.ParameterName = "i_lock_name"
cmd.Parameters.Add(param)
cmd.ExecuteNonQuery()
Catch ex As Exception
isReleased = False
End Try
Return isReleased
End Function
No comments:
Post a Comment