|
|
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Дано: 1) база ms sql, администрируется не мной, видна там только одна табличка; 2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE; 3) java-класс, расположенный на этом сетевом диске, который десятки раз в день будет загружаться юзерами, чтобы залезть в эту табличку и получить/обновить некоторую инфу (по первичному ключу, одну запись). Время коннекта к базе очень долгое, примерно 4-5 сек. Начинаю думать в сторону пула коннектов, который должен быть загруженным на каком-то известном хосте и к которому должны на самом деле обращаться юзера. Но... не знаю, как вообще это сделать и с чего начинать. И какой класс (?) тогда должны загружать юзера, если он вообще на другой машине загружен (бред написал, но не могу сформулировать по-другому - извиняйте :)). Посоветуйте, плз, туториал какой-нибудь, где примерно эта же задача. Или просто ссылку на прототип такого класса. Заранее спс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 17:45:57 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, авторВремя коннекта к базе очень долгое, примерно 4-5 сек. если начинать от простого, то утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:13:58 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisНачинаю думать в сторону пула коннектов, который должен быть загруженным на каком-то известном хосте и к которому должны на самом деле обращаться юзера. Правильно! Вам необходим сервер приложений (прокси). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:16:08 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:17:27 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Приделать к java приложению веб-морду на servlet, jsp, которое поставить на tomcat или jetty, при реализации приложения прикрутите какой нибудь c3p0. PS: если программу называете java-классом, то подозреваю, там действительно что то очень маленькое, соответственно и приложение переделать можно за вечер на коленке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:23:30 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Usman, Вы бы еще картинку с ESB нарисовали, у человека java-класс и сетевая шара, а вы ему цепочки из http/ejb/jdbc рисуете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:27:28 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Petro123утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера.Так?Нет, он запускает другую прогу, которая к яве вообще никаким боком, и сидит в ней весь день :-) Но из-под этой проги он способен вызвать $JRE_HOME/bin/java -cp .;sqljdbc.jar SomeFile и получить оттуда (или направить туда) некоторые данные. Ну так вот: ему приходится это делать весьма часто, и время коннекта к СУБД сильно раздражает. И надо бы ускорить его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:30:25 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
just_vladimirПриделать к java приложению веб-морду на servlet, jsp, которое поставить на tomcat или jetty, при реализации приложения прикрутите какой нибудь c3p0.Мну надо вообще без морды, чтобы юзеру даже не пришлось переключаться в веб и что-то там вводить. Он сейчас кнопку тыркает в "своей родной" проге и получает волшебным образом данные из "чужого и враждебного" ms sql. just_vladimirPS: если программу называете java-классом, то подозреваю, там действительно что то очень маленькое, соответственно и приложение переделать можно за вечер на коленке.Да, там всего-то подрихтованный демофайлик из поставки sqljdbc.jar от ms sql (attach) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 18:34:18 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, а как "родная" программка осуществляет взаимодействие с этим java-классом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 19:30:01 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
just_vladimirа как "родная" программка осуществляет взаимодействие с этим java-классом?да в тупую: 1) вызывает java <умный_java_класс> параметр_1 параметр_2 1>%temp_dir%\random.tmp 2>&1 2) открывает %temp_dir%\random.tmp и смотрит, "ну чё там ?!" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 19:40:26 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
just_vladimirВы бы еще картинку с ESB нарисовалиНет уж, рисуйте сами.just_vladimirу человека java-класс и сетевая шараВ этом-то и вся проблема + ко всему этому - пункт №1. just_vladimirа вы ему цепочки из http/ejb/jdbc рисуетеВы предлагаете иной подход к решению проблемы ТС? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 19:44:57 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Usman, а как будет происходить обращение к этому классу с пулом коннектов, который загружен "где-то посередине", из-под моей программулины, которая на клиентских машинах ? То есть, можно ли сделать как-то аналогично нынешнему изврату: вызывать jre/bin/java прямо "из нутра", чтобы юзер никуда вообще не переключался и что бы этот вызов уже шёл на сервер приложений ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 19:51:00 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis , Проблема в том, что у вас сейчас просто негде держать пул соединений. Образно говоря, вам нужна какая-то программка с циклом while(true) { ... } которая постоянно готова обслужить клиентов. Это сервер, тут у вас будет пул соединений. А тот класс, что вы запускаете - это клиент. В обычной жизни "сервером" в нашей терминологии явялется сервер приложений (JBoss, Tomcat, Glassfish, etc.). И в этом сервере развернуто приложение, которое готово обслуживать запросы клиентов, например, через TCP. Поэтому обычно работа разрабтчика с пулами коннекшов сводится к конфигурированию этих пулов через мастера конкретных серверов приложений, или через XML. Руками никто с этими пулами не возится. Если у вас цель именно потрогать это все руками, то можете заморочиться с тем, чтобы написать: 1) Сервер, который: - Создает пул соединений к СУБД (тот же c0p3). - Слушает какой-то сокет, вычитывает из него данные, потом десериализует их в запрос, потом обрабатывает этот запрос путем обращения к СУБД, потом сериализует результат, и отправляет его через этот же сокет клиенту. 2) Клиент, который: - Подключается к сокету сервера - Отправляет туда запрос - Получает ответ, десериализует его, и отдает пользователю. Это хорошее упраженение по JDBC и сокетам. Потом можете дальше это понаворачивать, например: 1) Сделать многопоточный сервер, который отдает запросы отдельным потокам 2) Попробовать на вкус NIO вместо обычных блокирующих сокетов 3) Попробовать забацать свой пул конекшнов простенький, который будет корректно работать в многопоточной среде. Ну и т.д., насколько фантазии хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 19:55:35 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE; А это сейчас работает вы проверяли? (у меня jar'ки не запускаются из расшареных папок..) Пул коннектов полезная (наверное) вещь в 3х звенной архитектуре.. Единственный сценарий когда могу себе представить работу с "пулом коннектов" на десктопе - сериализовать один Connection на JEE сервере и десериализовать на десктопе (поработать и вернуть обратно). Но у меня есть большие сомнения в целесообразности такого подхода. Мне кажется быстрее (и проще) создать новое подключение к базе данных.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:02:59 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisPetro123утром юзер запускает и держит программку в трее или свёрнутую с постоянным коннектом до вечера.Так?Нет, он запускает другую прогу, которая к яве вообще никаким боком, и сидит в ней весь день :-) Но из-под этой проги он способен вызвать $JRE_HOME/bin/java -cp .;sqljdbc.jar SomeFile и получить оттуда (или направить туда) некоторые данные. Ну так вот: ему приходится это делать весьма часто, и время коннекта к СУБД сильно раздражает. И надо бы ускорить его. я не пойму). Никто не писал обычный десктоп на Jav'е который висит в памяти целый день? И держит коннект-переменную? Аффтар! Давай сюда код своей программы )) Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:23:04 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
DEVcoachЕсли у вас цель именно потрогать это все руками, то можете заморочиться с тем, чтобы написать: 1) Сервер, который: - Создает пул соединений к СУБД (тот же c0p3). - Слушает какой-то сокет, вычитывает из него данные, потом десериализует их в запрос, потом обрабатывает этот запрос путем обращения к СУБД, потом сериализует результат, и отправляет его через этот же сокет клиенту. 2) Клиент, который: - Подключается к сокету сервера - Отправляет туда запрос - Получает ответ, десериализует его, и отдает пользователю. Метод понятен, спасибо. И для обучения, наверное, тоже самое оно. Но не будет ли сиё очередным велосипедом ? И на чём это реализуется с минимальным участием "трогания руками" ? DEVcoachЭто хорошее упраженение по JDBC и сокетам. Потом можете дальше это понаворачивать, например: 1) Сделать многопоточный сервер, который отдает запросы отдельным потокам 2) Попробовать на вкус NIO вместо обычных блокирующих сокетов 3) Попробовать забацать свой пул конекшнов простенький, который будет корректно работать в многопоточной среде. Ну и т.д., насколько фантазии хватит.Фантазии-то хватит, но... Какие-то прототипы кода нужны, хотя бы минимальные. Но в любом случае - спасибо за объяснение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:23:47 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
avp.mkozzmosis2) сетевой диск, видимый с большого числа клиентских компов, на котором лежит JRE;А это сейчас работает вы проверяли? (у меня jar'ки не запускаются из расшареных папок..)Дык! работает, совершенно спокойненько так. Только единственное "но": сетевой ресурс, зашаренный на диск, - от Novell Netware :-) Так что может это так влияет, что jar'ы (не-)могут запускаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:26:06 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Petro123Никто не писал обычный десктоп на Jav'е который висит в памяти целый день? И держит коннект-переменную?Не, погодь! :-) Как раз надо сделать так, чтобы никакого десктопа в довесок к основной программулине у юзеров НЕ было видно. Юзер тыркает кнопку и получает результат БЕЗ всякого переключения в другое окно. Когда он тыркает по кнопке, то всё происходит тихо, он просто ждет секунд 5 - и вдруг: "опа!" - готовый ответ из ms sql видит. Petro123Аффтар! Давай сюда код своей программы )) Код: java 1. В смысле ? код класса, достающего из ms sql нужную мне инфу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:30:11 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisВ смысле ? код класса, достающего из ms sql нужную мне инфу ? угу. Если ты не тролль) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:32:33 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
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. Ну, и из "главной проги" идёт соотв-щий вызов java, я его показывал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:40:47 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Я бы переделал так: 1. Сервлет контейнер (tomcat, jetty), в нем сервлет получающий post запросы с параметр_1, параметр_2 и отдающий application/octet-stream. 2. cUrl + bat/sh скрипт, который дергаете из вашей программы. Petro123Аффтар! Давай сюда код своей программы )) +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 20:42:49 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, консольное приложение отличается от оконного десктопа тем, что отработало и закрылось (закрыло коннект и обнулило переменные). - либо запускай консоль весь день в цикле, либо делай окно (невидимое) и держи коннект открытым (до вечера). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 21:14:36 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
Petro123либо делай окно (невидимое) и держи коннект открытым (до вечера).Думал в эту сторону, но испугало кол-во юзеров (>200) и от каждого коннект будет торчать в ms sql. Многовато вроде... Как вариант, конечно же, подойдёт, но только временный, "не научный" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 21:20:22 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, >200 - это научно))) Зато увидишь там имя компа у каждого. Кто работает, а кто нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 21:25:31 |
|
||
|
Как правильно сделать класс с пулом коннектов, к которому будут стучаться >200 юзеров ?
|
|||
|---|---|---|---|
|
#18+
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. И потом из своей программы вызываете curl -o %your_dir%\random.tmp http://your-web-server/MyServlet?param=paramVal PS: писал в блокноте и по памяти, будет чудом, если сходу заработает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2013, 21:48:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38377898&tid=2128729]: |
0ms |
get settings: |
18ms |
get forum list: |
26ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
44ms |
get topic data: |
20ms |
get forum data: |
6ms |
get page messages: |
105ms |
get tp. blocked users: |
2ms |
| others: | 341ms |
| total: | 572ms |

| 0 / 0 |
