![]() |
Модераторы: 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. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |