![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
Вообщем работаю с несколькими базами, где разные данные соответственно. Все коннекты держу в одном классе. Соответственно если нужны вызываю сам класс и методы. По коду программы приходиться коннектиться к нескольким базам одновременно, причем есть коды в таком виде что сначала получаю данные из одной базы, и в зависимости от того, что получил коннектюсь либо ко второй, либо к третьей и т.п. и все в одном методе класса. Тока допустим если у меня нет соединения с одной из баз программа сразу же выкидывает исключительную ситуацию, но возможно мне это база в данный момент не нужна, а сдругой работать не получается. Вот как бы это грамотно организовать, чтоб если даже один сервак(база) ляжет, без ущерба можно было работать с другими?
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| mulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 3.5.2006 Репутация: нет Всего: нет |
Я может вопроса не понял, а может ты его так путанно задал... короче я не вижу тут сложности, ну отвалилась база и чего? просто лови эксепшн и обрабатывай его правильно или вообще не обрабатывай, а работай себе дальше с тем что есть.
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
mulya, можно конечно для каждого отдельно отлавливать эксепшн, но это сколько раз код дублировать придется?
А не обрабатывать, нет уж надо контролировать. Кроме того я заранее не знаю какая база мне понадобится => в метод нужно передовать все коннекты, а если сервак лег, то Connection con, вот этот самый con как null не передаст, а будет ругатся и я не смогу работать с остальными базами. Это сообщение отредактировал(а) Bulat - 6.7.2006, 12:24 -------------------- менеджер по кодеврайтингу |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
Bulat
Ничего не понял, ну есть коннекты, обращаться за ними надо не напрямую, а через, например, get метод, который может проверить жив ли еще/имеется коннект, при необходимости попытаться его, например, восстановить и вернуть на выбор: готовый коннект/код ошибки/сгенерированное исключение. И в загадочный метод передаем не все коннекты (на фиига они все вообще сдались), а пусть наш метод вызовет нужный ему коннект через соотв. фактори метод класса, ответственного за пул коннектов. |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
Это у меня есть как раз в отдельном классе. Даже если я заранее не знаю какой именно мне нужен будет? А вот про енто можно поподробнее или вообще как в кодах будет выглядеть? Я так понял: у меня сейчас такая структура: (все соотв. через методы) "Исходный" класс "Коннект" класс Класс достающий данные В исходном классе вызываю Коннект класс -> получаю коннекты -> вызываю класс достающий данные, передовая ему коннекты. А ты предлаагешь: Исходный класс, в нем вызываю класс достающий данные -> в классе достающий данные по мере необходимости вызываю класс Коннект, получая нужный коннект? Это сообщение отредактировал(а) Bulat - 6.7.2006, 13:06 -------------------- менеджер по кодеврайтингу |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
Bulat
"Даже если я заранее не знаю какой именно мне нужен будет? А вот про енто можно поподробнее или вообще как в кодах будет выглядеть?" Беда в том, что я никак не могу понять суть проблемы. Ну обратились мы за произвольным коннектом к фабрике коннектов, ну не "Шмогла она" выдать желаемое, в чем здесь проблема? Наш класс получит соотв. код возврата или, что разумнее, исключение, обработает его и сам решит может он жить без этого коннекта или нет, например, не попытаться ли ему обратиться к другой базе (впрочем, такой алгоритм - "поиск доступной базы", лучше возложить на фабрику соединений). Поскольку не думаю, что проблема настолько проста, то полезно было бы глянуть на кастрированный код класса, который вызывает проблему (только обязательно кастрированный много строк не имеющих отношения к делу не осилю |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
Опиши реальную ситуацию.
А то "с одной базой поработал - в зависимости от результатов то ко второй то к третьей коннектиться, если не законектился - то она мне и не нужна, а нужна другая.." "Песца на снегу не видно. Белый песец, белый снег — писец, ничего не понятно."(с) Ты на пальцах покажи, конец дня всё-таки.... не железные же Покажи - там сконнетился- считал то, в той базе хранится то, в это - не то. тут вообще нихрена не хранится, а этой базы ваще нет Хоть по именам их обзови -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| Bulat |
|
||||||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
ОК, тока енто все равно не раскроет все моменты, потому что комбинаций коннектов много, в базе хранится куча всего, запросы очень разные. А база составлена так, что в одной первоначальная инфа по всем. В другой уже по некоторым определенным клиентам одного рода(таких несколько), в третьей по другим параметрам одни клиенты, везде данные разные. (Но логически база составлена грамотно, просто так тоже не обьяснишь, либо ряд постов и на это тратить придется)
вот класс где коннекты:
Вот как я его применяю
Вот один из тех классов где мне нужны коннекты.
Как видно один коннект мне стабильно нужен, но остальные по мере необходимости, в зависимости от того какой клиент(группа клиентов) и какая инфа о нем нужна. (хотелось бы чтобы приложение все же выполняло не определенные задачи, а в определенной мере было универсальным, сорри за тавтологию) Единственное возможно лучшее решение, это как я раньше уже писал, не передовать сразу все коннекты, а вызывать их по мере необходимости и в этот момент проверять/обрабатывать. Увеличит объем кода, но пока я только так вижу оптимальный выход из ситуации. chief39, я обычно сюда по утрам, в обед лазию. Потому как понял что вечером здесь от меня мало толку. -------------------- менеджер по кодеврайтингу |
||||||
|
|||||||
| carper |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
Вполне нормальное решение, объем кода это никак не увеличит, разве что вместо обращения к переменной класса будет обращение к методу, ну, и в конце всех if-ов добавиться маленький блочок обработки универсального исключения (см. ниже). Код можно подсократить, обрабатывая все основные исключения в классе коннектов, который будет, в свою очередь отбрасывать только одно, собственное, исключение с подробным описанием ошибки. IMHO составление списка готовых коннектов "про запас" в данном случае не нужно.
|
||||
|
|||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
carper, ну в принципе мой алгоритм, тока в деталях немного другой
Вот за это пасиба, хоть мне это не совсем подходит(там есть еще и другие заморочки), но можно кое куда впихнуть -------------------- менеджер по кодеврайтингу |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
А почему бы не сделать классец, который будет содержать в себе:
- полученные коннекты - методы их инита - методы клоза То есть доработать класс Connect И создавая его - ничего не получать из пула. Передавать его вместо списка коннектов. И получать из него через GetConnection(String ID) коннекшн конкретного типа. то есть в момент вызова этого метода - получать коннекшн если он ещё не получен, сохранять его в переменной(хэшмэпе ссылок на коннекшны по имени) класса и выделять наверх, уже для использования. Там(в классе) и делать обработку всех иксепшнов. И сделать close() в этом классе, который будет закрывать все открытые до того коннекшны. Кстати, такой клоз или такие клозы стоит заносить в finally блок, а не оставлять просто в конце метода -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| kondr |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.11.2005 Репутация: нет Всего: 1 |
Я вообще в Java не большой спец, но здесь по-моему явно плохой дизайн и из-за этого все проблемы. У тебя три класса инита, три класса дестроя с одинаковым кодом и т.п. Почему бы их не вынести в базовый класс? Короче надо сделать базовый класс конекта и три потомка для соединения с каждой базой.
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
kondr, такая реализация не решает суть самой проблемы
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 15 Всего: 77 |
А какая разница для реализации? УРЛЫ коннектов всё равно разные в этих двух случаев у разных БД. С программной т.з. - джидибиси пофик тут же база или на дргуом серваке -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
Тема пока себя изжила, конкретно для меня, у меня пока поставились другие задачи, может скоро вернусь. Да и кроме того я наконец добрался до hibernate
-------------------- менеджер по кодеврайтингу |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |