powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Пример использования ConnectionPool'а, поставляемого с JSQLConnect
25 сообщений из 29, страница 1 из 2
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029269
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Драйвер JSQLConnect поставляется с уже готовым пулом соединений. И почему бы его не использовать? :)
К тому же класс, который будет управлять этим пулом очень прост:

Код: plaintext
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.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
 package  net.agrasoff.db;

 import  com.jnetdirect.jsql.*;

 import  java.util.*;
 import  java.sql.*;

 public   class  JSQLDatabaseManager {
  // грубо говоря, наш мэнеджер пулов является Singleton'ом
  // но чтобы обеспечить управление несколькими пулами 
  // например, необходимо из одного приложения иметь
  // коннекты к разным БД, мы храним экземпляры JSQLDatabaseManager
  // в хэш-таблице managers, где ключем является уникальное название
  // нашего менеджера, а значеним - сам менеджер
   private   static  Hashtable managers =  new  Hashtable();

  /* собственно - сам пул соединений */
   private  JSQLPoolingDataSource pool;
   private   boolean  isInit;

   private  JSQLDatabaseManager() {
    isInit = false;
  }

   public   static  JSQLDatabaseManager getInstance(String name) {
    JSQLDatabaseManager manager = (JSQLDatabaseManager) managers.get(name);
     if  (manager ==  null ) {
      manager =  new  JSQLDatabaseManager();
      managers.put(name, manager);
    }
     return  manager;
  }

   public  Connection getConnection()  throws  SQLException {
     if  (pool ==  null  || !isInit) {
       throw   new  SQLException("Pool was not initialized");
    }

     return  pool.getConnection();
  }

   public   static  Connection getConnection(String managerName)  throws  SQLException {
    JSQLDatabaseManager manager = getInstance(managerName);
     return  manager.getConnection();
  }

  /* инициализация пула */
   public   void  init(Properties properties)  throws  SQLException {
    String url = properties.getProperty(POOL_URL);
    String database = properties.getProperty(POOL_DATABASE);
    String user = properties.getProperty(POOL_USER);
    String password = properties.getProperty(POOL_PASSWORD);
    String codepage = properties.getProperty(POOL_CODEPAGE);
     if  (Check.empty(codepage)) {
      codepage = "Cp1251";
    }

     int  initialPoolSize =  0 ;
     try  {
      initialPoolSize = Integer.parseInt(properties.getProperty(POOL_INITIAL_SIZE));
    }  catch  (Exception e) {

    }

     int  minPoolSize =  5 ;
     try  {
      minPoolSize = Integer.parseInt(properties.getProperty(POOL_MIN_SIZE));
    }  catch  (Exception e) {

    }

     int  maxPoolSize =  25 ;
     try  {
      maxPoolSize = Integer.parseInt(properties.getProperty(POOL_MAX_SIZE));
    }  catch  (Exception e) {

    }

     if  (pool !=  null ) {
      pool.closeAllConnections();
    }

    pool =  new  JSQLPoolingDataSource();
    pool.setApplicationName(POOL_APPLICATION);
    pool.setCodepage(codepage);
    pool.setDatabaseName(database);
    pool.setInitialPoolSize(initialPoolSize);
    pool.setMaxPoolSize(maxPoolSize);
    pool.setMinPoolSize(minPoolSize);
    pool.setPassword(password);
    pool.setUser(user);
    pool.setUrl(url);

    isInit = true;
  }

   public   void  close()  throws  SQLException {
     if  (pool !=  null ) {
      isInit = false;
      pool.closeAllConnections();
      pool =  null ;
    }
  }

   public   static   void  closePools()  throws  Exception {
    Enumeration e = managers.keys();
     while  (e.hasMoreElements()) {
      JSQLDatabaseManager manager = (JSQLDatabaseManager) e.nextElement();
      manager.close();
    }
    managers.clear();
  }

   public   static   final  String POOL_APPLICATION = "My Extra Web Application, v.6.66";

   public   static   final  String POOL_URL = "pool-url";
   public   static   final  String POOL_DATABASE = "pool-database";
   public   static   final  String POOL_USER = "pool-user";
   public   static   final  String POOL_PASSWORD = "pool-password";
   public   static   final  String POOL_CODEPAGE = "pool-codepage";
   public   static   final  String POOL_INITIAL_SIZE = "pool-initial-size";
   public   static   final  String POOL_MIN_SIZE = "pool-min-size";
   public   static   final  String POOL_MAX_SIZE = "pool-max-size";
}

