powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
25 сообщений из 39, страница 1 из 2
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377730
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано:

1) база ms sql, администрируется не мной, видна там только одна табличка;
2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE;
3) java-класс, расположенный на этом сетевом диске, который десятки раз в день будет загружаться юзерами, чтобы залезть в эту табличку и получить/обновить некоторую инфу (по первичному ключу, одну запись).

Время коннекта к базе очень долгое, примерно 4-5 сек. Начинаю думать в сторону пула коннектов, который должен быть загруженным на каком-то известном хосте и к которому должны на самом деле обращаться юзера.

Но... не знаю, как вообще это сделать и с чего начинать. И какой класс (?) тогда должны загружать юзера, если он вообще на другой машине загружен (бред написал, но не могу сформулировать по-другому - извиняйте :)).
Посоветуйте, плз, туториал какой-нибудь, где примерно эта же задача. Или просто ссылку на прототип такого класса.

Заранее спс.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377762
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,
авторВремя коннекта к базе очень долгое, примерно 4-5 сек.
если начинать от простого, то утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера.
Так?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377766
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisНачинаю думать в сторону пула коннектов, который должен быть загруженным на каком-то известном хосте и к которому должны на самом деле обращаться юзера. Правильно! Вам необходим сервер приложений (прокси).
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377771
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,

...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377782
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приделать к java приложению веб-морду на servlet, jsp, которое поставить на tomcat или jetty, при реализации приложения прикрутите какой нибудь c3p0.
PS: если программу называете java-классом, то подозреваю, там действительно что то очень маленькое, соответственно и приложение переделать можно за вечер на коленке.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377789
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,
Вы бы еще картинку с ESB нарисовали, у человека java-класс и сетевая шара, а вы ему цепочки из http/ejb/jdbc рисуете...
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377793
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера.Так?Нет, он запускает другую прогу, которая к яве вообще никаким боком, и сидит в ней весь день :-)
Но из-под этой проги он способен вызвать $JRE_HOME/bin/java -cp .;sqljdbc.jar SomeFile и получить оттуда (или направить туда) некоторые данные.
Ну так вот: ему приходится это делать весьма часто, и время коннекта к СУБД сильно раздражает. И надо бы ускорить его.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377803
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimirПриделать к java приложению веб-морду на servlet, jsp, которое поставить на tomcat или jetty, при реализации приложения прикрутите какой нибудь c3p0.Мну надо вообще без морды, чтобы юзеру даже не пришлось переключаться в веб и что-то там вводить. Он сейчас кнопку тыркает в "своей родной" проге и получает волшебным образом данные из "чужого и враждебного" ms sql.
just_vladimirPS: если программу называете java-классом, то подозреваю, там действительно что то очень маленькое, соответственно и приложение переделать можно за вечер на коленке.Да, там всего-то подрихтованный демофайлик из поставки sqljdbc.jar от ms sql (attach)
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377835
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,
а как "родная" программка осуществляет взаимодействие с этим java-классом?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377840
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimirа как "родная" программка осуществляет взаимодействие с этим java-классом?да в тупую:
1) вызывает java <умный_java_класс> параметр_1 параметр_2 1>%temp_dir%\random.tmp 2>&1
2) открывает %temp_dir%\random.tmp и смотрит, "ну чё там ?!" :-)
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377846
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirВы бы еще картинку с ESB нарисовалиНет уж, рисуйте сами.just_vladimirу человека java-класс и сетевая шараВ этом-то и вся проблема + ко всему этому - пункт №1.
just_vladimirа вы ему цепочки из http/ejb/jdbc рисуетеВы предлагаете иной подход к решению проблемы ТС?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377849
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

а как будет происходить обращение к этому классу с пулом коннектов, который загружен "где-то посередине", из-под моей программулины, которая на клиентских машинах ?
То есть, можно ли сделать как-то аналогично нынешнему изврату: вызывать jre/bin/java прямо "из нутра", чтобы юзер никуда вообще не переключался и что бы этот вызов уже шёл на сервер приложений ?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377851
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ozzmosis ,
Проблема в том, что у вас сейчас просто негде держать пул соединений. Образно говоря, вам нужна какая-то программка с циклом
while(true) {
...
}
которая постоянно готова обслужить клиентов. Это сервер, тут у вас будет пул соединений. А тот класс, что вы запускаете - это клиент.
В обычной жизни "сервером" в нашей терминологии явялется сервер приложений (JBoss, Tomcat, Glassfish, etc.). И в этом сервере развернуто приложение, которое готово обслуживать запросы клиентов, например, через TCP.
Поэтому обычно работа разрабтчика с пулами коннекшов сводится к конфигурированию этих пулов через мастера конкретных серверов приложений, или через XML. Руками никто с этими пулами не возится.

