powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервис на Java + connection pool
24 сообщений из 24, страница 1 из 1
Сервис на Java + connection pool
    #38207978
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые специалисты по Java!

Делаю первые шаги. Передо мной стоит задача написать демона на Джаве.
Есть готовая jar-библиотека (Asterisk-Java), которую нужно подцепить, затем установить коннект с сервером и вписать определённую логику в handleEvent, которая и должна выполняться.

Собственно, есть две проблемных задачи, которые так или иначе связаны друг с другом.
Сначала я разбирался как написать демона, поиски привели к японскому Java Service Wraper. JSW — штука хорошая и задачи свои выполняет. Она, действительно, запускает приложение в фоне и избавляет разработчика от кучи рутиной работы, но…

Мой демон предполагает периодическую запись данных в БД (pgsql/mssql). Количество операций в секунду может доходить до тысячи. Для таких вещей, как я понимаю, требуется connection pool, для того чтобы повысить производительность за счёт экономии на авторизации.

Работаю в NetBeans. В начале пробежался по продукту, предварительное изучение дало информацию, что connection pool "легко и просто" создаются в web-приложениях (кои меня не интересуют), и в так называемых EnterpriseApplication. Последнее меня зацепило, и дальше пошла игра слов.

При создании EnterpriseApplication написано, что это "решения для бизнеса", и они комплектуются необходимыми библиотеками и инструментами, которые могут потребоваться при создании бизнес-приложений.

Далее я узнал, что существует целый Сервер приложений GlassFish, и что в нём есть довольно неплохой инструментарий в плане работы с базами данных. Далее я нашел и заказал пару книжек Дэвида Хеффельфингера.

И вот, получаю я книжки "Разработка приложений Java EE 6 и NetBeans 7" и "Java EE 6 и сервер приложений GlassFish 3", открываю их и малость опупеваю… Обе книжки про веб! Зачем мне веб??! Я же приложение собирался писать!

В общем, я думаю вы меня поймёте. Ещё у меня есть "Полное руководство" от Шилдта, но там описаны базовые вещи.

Собственно, прощу помощи подсказать в какую сторону рулить и как связать пулы соединений с БД в демоне.

P.S. Есть пул соединений BoneCP с неплохим описанием, но я уже боюсь в очередной раз обжечься об специфику терминологии языка.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38207989
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В верном направлении двигаетесь. Два замечания. У Java Service Wrapper есть лицензионные ограничения. Есть более свободная альтернатива - Apache procrun

Что не так с примерами? На том же BoneCP кликаем в меню Examples, получаем внятный пример без всяких JEE
http://jolbox.com/index.html?page=http://jolbox.com/jdbc-example.html
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208000
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JSW рассматриваю профессиональную версию (15-ти минутная для разработки вполне годится).

В первую очередь прошу помощи отмести GlassFish. Я правильно понимаю, что это веб, веб и только веб и мне это не надо. Просто я напоролся в JSB на @schedule, которая явно в вебе лишняя, и актуальна для приложений немного другого уровня. Или это всего лишь удобный инструмент "очищать спам-комментарии раз в сутки"?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208014
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой демон предполагает периодическую запись данных в БД (pgsql/mssql). Количество операций в секунду может доходить до тысячи. Для таких вещей, как я понимаю, требуется connection pool, для того чтобы повысить производительность за счёт экономии на авторизации.
Сonnection pool нужен если у вас сервер который обслуживает нескольких пользователей. Если вам надо раз в час что-то загрузить в БД, то пул не нужен, создайте одно соединение и пользуйтесь им на здоровье.
Glassfish вам вряд ли нужен.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208018
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня будет демон с многопоточными процессами. Их может быть 1000. И каждый использует базу.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208033
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. Korobeynikov,
На каждый поток свое соединение. Будет быстро. Про тысячу штук спросите в форуме бд.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208035
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я запускал реальное java-приложения в виде сервиса через apache procrun. Ничем не отличалось от работы в виде приложения. В том числе и работа с базой (Oracle JDBC-thin).
Поэтому, если ваше приложение корректно работает с базой, то "конвертация" в сервис проблем не добавит.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208038
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. KorobeynikovУ меня будет демон с многопоточными процессами. Их может быть 1000. И каждый использует базу.Вот прямо все одновременно? Или, всё-таки, забрал подключение, отправил запрос (получил результат) и освободил подключение?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208043
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь про одновременные подключения идёт.
Хотелось бы иметь аналог работы пула соединений по подобию Серверов приложений.