вот и все. теперь использование. первое, что надо сделать - инициализировать
наш определенный пул. например, в неком стартап-сервлете:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
 public  SetupServlet  extends  HttpServlet {
   public   void  init() {
    Properties connectionPoolProps =  new  Properties();
    connectionPoolProps.setProperty(JSQLDatabaseManager.POOL_URL, "jdbc:....");
    ...
    // и так далее - остальные свойства
    // я, например, свойства пулов храню в одном xml-файле
    // и вызываю статический метод JSQLDatabaseManager.initPools(String xmlPath)
    // (данный метод не показан в приведенном выше коде)
    ...
    JSQLDatabaseManager.getInstance("base content pool").init(connectionPoolProps);

    // еще один пул:
    Properties otherConnectionPoolProps =  new  Properties();
    otherConnectionPoolProps.setProperty(JSQLDatabaseManager.POOL_URL, "jdbc:....");
    ...
    JSQLDatabaseManager.getInstance("stat pool").init(otherConnectionPoolProps);
  }
}

теперь мы имеем два готовых к использованию пула. и можем их использовать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
...
 public  SomeServlet  extends  HttpServlet {
  ...
   public   void  service(...) ... {
     try  {
      Connection con = JSQLDatabaseManager.getInstance("stat pool").getConnection();
      // можно получить connection более кратко:
      // Connection con = JSQLDatabaseManager.getConnection("stat pool");
       try  {
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("select ...");
        ...
        rs.close();
        st.close();
      }  finally  {
        con.close();
      }
    }  catch  (SQLException e) {
      log("...", e);
       throw   new  ServletException(e.getMessage());
    }
  }
}

вот и все :)
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029515
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В фак?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029900
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если БД вдруг возьмет и поменяется ?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029939
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenА если БД вдруг возьмет и поменяется ?
если ты имеешь в виду, что поменяется имя базы PERSONS на
имя PERSONS2_0, то ничего страшного. всегда можно
изменить в кофиге.

если же ты имеешь в виду, что поменяется сервер БД (MS SQL на,
например, Oracle), то тоже ничего страшного. насколько я знаю,
оракл тоже с пулом реализованным идет. и привел пример. и уточнил,
что используется база MS SQL (это понятно из того, что драйвер
используется JSQLConnect). а то что это пример - явно указано
в теме поста.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029943
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenА если БД вдруг возьмет и поменяется ?сама собой?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029945
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ JE wessenА если БД вдруг возьмет и поменяется ?сама собой?мутирует слегонца?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33029977
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду, что твой способ не универсальный, у нас сейчас приложение пишется и заранее известно, что оно у разных клиентов будет крутится под разными БД. Вот я и дое....я.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030009
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в таком случае примерно таким же образом можно использовать http://jakarta.apache.org/commons/dbcp/

либо сразу использовать возможности томката: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-datasource-examples-howto.html
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030034
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ JEв таком случае примерно таким же образом можно использовать http://jakarta.apache.org/commons/dbcp/

либо сразу использовать возможности томката: http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-datasource-examples-howto.html
ага, все так и сделано.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030077
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenЯ имел ввиду, что твой способ не универсальный
Я сразу об этом сказал :)
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030254
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030374
Зюзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
Сказал бы я тебе, но ладно... на первый раз прощаю.

Во первых, символ Java - написано однаждый, работает везде. Это отражается на всех ее технологиях, будь то JAXP, JDBC, Java Security и т.д., все это всего лишь интерфейсы и под них пишутся, парсеры, драйверы или провайдеры от разных производителей. Если рассуждать так как ты, то зачем тогда на Java писать, возми какой нить аля Делфи и клепай на нем.

Во вторых, писать под конкретную БД все таки можно, но не всегда, т.к. конторы которые пишут софт бывают двух видов:
1. пишут софт и сами его используют
2. пишут и продают.

По поводу 1-го пункта, вот устроиля ты в банк, там у них лицензия на Оракл допустим куплена и известно, что ближайшие 20-ть лет ничего не меняется, тут все понятно, пиши под Оракл.
По поводу 2-го пункта, вот наша контора пишет сейчас проект, если все хорошо пойдет, то клиентов будет сотни, у каждого из них свои, годами разрабатываемые сисемы, там полный огород, начиная от паскаля и заканчивая Java/#C, в БД такой же огород. И наше приложение просто обязано рабоать со всей этой пиздобратией и заводится с пол пинка - скопировал дистр, запустил ant и наслождаешься :)
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030403
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зюзя Timm wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
Сказал бы я тебе, но ладно... на первый раз прощаю.