Если у вас цель именно потрогать это все руками, то можете заморочиться с тем, чтобы написать:
1) Сервер, который:
- Создает пул соединений к СУБД (тот же c0p3).
- Слушает какой-то сокет, вычитывает из него данные, потом десериализует их в запрос, потом обрабатывает этот запрос путем обращения к СУБД, потом сериализует результат, и отправляет его через этот же сокет клиенту.
2) Клиент, который:
- Подключается к сокету сервера
- Отправляет туда запрос
- Получает ответ, десериализует его, и отдает пользователю.

Это хорошее упраженение по JDBC и сокетам.

Потом можете дальше это понаворачивать, например:
1) Сделать многопоточный сервер, который отдает запросы отдельным потокам
2) Попробовать на вкус NIO вместо обычных блокирующих сокетов
3) Попробовать забацать свой пул конекшнов простенький, который будет корректно работать в многопоточной среде.

Ну и т.д., насколько фантазии хватит.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377858
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ozzmosis2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE;
А это сейчас работает вы проверяли? (у меня jar'ки не запускаются из расшареных папок..)

Пул коннектов полезная (наверное) вещь в 3х звенной архитектуре..
Единственный сценарий когда могу себе представить работу с "пулом коннектов" на десктопе - сериализовать один Connection на JEE сервере и десериализовать на десктопе (поработать и вернуть обратно). Но у меня есть большие сомнения в целесообразности такого подхода. Мне кажется быстрее (и проще) создать новое подключение к базе данных..
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377868
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisPetro123утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера.Так?Нет, он запускает другую прогу, которая к яве вообще никаким боком, и сидит в ней весь день :-)
Но из-под этой проги он способен вызвать $JRE_HOME/bin/java -cp .;sqljdbc.jar SomeFile и получить оттуда (или направить туда) некоторые данные.
Ну так вот: ему приходится это делать весьма часто, и время коннекта к СУБД сильно раздражает. И надо бы ускорить его.
я не пойму). Никто не писал обычный десктоп на Jav'е который висит в памяти целый день? И держит коннект-переменную?
Аффтар! Давай сюда код своей программы ))
Код: java
1.
Connection connGlobal = getConnection();
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377869
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEVcoachЕсли у вас цель именно потрогать это все руками, то можете заморочиться с тем, чтобы написать:
1) Сервер, который:
- Создает пул соединений к СУБД (тот же c0p3).
- Слушает какой-то сокет, вычитывает из него данные, потом десериализует их в запрос, потом обрабатывает этот запрос путем обращения к СУБД, потом сериализует результат, и отправляет его через этот же сокет клиенту.
2) Клиент, который:
- Подключается к сокету сервера
- Отправляет туда запрос
- Получает ответ, десериализует его, и отдает пользователю.
Метод понятен, спасибо. И для обучения, наверное, тоже самое оно. Но не будет ли сиё очередным велосипедом ? И на чём это реализуется с минимальным участием "трогания руками" ?

DEVcoachЭто хорошее упраженение по JDBC и сокетам.

Потом можете дальше это понаворачивать, например:
1) Сделать многопоточный сервер, который отдает запросы отдельным потокам
2) Попробовать на вкус NIO вместо обычных блокирующих сокетов
3) Попробовать забацать свой пул конекшнов простенький, который будет корректно работать в многопоточной среде.

Ну и т.д., насколько фантазии хватит.Фантазии-то хватит, но...
Какие-то прототипы кода нужны, хотя бы минимальные.

Но в любом случае - спасибо за объяснение.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377871
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkozzmosis2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE;А это сейчас работает вы проверяли? (у меня jar'ки не запускаются из расшареных папок..)Дык! работает, совершенно спокойненько так.
Только единственное "но": сетевой ресурс, зашаренный на диск, - от Novell Netware :-)
Так что может это так влияет, что jar'ы (не-)могут запускаться
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377873
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Никто не писал обычный десктоп на Jav'е который висит в памяти целый день? И держит коннект-переменную?Не, погодь! :-)
Как раз надо сделать так, чтобы никакого десктопа в довесок к основной программулине у юзеров НЕ было видно. Юзер тыркает кнопку и получает результат БЕЗ всякого переключения в другое окно. Когда он тыркает по кнопке, то всё происходит тихо, он просто ждет секунд 5 - и вдруг: "опа!" - готовый ответ из ms sql видит.

Petro123Аффтар! Давай сюда код своей программы ))
Код: java
1.
Connection connGlobal = getConnection();

