public void ReleaseConnection(OciGlue connection) { lock (list) { list.Add(connection); Monitor.Pulse(list); } }
public virtual OciGlue CreateConnection(OracleConnectionInfo info) { OciGlue oci; oci = new OciGlue(); oci.CreateConnection(info); return(oci); }
public OciGlue GetConnection() { OciGlue connection = null; lock (list) { if (!initialized) { for (int n = 0; n < PoolMinSize; n++) { list.Add(CreateConnection()); } initialized = true; } do { if (list.Count > 0) { // There are available connections in the pool connection = (OciGlue)list[list.Count - 1]; list.RemoveAt(list.Count - 1); if (!connection.Connected) { connection = null; continue; } } if (connection == null && activeConnections < PoolMaxSize) { connection = CreateConnection(); } // Pas de connection disponible on attends que quelqu'un en libere une if (connection == null) { if (Monitor.Wait(list, 6000) == false) { throw new InvalidOperationException("Timeout expired. The timeout expired waiting for a connection in the pool probably due to max connections reached."); } } } while (connection == null); } return(connection); }
protected override void Dispose(bool disposing) { if (!disposed) { if (State == ConnectionState.Open) { Close(); } dataReader = null; transaction = null; oci = null; pool = null; conInfo.Username = string.Empty; conInfo.Database = string.Empty; conInfo.Password = string.Empty; connectionString = null; parsedConnectionString = null; base.Dispose(disposing); disposed = true; } }
public override void Open() { if (State == ConnectionState.Open) { return; } PersistSecurityInfo(); if (!pooling || conInfo.SetNewPassword == true) { oci = new OciGlue(); oci.CreateConnection(conInfo); } else { pool = pools.GetConnectionPool(conInfo, minPoolSize, maxPoolSize); oci = pool.GetConnection(); } state = ConnectionState.Open; CreateStateChange(ConnectionState.Closed, ConnectionState.Open); }