спасибо блин большое
большое спасибо блин (ц)
ЗюзяЕсли рассуждать так как ты, то зачем тогда на Java писать, возми какой нить аля Делфи и клепай на нем.
Это не я. Это Кайт. Меня он убедил :)
Зюзятам полный огород, начиная от паскаля и заканчивая Java/#C, в БД такой же огород. И наше приложение просто обязано рабоать со всей этой пиздобратией и заводится с пол пинка - скопировал дистр, запустил ant и наслождаешься :)
С "огородами" снижается manageаbility, scalability и пр. "abilities"
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030458
Зюзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm Зюзя Timm wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
Сказал бы я тебе, но ладно... на первый раз прощаю.

спасибо блин большое
большое спасибо блин (ц)
ЗюзяЕсли рассуждать так как ты, то зачем тогда на Java писать, возми какой нить аля Делфи и клепай на нем.
Это не я. Это Кайт. Меня он убедил :)
Зюзятам полный огород, начиная от паскаля и заканчивая Java/#C, в БД такой же огород. И наше приложение просто обязано рабоать со всей этой пиздобратией и заводится с пол пинка - скопировал дистр, запустил ant и наслождаешься :)
С "огородами" снижается manageаbility, scalability и пр. "abilities"
Как то все не аргументированно, ну да ладно. Кто такой Кайт не знаю, но все равно, увидешь его, передай привет от меня и поцелуй в ушко. И заодно спроси, как писать приложения для "огорода", так как потребность в них очень большая и Java для этого пока что лучший вариант.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030463
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зюзя Timm Зюзя Timm wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
Сказал бы я тебе, но ладно... на первый раз прощаю.

спасибо блин большое
большое спасибо блин (ц)
ЗюзяЕсли рассуждать так как ты, то зачем тогда на Java писать, возми какой нить аля Делфи и клепай на нем.
Это не я. Это Кайт. Меня он убедил :)
Зюзятам полный огород, начиная от паскаля и заканчивая Java/#C, в БД такой же огород. И наше приложение просто обязано рабоать со всей этой пиздобратией и заводится с пол пинка - скопировал дистр, запустил ant и наслождаешься :)
С "огородами" снижается manageаbility, scalability и пр. "abilities"
Как то все не аргументированно, ну да ладно. Кто такой Кайт не знаю, но все равно, увидешь его, передай привет от меня и поцелуй в ушко. И заодно спроси, как писать приложения для "огорода", так как потребность в них очень большая и Java для этого пока что лучший вариант.

мало ты писАл, мужык.
твои слова - шаблоны книг.
и мир не так уж идеален
как ты его себе представил.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030568
Зюзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А.Грасоff™ JE Зюзя Timm Зюзя Timm wessenоно у разных клиентов будет крутится под разными БД.
аццтой. писать надо под конкретную бд. и использовать ее возможности на полную...
Сказал бы я тебе, но ладно... на первый раз прощаю.

спасибо блин большое
большое спасибо блин (ц)
ЗюзяЕсли рассуждать так как ты, то зачем тогда на Java писать, возми какой нить аля Делфи и клепай на нем.
Это не я. Это Кайт. Меня он убедил :)
Зюзятам полный огород, начиная от паскаля и заканчивая Java/#C, в БД такой же огород. И наше приложение просто обязано рабоать со всей этой пиздобратией и заводится с пол пинка - скопировал дистр, запустил ant и наслождаешься :)
С "огородами" снижается manageаbility, scalability и пр. "abilities"
Как то все не аргументированно, ну да ладно. Кто такой Кайт не знаю, но все равно, увидешь его, передай привет от меня и поцелуй в ушко. И заодно спроси, как писать приложения для "огорода", так как потребность в них очень большая и Java для этого пока что лучший вариант.

мало ты писАл, мужык.
твои слова - шаблоны книг.
и мир не так уж идеален
как ты его себе представил.
С твоими словами частично согласен, с тем, что писать нужно под конкретную БД не согласен.

