2012-04-18 3 views
0

меня такая ситуация в Java:Java лучший подход (Нити Dbus и HTTPRequest)

О внутренних модулей под названием I. Большой модуль Z, который получает сообщения от DBus от I. Этот большой модуль Z общаться с внешний сервер E (для каждого сообщения, полученного Dbus).

Архитектура DBus, каждый раз, когда выполняется запрос, в модуле Z создается новый поток для его обработки.

Каков наилучший способ связи с E?

a) Make a class with a method SendToExternalServer(). this method will be called every time that have a new DBus message. 
    i) The method has only one HttpUrlConnection. 
    ii) The method create a differente HttpUrlConnection instance every time is called. 

b) Same situation on a) but now the method SendToExternalServer() is static 
    i) (same situations) 
    ii) (same situations) 

c) Same situation on a) but the class extends the interface Runnable 
    i) (same situation) 
    ii) (same situation) 


d) OTHER ? 

Заранее спасибо João

+0

Я бы не создал новый поток для каждого входящего события. Вместо этого используйте диспетчер событий, который использует пул потоков (например, Исполнитель, как предложено пользователем949300). –

ответ

0

Я ничего не знаю о DBus, так возьмите это с зерном соли.

Я бы не выбрать вариант B, просто из-за модульного тестирования. С помощью опции A (или C) вы можете переключиться на «MockSendToExternalServer», который просто регистрирует или отмечает отправленные сообщения, а модульный тест будет рассматривать эти сообщения.

Я бы очень стремился к варианту C, потому что тогда вы могли бы использовать java.util.concurrent ConcurrencyUtilities, например ExecutorService. Для реализации первого прохода используйте простую однопоточную очередь (например, Executors.newSingleThreadedExecutor), но если вам нужно больше потоков, вы можете добавить их, например. Executors.newFixedThreadPool().

+0

Проблема в том, что .. опция C Мне нужно сделать один класс для каждого метода, с которым мне нужно связаться с внешним сервером ... Это неверно, это не так? – joao

+0

Возможно, вы сделаете одно _instance_ из Runnable за сообщение. Но вы можете использовать один и тот же класс для обработки всех них. (Здесь я догадываюсь, что я вообще не знаю ваших данных) – user949300

+0

Представьте себе следующее: У меня есть класс, после чего общаюсь с External Server .., которые имеют несколько методов вроде: GetListOfCars(); GetListOfBikes(); GetListOfXPTO(); – joao

Смежные вопросы