Чтобы в рабочем коде только были три вещи: запрос свободного соединения, операция, отзыв соединения.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208054
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. KorobeynikovЧтобы в рабочем коде только были три вещи: запрос свободного соединения, операция, отзыв соединения.Или я чего-то не понимаю или оно так и будет.
Настройка пула, наверное, да - разная, но работе-то с чего различаться?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208063
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будет у меня handleEvent. Как сделать так, чтобы в нём логика начиналась со следующего кода:
Код: java
1.
			connection = connectionPool.getConnection(); // fetch a connection



А рутина была бы вынесена "за границу":
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
			// setup the connection pool
			BoneCPConfig config = new BoneCPConfig();
			config.setJdbcUrl("jdbc:hsqldb:mem:test"); // jdbc url specific to your database, eg jdbc:mysql://127.0.0.1/yourdb
			config.setUsername("sa"); 
			config.setPassword("");
			config.setMinConnectionsPerPartition(5);
			config.setMaxConnectionsPerPartition(10);
			config.setPartitionCount(1);
			connectionPool = new BoneCP(config); // setup the connection pool



P.S. Я только начинаю работать с Java и не владею её философией, большинство очевидных вещей для меня такими не являются. Пожалуйста, подскажите.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208122
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. Korobeynikov,
Вы вроде с темы съехали.
Пул заработал?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208203
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. KorobeynikovПожалуйста, подскажите.Когда мне потребовался (специфичный) пул, я открыл Java SE 6 Documentation , ткнул в Concurrency Utilities и нашёл описание ArrayBlockingQueue.
Вам всего этого можно не читать, т.к. вы уже нарисовали практически готовый код использования готовой реализации пула.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208225
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это всё конечно хорошо, но хотелось бы использовать вендорные вещи, ещё лучше непосредственно самого Оракла, а не открытые проекты. Именно поэтому я и переживаю за GlassFish.

Кто работал с GlassFish, скажите, это только веб или нет? Почему его назвали сервером приложений?

Можно ли реализовать логику работы с базой данных через публичные интерфейсы EJB, а непосредственно демона на JSW?
Чтобы демон как клиент подключался по удалённым интерфейсам EJB, а дальше выполнялась непосредственно вся логика на стороне EJB.

Если GlassFish — это только веб, то есть ли у Оракла аналог JSW, ведь серьёзные вещи должны работать в качестве сервиса.

P.S. Я пул пока не запускал, определяюсь с выбором решений и технологий. Даже если всё заработает, это не показатель. Хочется иметь вендорные вещи.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208269
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. Korobeynikov,
как предполагается подключатся к твоему сервису? По какому протоколу идёт общение. Городить монстра на Glassfish это слишком круто.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208343
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Кто работал с GlassFish, скажите, это только веб или нет? Почему его назвали сервером приложений?
вопрос какой то странный.. что именно интересует то ?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208351
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как на GlassFish написать демон, который бы использовал реализацию пулов GlassFish.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208396
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если правильно понял вопрос, можно ли чтобы glassfish по выполнял какую то работу по расписанию ?
можно, например EJB @TimerService, но это можно сделать на простых потоках, ExecutorService хотя бы, и как сказал
GregTk, использовать glassfish только для этого жирновато как то..

а так без проблем, настраиваете в админке glassfish jdbc pool, потом jndi, далее в коде
Код: java
1.
2.
3.
4.
5.
6.
7.
  @Resource(name = "jdbc/yourName")
  private DataSource dataSource;
  private Connection connection = null;