PS стижки еще с удовольствием почитаю
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030633
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зюзяс тем, что писать нужно под конкретную БД не согласен
то есть проектировать БД надо только лишь, используя
стандартный SQL? и его синтаксис? а как же ХП, триггеры?

--
а?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030702
Зюзя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А.Грасоff™ JE Зюзяс тем, что писать нужно под конкретную БД не согласен
то есть проектировать БД надо только лишь, используя
стандартный SQL? и его синтаксис? а как же ХП, триггеры?

--
а?

Может мы не так друг друга поняли?

Я имел в виду именно доступ к БД. Вот например для Оракла есть много API для работы с ним, эти API удобные и мощные, но есть одно НО, они работают только с Оракл. Так же как и твой пример, работает только с MS SQL Server.

SQL, хп и тригерры я не имел ввиду, но скажу пару слов. Все SQL запросы хранятся в файлах-ресурсах, для каждой БД свой ресурс. По поводу хп, приложению нужно знать их имена и возвращаемые значения, это все тоже в ресурсах. Триггеры, это уже не забота Java программиста, пускай админы БД воротят все что хотят.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030705
LiQuid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen
Я имел ввиду, что твой способ не универсальный, у нас сейчас приложение пишется и заранее известно, что оно у разных клиентов будет крутится под разными БД. Вот я и дое....я.

Слушай, хорош говорить, че пристал Грасову, он молодец чувак, хоть на этом скажи спасибо что пример привел, чтобы начинающие учились.
А универсальный пул писать можно но все равно ни один пул на свете не универсальный. Можно сказать более менее универсальные пули пишутся на ява. Молодец Грасов, подерживаю. Такие люди нам нужны в стране. Хотя я сам из КЗ Ну все равно молодец. Нужны такие люди для России
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030716
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗюзяВсе SQL запросы хранятся в файлах-ресурсах, для каждой БД свой ресурс.
таким образом, можно назвать ресурсом пул (мой) и сделать несколько
вариантов под каждую БД :)
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030785
А.Грасоff™ JE ЗюзяВсе SQL запросы хранятся в файлах-ресурсах, для каждой БД свой ресурс.
таким образом, можно назвать ресурсом пул (мой) и сделать несколько
вариантов под каждую БД :)
Конечно можно, но у нас щас реализовано так: есть движок на Java (ну почти универсальный :)) и он оч. активно использует ресурсы и их пишут совершенно различные люди, в основном это SQL программисты или админы БД заказчика. Заставлять писать их на Java это уж слишком, а писать конкретно для каждого заказчика (а их много и все они разные:)) нам очень напряжно.
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030794
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже уставший Зюзянапряжнорасслабься :)
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030830
А.Грасоff™ JE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
доброе утро, федд!
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33030938
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiQuid wessen
Я имел ввиду, что твой способ не универсальный, у нас сейчас приложение пишется и заранее известно, что оно у разных клиентов будет крутится под разными БД. Вот я и дое....я.

Слушай, хорош говорить, че пристал Грасову, он молодец чувак, хоть на этом скажи спасибо что пример привел, чтобы начинающие учились.
А универсальный пул писать можно но все равно ни один пул на свете не универсальный. Можно сказать более менее универсальные пули пишутся на ява. Молодец Грасов, подерживаю. Такие люди нам нужны в стране. Хотя я сам из КЗ Ну все равно молодец. Нужны такие люди для России
А ты секретарь Граспыха, или его Ангел Хранитель?
...
Рейтинг: 0 / 0
Пример использования ConnectionPool'а, поставляемого с JSQLConnect
    #33031164
грасаф-паклонег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen LiQuid wessen
Я имел ввиду, что твой способ не универсальный, у нас сейчас приложение пишется и заранее известно, что оно у разных клиентов будет крутится под разными БД. Вот я и дое....я.

Слушай, хорош говорить, че пристал Грасову, он молодец чувак, хоть на этом скажи спасибо что пример привел, чтобы начинающие учились.
А универсальный пул писать можно но все равно ни один пул на свете не универсальный. Можно сказать более менее универсальные пули пишутся на ява. Молодец Грасов, подерживаю. Такие люди нам нужны в стране. Хотя я сам из КЗ Ну все равно молодец. Нужны такие люди для России
А ты секретарь Граспыха, или его Ангел Хранитель?ты чо злой такой?
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Пример использования ConnectionPool'а, поставляемого с JSQLConnect
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]