В смысле ? код класса, достающего из ms sql нужную мне инфу ?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377876
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisВ смысле ? код класса, достающего из ms sql нужную мне инфу ?
угу. Если ты не тролль)
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377880
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

дык вот оно, чё тут:
Код: 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.
// base on sample: connectURL.java      
import java.sql.*;
public class GetCardNfo {
	
	public static void main(String[] args) {
		
		// Create a variable for the connection string.
		String connectionUrl = "jdbc:sqlserver://blablabla:1433;" +
			"databaseName=discount;user=sa;password=sa;";

		// Declare the JDBC objects.
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;

		System.setErr(System.out);
		
        	try {
        		// Establish the connection.
        		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            		con = DriverManager.getConnection(connectionUrl);
            
            		// Create and execute an SQL statement that returns some data.
            		String SQL = "select c.* from (select 1 k) t outer apply(select top 1 card_holder,card_number,card_balance,discount_type_01,discount_type_02,is_blocked from card c where c.card_number='"+args[0]+"')c";

            		stmt = con.createStatement();
            		rs = stmt.executeQuery(SQL);
            
            		// Iterate through the data in the result set and display it.
            		while (rs.next()) {
            		  System.out.println( 
            		     rs.getString("card_holder") + "\t" 
            		     + rs.getString("card_number")+"\t"
            		     + rs.getDouble("card_balance")+"\t"
            		     + rs.getDouble("discount_type_01")+"\t"
            		     + rs.getDouble("discount_type_02")+"\t"
            		     + rs.getInt("is_blocked") // numeric
            		  );
            		}
        	}
        
		// Handle any errors that may have occurred.
		catch (Exception e) {
			e.printStackTrace();
		}

		finally {
			if (rs != null) try { rs.close(); } catch(Exception e) {}
	    		if (stmt != null) try { stmt.close(); } catch(Exception e) {}
	    		if (con != null) try { con.close(); } catch(Exception e) {}
		}
	}
}

Ну, и из "главной проги" идёт соотв-щий вызов java, я его показывал выше.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377884
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы переделал так:
1. Сервлет контейнер (tomcat, jetty), в нем сервлет получающий post запросы с параметр_1, параметр_2 и отдающий application/octet-stream.
2. cUrl + bat/sh скрипт, который дергаете из вашей программы.


Petro123Аффтар! Давай сюда код своей программы ))
+1
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377895
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,
консольное приложение отличается от оконного десктопа тем, что отработало и закрылось (закрыло коннект и обнулило переменные).
- либо запускай консоль весь день в цикле, либо делай окно (невидимое) и держи коннект открытым (до вечера).
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377898
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123либо делай окно (невидимое) и держи коннект открытым (до вечера).Думал в эту сторону, но испугало кол-во юзеров (>200) и от каждого коннект будет торчать в ms sql. Многовато вроде...
Как вариант, конечно же, подойдёт, но только временный, "не научный" :-)
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377903
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,
>200 - это научно)))
Зато увидишь там имя компа у каждого. Кто работает, а кто нет.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377922
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,
мой вариант с сервлет + cURL:
Код: 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.
public class MyServlet extends HttpServlet {
  
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  	try {
  		String param = request.getParameter("param");

	  	Context initialContext = new InitialContext(); 
		DataSource ds = (DataSource)initialContext.lookup("java:/comp/env/jdbc/sample");	
		Connection conn = ds.getConnection(); 	
		String SQL = "select c.* " + 
					"from (select 1 k) t " + 
					"outer apply(select top 1 card_holder,card_number,card_balance,discount_type_01,discount_type_02,is_blocked " + 
									"from card c where c.card_number=?)c";

		PreparedStatement stmt = con.prepareStatement(SQL);
		stmt.setString(1, param);
		ResultSet rs = stmt.executeQuery();

		response.setContentType("application/force-download");
		response.setHeader("Content-Disposition","attachment; filename=\"result.txt\"");

		while (rs.next()) {
		  response.response.getWriter().println(
		     rs.getString("card_holder") + "\t" 
		     + rs.getString("card_number")+"\t"
		     + rs.getDouble("card_balance")+"\t"
		     + rs.getDouble("discount_type_01")+"\t"
		     + rs.getDouble("discount_type_02")+"\t"
		     + rs.getInt("is_blocked")
		  );
		}
  	} catch (Exception e) {
  		throw new ServletException(e);
  	}

  }
}



И потом из своей программы вызываете curl -o %your_dir%\random.tmp http://your-web-server/MyServlet?param=paramVal

PS: писал в блокноте и по памяти, будет чудом, если сходу заработает
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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