Wednesday, February 5, 2014

Not using Enterprise Library

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