public void ReleaseConnection(OciGlue connection)
 {
     lock (list) {
         list.Add(connection);
         Monitor.Pulse(list);
     }
 }
Esempio n. 2
0
        public virtual OciGlue CreateConnection(OracleConnectionInfo info)
        {
            OciGlue oci;

            oci = new OciGlue();
            oci.CreateConnection(info);
            return(oci);
        }
Esempio n. 3
0
        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);
        }