Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Клиент-сервер. Обработка исключений 
:(
    Опции темы
GShadrin
Дата 9.7.2013, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Добрый день.

Такой вопрос. Приложение имеет клиент-серверную архитектуру. Есть набор бизнес-логики, декларированный интерфейсами. Есть две реализации - серверная и клиентская (отсылает запросы соответствующему методу на сервере). Данный подход позволяет переключаться между клиент-серверным и локальным режимом работы. Все хорошо, но есть небольшая проблема. В интерфейсах декларированы исключения (их может быть несколько) и встает задача обработки их на клиенте, таким образом чтобы пробросить именно тот тип исключения, который произошел на сервере. 

Сейчас это делается примитивным способом:
Код

        Message message = new Message(obj1, obj2);
        ResponseServerMessage responseServerMessage;
        responseServerMessage = NetworkService.get().send(authorizationRequestMessage);

        if (responseServerMessage instanceof ExceptionResponseMessage)
        {
            Exception exception = ((ExceptionResponseMessage) responseServerMessage).getException();
            if (exception instanceof Exception1)
                throw (Exception1) exception;
            else if (exception instanceof Exception2)
                throw (Exception2) exception;
            else if (exception instanceof Exception3)
                throw (Exception3) exception;
            else
                throw (RuntimeException) exception;
        }
        
        ResponseMessager responseMessage = (ResponseMessager ) responseServerMessage;
        Object obj1 = responseMessage .geObj1();
        .....


Такая обработка исключений выглядит мягко говоря не красиво. Может быть кто-нибудь знает способ как можно красиво обработать исключения в моем случае.
PM MAIL   Вверх
jManiak
Дата 10.7.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 6.2.2007
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Посмотрите в сторону spring. 
PM MAIL ICQ   Вверх
GShadrin
Дата 10.7.2013, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Цитата(jManiak @ 10.7.2013,  13:30)
Посмотрите в сторону spring.

Написан свой велосипед. Мигрировать весь проект на Spring достаточно накладно и на мой взгляд Spring будет излишним.
PM MAIL   Вверх
GShadrin
Дата 10.7.2013, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



PM MAIL   Вверх
GShadrin
Дата 10.7.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 20.7.2009
Где: Екатеринбург

Репутация: нет
Всего: нет



Последний вариант с женериками вроде неплохой. Пока остановился на нем.
Код

public class UnsafeThrower
{
    public static void throww(final Throwable exception)
    {
        class Thrower<T extends Throwable>
        {
            @SuppressWarnings("unchecked")
            private void sneakyThrow(Throwable exception) throws T
            {
                throw (T) exception;
            }
        }
        new Thrower<RuntimeException>().sneakyThrow(exception);
    }
}


Это сообщение отредактировал(а) GShadrin - 10.7.2013, 21:02
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0961 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.