diff options
author | Lluis Sanchez <lluis@novell.com> | 2004-04-05 14:50:02 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2004-04-05 14:50:02 +0400 |
commit | 9f0f5fe6d0851315c3f56d43db6b8b1c06a3f2a4 (patch) | |
tree | 385cb869aa11fec5f4318bc115183401c0437bb6 | |
parent | 4d13dcb35199dcac306573c998f128e83550926a (diff) |
* Mono.Data.SybaseClient.dll.sources: Removed SybaseConnectionPool.cs.
* Mono.Data.SybaseClient/SybaseConnection.cs: Use connection pool
implemented in Mono.Data.Tds.
svn path=/trunk/mcs/; revision=25033
4 files changed, 22 insertions, 180 deletions
diff --git a/mcs/class/Mono.Data.SybaseClient/ChangeLog b/mcs/class/Mono.Data.SybaseClient/ChangeLog index 421ba21abcd..039ab70d94d 100644 --- a/mcs/class/Mono.Data.SybaseClient/ChangeLog +++ b/mcs/class/Mono.Data.SybaseClient/ChangeLog @@ -1,3 +1,9 @@ +2004-04-05 Lluis Sanchez Gual <lluis@ximian.com> + + * Mono.Data.SybaseClient.dll.sources: Removed SybaseConnectionPool.cs. + * Mono.Data.SybaseClient/SybaseConnection.cs: Use connection pool + implemented in Mono.Data.Tds. + 2004-04-01 Lluis Sanchez Gual <lluis@ximian.com> * Mono.Data.SybaseClient/SybaseDataReader.cs: Null values are now diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources index 9f5792ac214..547eba686b7 100644 --- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources +++ b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient.dll.sources @@ -2,7 +2,6 @@ Assembly/Locale.cs Mono.Data.SybaseClient/SybaseCommand.cs Mono.Data.SybaseClient/SybaseCommandBuilder.cs Mono.Data.SybaseClient/SybaseConnection.cs -Mono.Data.SybaseClient/SybaseConnectionPool.cs Mono.Data.SybaseClient/SybaseDataAdapter.cs Mono.Data.SybaseClient/SybaseDataReader.cs Mono.Data.SybaseClient/SybaseError.cs diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs index b2d8397de38..67a05b55309 100644 --- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs +++ b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnection.cs @@ -28,10 +28,10 @@ namespace Mono.Data.SybaseClient { bool disposed = false; // The set of SQL connection pools - static Hashtable SybaseConnectionPools = new Hashtable (); + static TdsConnectionPoolManager sybaseConnectionPools = new TdsConnectionPoolManager (TdsVersion.tds50); // The current connection pool - SybaseConnectionPool pool; + TdsConnectionPool pool; // The connection string that identifies this connection string connectionString = null; @@ -295,13 +295,10 @@ namespace Mono.Data.SybaseClient { tds = new Tds50 (serverName, port, PacketSize, ConnectionTimeout); } else { - pool = (SybaseConnectionPool) SybaseConnectionPools [connectionString]; - if (pool == null) { - ParseDataSource (dataSource, out port, out serverName); - pool = new SybaseConnectionPool (serverName, port, packetSize, ConnectionTimeout, minPoolSize, maxPoolSize); - SybaseConnectionPools [connectionString] = pool; - } - tds = pool.AllocateConnection (); + ParseDataSource (dataSource, out port, out serverName); + TdsConnectionInfo info = new TdsConnectionInfo (serverName, port, packetSize, ConnectionTimeout, minPoolSize, maxPoolSize); + pool = sybaseConnectionPools.GetConnectionPool (connectionString, info); + tds = pool.GetConnection (); } } catch (TdsTimeoutException e) { @@ -312,9 +309,16 @@ namespace Mono.Data.SybaseClient { tds.TdsInfoMessage += new TdsInternalInfoMessageEventHandler (MessageHandler); if (!tds.IsConnected) { - tds.Connect (parms); - ChangeState (ConnectionState.Open); - ChangeDatabase (parms.Database); + try { + tds.Connect (parms); + ChangeState (ConnectionState.Open); + ChangeDatabase (parms.Database); + } + catch { + if (pooling) + pool.ReleaseConnection (tds); + throw; + } } else if (connectionReset) { // tds.ExecuteNonQuery ("EXEC sp_reset_connection"); FIXME diff --git a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs b/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs deleted file mode 100644 index 8f6760815b8..00000000000 --- a/mcs/class/Mono.Data.SybaseClient/Mono.Data.SybaseClient/SybaseConnectionPool.cs +++ /dev/null @@ -1,167 +0,0 @@ -// -// Mono.Data.SybaseClient.SybaseConnectionPool.cs -// -// Author: -// Tim Coleman (tim@timcoleman.com) -// -// Copyright (C) 2002 Tim Coleman -// - -using Mono.Data.Tds.Protocol; -using System; -using System.Collections; -using System.Threading; - -namespace Mono.Data.SybaseClient { - internal class SybaseConnectionPool : MarshalByRefObject, IList, ICollection, IEnumerable - { - #region Fields - - ArrayList list = new ArrayList (); - - int maxSize; - int minSize; - int packetSize; - int port; - int timeout; - - string dataSource; - - #endregion // Fields - - #region Constructors - - public SybaseConnectionPool (string dataSource, int port, int packetSize, int timeout, int minSize, int maxSize) - { - this.dataSource = dataSource; - this.port = port; - this.packetSize = packetSize; - this.timeout = timeout; - this.minSize = minSize; - this.maxSize = maxSize; - } - - #endregion // Constructors - - #region Properties - - public ITds this[int index] { - get { return (ITds) list[index]; } - } - - object IList.this[int index] { - get { return this[index]; } - set { throw new InvalidOperationException (); } - } - - public int Count { - get { return list.Count; } - } - - public bool IsFixedSize { - get { return false; } - } - - public bool IsReadOnly { - get { return true; } - } - - public bool IsSynchronized { - get { return false; } - } - - public int MaxSize { - get { return maxSize; } - } - - public int MinSize { - get { return minSize; } - } - - public object SyncRoot { - get { throw new InvalidOperationException (); } - } - - #endregion // Properties - - #region Methods - - public int Add (object o) - { - return list.Add ((ITds) o); - } - - public void Clear () - { - list.Clear (); - } - - public bool Contains (object o) - { - return list.Contains ((ITds) o); - } - - public void CopyTo (Array array, int index) - { - list.CopyTo (array, index); - } - - public IEnumerator GetEnumerator () - { - return list.GetEnumerator (); - } - - [MonoTODO] - public ITds AllocateConnection () - { - // make sure we have the minimum count (really only useful the first time) - lock (list) { - for (int i = Count; i < minSize; i += 1) - Add (new Tds50 (dataSource, port, packetSize, timeout)); - } - - // Try to obtain a lock - foreach (object o in list) - if (Monitor.TryEnter (o)) - return (ITds) o; - - if (Count < maxSize) { - ITds tds = new Tds50 (dataSource, port, packetSize, timeout); - Monitor.Enter (tds); - Add (tds); - return tds; - } - - // else we have to wait for one to be available - - return null; - } - - public void ReleaseConnection (ITds tds) - { - Monitor.Exit (tds); - } - - public int IndexOf (object o) - { - return list.IndexOf ((ITds) o); - } - - public void Insert (int index, object o) - { - list.Insert (index, (ITds) o); - } - - public void Remove (object o) - { - list.Remove ((ITds) o); - } - - public void RemoveAt (int index) - { - list.RemoveAt (index); - } - - #endregion // Methods - } -} |