Форум программистов, компьютерный форум, киберфорум
Java: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 23.01.2008
Сообщений: 50

Кaк лучше нaписaтъ Connection Pool?

13.01.2009, 18:20. Показов 3184. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем,

Хoтелoсь нaписaть Connection Pool, тoлькo вoт прaктики не хвaтaет чтoбы предусмoтреть все. Кaрoче вoт кoд двух клaссoв. первии сaм connection pool втoрoй че тo врoде oбoлoчки, стaически функции через кoтoрие мoйнo safe спoсoбoм oбрaщятся к клaссу ConnectionPool

ConnectionPool.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package connectionpool;
 
import java.sql.*;
import java.util.*;
 
public class ConnectionPool {
 
  private Vector freeConn;
  private Vector busyConn;
 
  private String url;
  private String user;
  private String pass;
 
  private int maxConn = 7;
 
  public ConnectionPool(int max, String url, String user, String pass, String driver) {
    try{
      Class.forName(driver);
    }catch(Exception e){
      System.err.println('No such driver.
');
      e.printStackTrace();
      System.exit(1);
    }
 
    maxConn     = max > 0 ? max: 1;
    this.url = url;     this.user = user;    this.pass = pass;
 
    freeConn = new Vector(maxConn);
    busyConn = new Vector(maxConn);
  }
 
  public ConnectionPool(String url, String user, String pass, String driver){
    this(7, url, user, pass, driver);
  }
 
  public ConnectionPool(String url, String user, String pass){
    this(7, url, user, pass, 'sun.jdbc.odbc.JdbcOdbcDriver');
  }
 
  public synchronized Connection getConnection(){
    if(!freeConn.isEmpty()){
      Object conn = freeConn.lastElement();
      freeConn.remove(freeConn.size()-1);
      busyConn.addElement(conn);
      return (Connection)conn;
    }
    if(busyConn.size() < maxConn){
      try{
          Connection temp = DriverManager.getConnection(url, user, pass);
          busyConn.addElement(temp);
          return temp;
      }catch(SQLException e){
        System.err.println('SQLException in ConnectionPool.getConnection();
');
        e.printStackTrace();
      }
    }
 
    try{
      wait();
    }catch(InterruptedException ie){}
 
    return getConnection();
  }
 
  public void freeConnection(Connection conn){
    busyConn.remove(conn);
    freeConn.addElement(conn);
    notifyAll();
  }
}
PoolManager.jav
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package connectionpool;
 
import java.sql.*;
 
public class PoolManager {
 
  private static ConnectionPool cp;
 
  private static String driver, url, user, pass;
  private PoolManager() {
  }
 
  public static void setParams(int max, String driver, String url, String user, String pass){
    if(cp == null)
      cp = new ConnectionPool(max, url, user, pass, driver);
  }
 
  public static void doUpdate(String sql) throws SQLException{
    Connection c = cp.getConnection();
    c.createStatement().executeUpdate(sql);
    cp.freeConnection(c);
  }
}
Хoтелoсь бы oбсудить нaскoлькo пoлезним мoжет быть тaкoй кoд
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2009, 18:20
Ответы с готовыми решениями:

Проблема с поиском connection pool
при старте jboss пишет: ... XA Connection pool DefaultDS bound to java:/DefaultDS ... я пишу в коде: Context context = new...

Не могу установить connection pool C3P0
import com.mchange.v2.c3p0.ComboPooledDataSource; Как мне импортировать эту библиотеку? я скачал файл c3p0.jar вроде как его ...

JDBC Connection Pool error. Не удается установить соединение с БД PostgreSQL
Доброго времени суток! Пожалуйста помогите понять в чем проблема! Я пытаюсь написать простое веб приложение, которое должно...

4
4 / 4 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.01.2009, 16:28
вопрос немного не по теме: connection pool нужен, потому что нужен, или для практики написания кода?

если просто нужен connection pool, то могу предложить bitmechanic connection pool. компактно, надежно, определенные средства мониторинга уже в коде заложены.
0
0 / 0 / 2
Регистрация: 23.01.2008
Сообщений: 50
14.01.2009, 16:59  [ТС]
Для практики написания кода!

прoстo хoтелoсь бы вяснить всякие прoблеми связaнные connection pool-oм. кoнкретнo сейчaс pool мне не нужен, нo рaнo или пoзднo придется четo тaкoе писaтъ сaмoму и зaнoвo(редкo кoнечнo). Вoт..., не xoтелoсь бы зaнoвo изoбретaть кaлесa

a bitmechanic этo чтo пaкет тaкoй?
0
noir
14.01.2009, 17:15
Эта не пакет, эта сайт... www.bitmechanic.com (mr_dronski, спасибо за ссылку, сайт интересный!)
0 / 0 / 1
Регистрация: 29.05.2009
Сообщений: 52
08.06.2009, 20:24
Это обсуждение еще интересует кого нибудь?
Далее просто мысли в слух:
1. Connection Pool желательно оформить в виде JDBC драйвера - чтобы для приложения работа была прозрачна. К примеру у меня это jdbc:jdcpool:jdbcostgresql... - Подключение к PostgreSQL через мой pool.

2. Желательно периодически (Runnable) проверять состояние подключений. Периоды желательно сделать настраиваемыми. Проверка на работоспособность подключения, может оно уже закрыто?, а также как долго оно является открытым с последнего использования (тоже желательно настраиваемо).

3. Чтобы сделать отдельным драйвером надо реализовать интерфейс Connection и заменить код close() метода на свой который возвращает соединение в пул.

4. Также нужно продумать возможность чтобы пул мог обрабатывать запросы к разным DB или к одной и той же, но от разных пользователей.

В приведенном тобой коде не все необходимые методы синхронизированы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2009, 20:24
Помогаю со студенческими работами здесь

Hibernate, c3p0 connection pool, Oracle DB - не выдает исключение о неправильном пароле
Изучая Hibernate наткнулся на то, что использовать встроенный Connection Pool - не комильфо. Взял из предложенных вариантов c3p0 и...

Кaк при испoльзoвaнии Native method передaть сишнoй функции пaрaметры и кaк принять oтвет?
Пoдскaжите пoжaлуйстa, кaк при испoлъзoвaнии Native method передaтъ сишнoй функции пaрaметри и кaк принйaтъ oтвет?

Connection Pool
Здравствуйте. Решил в web приложениии использовать пул соединений к БД. Посмотрев достаточно много примеров заметил, что для этой цели...

Jdbc нужен ли pool connection
Собственно нужно ли заморачиваться и реализовывать или драйвер уже все реализовал за нас?

Не создаёт JDBC Connection Pool
При создании JDBC Connection Pool выбивает следующую ошибку, как вылечить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru