2016-06-03 4 views
1

Я дал банковское приложение, которое я должен изменить, чтобы баланс учетной записи обновлялся на каждом экране графического интерфейса пользователя. Это должно быть сделано с помощью RMI (Observable) в моем примере. Я уже сделал эту работу, по крайней мере, я почти уверен в этом.Удаленный интерфейс Java блокирует использование моего графического интерфейса

Существует интерфейс REMOTE под названием IBankingSession. Этот интерфейс REMOTE должен иметь такой метод, как setGUI(BankSessionController) или что-то в этом роде. Но это невозможно, потому что части JavaFX не являются Serializable. IBankingSession не имеет отношения к графическому интерфейсу. Как связать экземпляр IBankingSession с этим GUI? Итак, я могу обновить GUI из этого экземпляра? Также кажется странным сделать такой метод, как setGUI в интерфейсе REMOTE. Поскольку графический интерфейс, конечно, находится на том же экране, где и создается сеанс.

Мне любопытно, для какой-то хорошей идеи. Заранее спасибо.

IBankingSession session = desk.logIn(tfAccount.getText(), tfPassword.getText()); 

ответ

2

Прежде всего: вы не хотите связывать свою «удаленную» вещь напрямую с вашими местными клиентами, которые ее используют. Этот IBankingSession не имеет никакого бизнеса, зная что-либо о том, что ваш клиент хочет использовать JavaFx, чтобы поместить что-то на экраны пользователей.

Вместо этого, попробовать что-то вроде этого: определить интерфейс, который позволяет обратные вызовы (другими словами: какой-то модели «толчок»):

Клиент регистрируется на удаленном сервере; говоря: «Меня интересуют обновления баланса».

Затем, после обновления «баланса», удаленная служба передает эту информацию каждому клиенту.

Теперь каждый клиент будет уведомлен; и затем может решить, что делать с входящими обновлениями; например, обновить некоторый компонент интерфейса JavaFx; или, возможно, записать их в какое-то постоянное хранилище - предоставив вам один механизм, который может быть полезен для огромного множества различных вариантов использования.

2

Вы не должны использовать наблюдаемые вообще и, конечно, не по сети.

Что касается RMI, вам следует избегать любых действий в обратном вызове на стороне клиента. Проблемы с брандмауэром, проблемы с задержкой, проблемы с подключением, ... всевозможные вещи, которые могут привести к пропуску вашего клиента.

Вам нужно полностью переосмыслить это. Это не жизнеспособный дизайн.