...
      connection = dataSource.getConnection();
....
      connection.close();


....
в каком то сервисном классе
Код: java
1.
2.
3.
4.
5.
6.
@Resource
  private SessionContext ctx;
  private TimerService timerService;

  timerService = ctx.getTimerService();
  и настраиваете таймер как надо.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208423
Sergey N. Korobeynikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причём тут работа по расписанию? Вы знаете что такое демон? Что такое бинд порта?
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208454
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey N. Korobeynikov,
ты спрашивал про идеологию.
- полная отвязка от Конкретной БД и бесплатные решения.

Sergey N. Korobeynikovведь серьёзные вещи должны работать в качестве сервиса.
скажу крамольную вещь.
Сервер приложений - это тот же демон или сервис.
Упрощённо - Ставишь томкат и работай.

Или больше рассказывай, чем спрашивай.
IMHO
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208465
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey N. KorobeynikovКак на GlassFish написать демон, который бы использовал реализацию пулов GlassFish.
Давайте по порядку.
Во-первых, сервер приложений, как правило, может отвечать по http протоколу, а значит является web сервером. При этом может генерить динамический контент. Так что ничего страшного, что в книгах о GlassFish пишут про web - это одна из задач, которые могут выполняться на сервере.
Во-вторых, вам, видимо, сервер приложений тут не нужен - у вас работает единственный клиент, хоть и с 1000 потоками. Подключите его напрямую к базе и наслаждайтесь быстродействием. Если считаете, что количество коннектов с данного клиента может превысить возможности SQL сервера (да и клиента тоже), используйте готовый connection pool (например, c3p0). Если хочется сделать "как в GlassFish", можно порыться в его потрохах и посмотреть, что там используется. Не исключено, что тот же самый c3p0.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208484
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanra,
+1
вполне масштабная линейка решений.
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38208611
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Причём тут работа по расписанию? Вы знаете что такое демон? Что такое бинд порта?
похоже вашу версию не знаю, озвучивайте жду
...
Рейтинг: 0 / 0
Сервис на Java + connection pool
    #38209707
bagler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно использовать Commons Pool - сделаете сами себе хороший пул с блэкджеком и шлюхами.


В коде реализуете фабрику объектов. Типа:
Код: java
1.
2.
3.
4.
public class MyNicePoolableObjectFactory extends BasePoolableObjectFactory
{

}



И далее создаёте и настраиваете пул:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
import org.apache.commons.pool.ObjectPool;
import org.apache.commons.pool.PoolableObjectFactory;
import org.apache.commons.pool.impl.GenericObjectPool;
import org.apache.commons.pool.impl.GenericObjectPoolFactory;
import org.apache.commons.pool.impl.GenericObjectPool.Config;
        
...
        
PoolableObjectFactory myPoolableObjectFactory = new MyNicePoolableObjectFactory();
Config config = new GenericObjectPool.Config();
config.maxActive = 10;
config.maxIdle = 10;
config.minIdle = 2;
config.maxWait = 30000;
config.testOnBorrow = true;
config.testWhileIdle = false;
config.testOnReturn = false;
config.lifo = false;
config.whenExhaustedAction = GenericObjectPool.WHEN_EXHAUSTED_BLOCK;
GenericObjectPoolFactory genericObjectPoolFactory = new GenericObjectPoolFactory(myPoolableObjectFactory, config);
ObjectPool myNiceDatabaseConnectionsPool = genericObjectPoolFactory.createPool();



Можно пойти другим путём. Найти к Вашей базе данных (не нашёл, какая именно) JDBC-драйвер, найти, какой класс перекрывает DataSource или ConnectionPoolDataSource с реализацией пула. Обычно они делаются под инстанцирование с помощью JNDI на серверах приложений, но можно попробовать и ручками создать и настроить.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сервис на Java + connection pool
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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