![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
implements |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
Есть класс отвечающий за работу с БД, реализован он как singleton, в приватном конструкторе создаю подключение к БД, и в методах реализована логика(всякие селекты и insert-ы), и вот ложу все это дело на веб-сервер tomcat и начинаю вызывать методы, и с каждым вызовом появляется в процессах новый просесс postgres, и ка вы поняли через время это все дело валится
Это сообщение отредактировал(а) implements - 29.7.2010, 07:58 |
|||
|
||||
witex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 1 Всего: 4 |
А как это компилируется? --------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
у тебе текут объекты java.sql.Connection, а создание процессов postgres – один из эффектов течи. На каждый новый connectBase() создаётся новый Connection, который не закрывается.
Почитай tutorial по JDBC |
|||
|
||||
implements |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
witex, что значит как?
dobrolub, Дык у меня оъект DataBase существует в одном экземпляре, и в его приватном конструкторе я создаю java.sql.Connection, следовательно и он будет в одном экземпляре, правильно? Да кстати делал по простому, каждый раз создавал java.sql.Connection и закрывал его, всеравно процесс postgres не уничтожался. |
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Надо добавить System.out.printlns и убедиться, что это именно так. Из кода который ты показал это не очевидно.
Это сообщение отредактировал(а) dobrolub - 30.7.2010, 07:49 |
|||
|
||||
implements |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
dobrolub,
Этот код не показывает?
Это сообщение отредактировал(а) implements - 30.7.2010, 07:47 |
|||
|
||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Class Database - public, method connectBase – public . следовательно из другого места программы может вызываться много раз.
|
|||
|
||||
implements |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
dobrolub, Мда а Вы знаете как я его вызываю методы этого класса?
а вот так вот
Это такой шаблон, я явно не создаю объект
За это отвечает статический метод getInstance(), это так на всякий случай если Вы не знаете! Это сообщение отредактировал(а) implements - 30.7.2010, 07:59 |
||||
|
|||||
dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Ну например такой код даст Connection leak:
Я бы добавил System.out.println в код перед выделением Connection, чисто чтобы убедиться. Весь твой код я не смотрю же. Ты только один класс показал. |
|||
|
||||
implements |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
А зачем так???? когда вызывается getInstance(), то он смотрит создан класс или нет, если создан, то возвращает ссылку на него, а если нет, то создает и возвращает, в этом я уверен это же ведь singleton!!! |
|||
|
||||
aleksandy |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
Не будь таким уверенным... Твой код в многопоточном приложении запросто может создать несколько экземпляров connection. Читай срочно. И statement лучше создавать и закрывать для каждого запроса заново. |
|||
|
||||
implements |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
Знаю, но приложение однопоточное=), но ладно что ыло легче я синхронизирую все это дело!
Делал и statement и connection открывал и закрывал с каждым новым обрашением, НО приэтом процессы не удалялись, при создании каждый раз новый создается!!! |
||||
|
|||||
implements |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 20.7.2010 Репутация: нет Всего: нет |
Впринципе когда каждый раз закрываю и открываю connection, res и statment то работает нормально!
Но все-же класс управления БД должен быть в одном экземпляре! |
|||
|
||||
dobrolub |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
Я хотел обратить внимание на твой метод connectBase() (не getInstance()). connectBase – public и может быть вызван из другого места программы много раз. >Да кстати делал по простому, каждый раз создавал java.sql.Connection и закрывал его, всеравно процесс postgres не уничтожался. процесс будет висеть если он ещё используется драйвером, или когда он ещё в пуле процессов postgres для новых клиентов. Посмотри на драйвер, может его надо сменить / обновить версию. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |