powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
39 сообщений из 39, показаны все 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
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377959
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор, очень хочется тебе помочь. Самым простым был о бы попросить кого нибудь из программистов решить эту задачу. По описанию задача на день два работы , а может быть и на пару часов. Это самый простой и верный способ. Но есть и более длинный : для этого вам нужно установить к примеру netbeans 7.3 там есть куча примеров и один из них подойдет и вам.


Конечно идеально было бы все это переписать , как уже сказали выбрать простой сервер. Более 200 пользователей в день это не 200 пользователей в секунду :) для такой нагрузки хватит и одного коннекта , при условии что время запроса не более 10 мс. Думаю оно такое и есть. Если там нагрузка больше то моэно думать и о пуле соединений.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377977
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimir et al - спасибо за наводки и примеры! буду копать
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377980
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum1Самым простым был о бы попросить кого нибудь из программистов решить эту задачу. По описанию задача на день два работы , а может быть и на пару часов. Это самый простой и верный способ.Спасибо, но эту задачу я должен решить сам.
Про netbeans - тоже спасибо, я и забыл про неё совсем :-)
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38377998
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В оракле есть такая вещь как DRCP. Думаю в sql server есть тоже что-то похожее. Я бы изучил доки по sql серверу.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378000
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378046
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,

1. Пишем сервлет для Jetty, который отдаёт данные
2. Пул соединений делаем через DBCP
3. Profit

Результат будет такой: запускаешь Jetty и он весит себе как процесс неделями, пользователи отправляют http запрос и получают тот же файл что и раньше.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378074
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может в такой простой задачи и джава то вовсе не нужна ? Может достаточно простого скрипта ? На баше или даже под виндой на vb ?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378115
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum1Может в такой простой задачи и джава то вовсе не нужна ? Может достаточно простого скрипта ? На баше или даже под виндой на vb ?Да есть, конечно же альтернативы. Но в данном случае это мне больше всего нужно, чтобы на яве. Ибо осваивать язык гораздо приятнее с практической задачей, а не по талмуду или ководству.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378117
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GregTk,

спасибо, посмотрю тоже.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378179
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того, чтобы что-то оптимизировать нужно понять, что нужно оптимизировать. Это точно время соединения с базой 4-5 секунд? Как была получена эта цифра? Нужно измерить время:
1. запуска приложения
2. подключения к базе
3. исполнения запроса
4. получения результат
и только после этого что-то делать, предварительно подумав.
Возможно, в данном случае, следует просто что-то настроить в сети, например...
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378335
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GregTk1. Пишем сервлет для Jetty, который отдаёт данные
2. Пул соединений делаем через DBCP
3. Profit

Результат будет такой: запускаешь Jetty и он весит себе как процесс неделями, пользователи отправляют http запрос и получают тот же файл что и раньше.
Я вроде бы именно такой вариант и предлагал, еще с уточнением, что http запрос можно выполнить при помощи cURL.
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378355
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir... http запрос можно выполнить при помощи cURLВы ведь были против HTTP. В чем дело?
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378366
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanjust_vladimir... http запрос можно выполнить при помощи cURLВы ведь были против HTTP. В чем дело?
Я был против Вашей монструозной картинки с Java EvilEnterprise Edition со всеми сопутствующими "радостями".
...
Рейтинг: 0 / 0
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
    #38378632
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу предложить готовое решение с удаленным доступом к datasource на сервере приложений:
1) берем JBOSS server. Его придется где-то запустить;
2) настраиваем datasource, не забываем указать
Код: xml
1.
<use-java-context>false</use-java-context>


Вот пример для jboss 4.x, пул на 50 коннектов, заодно с проверкой соединения каждую минуту:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<datasources>
	<local-tx-datasource>
		<jndi-name>remoteDS</jndi-name>
		<connection-url>jdbc:oracle:thin:и_так_далее</connection-url>
		<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
		<user-name>*******</user-name>
		<password>*******</password>
		<max-pool-size>50</max-pool-size>
		<background-validation>true</background-validation>
		<background-validation-minutes>1</background-validation-minutes>
		<valid-connection-checker-class-name>
			org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker
		</valid-connection-checker-class-name>

		<use-java-context>false</use-java-context>
	</local-tx-datasource>
</datasources>


3) используем remoteDS с клиента, в вашем приложении надо будет только поменять метод получения datasource:
Код: 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.
	public static DataSource getRemoteDatasource() throws NamingException {
		final Properties jndiProperties = new Properties();

		jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
		jndiProperties.put(Context.PROVIDER_URL, "jnp://localhost:1099");  // заменяем на адрес где jboss
		jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");

		final Context ctx = new InitialContext(jndiProperties);
		DataSource ds = (DataSource)ctx.lookup("remoteDS");
		return ds;
	}

	public static void main(String[] args) throws NamingException, SQLException {
		DataSource ds = getRemoteDatasource();
		Connection con = ds.getConnection();
		try {
			// какая-то полезная работа
			Statement query = con.createStatement();
			ResultSet rs = query.executeQuery("select * from bla_bla_bla");
			while (rs.next()) {
				System.out.println(rs.getString(1));
			}
		} finally {
			con.close();
		}
	}


Перед запуском следует добавить в classpath по крайней мере вот эту библиотеку
Код: powershell
1.
%JBOSS_HOME/client/jbossall-client.jar


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


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