как быстро освоить Java RMI - PullRequest
       21

как быстро освоить Java RMI

7 голосов
/ 03 сентября 2010

У меня есть приложение на Java, над которым я работаю уже год или два.Я хотел бы создать очень простой набор (с возможностью добавить сложность позже) интерфейсов, которые я могу использовать для управления моим Java-приложением из другой JVM (например, MATLAB).

Я предполагаю, что RMI - лучший способсделать это, но я не уверен, так как я почти ничего не знаю об этом.

Каков лучший способ быстро изучить RMI?

Допустим,Я хочу использовать интерфейс, подобный следующему:

interface Application {
   public void setLoggingEnabled(boolean enable);
   public boolean isLoggingEnabled();
}

Как я могу реализовать мост между двумя JVM с этим интерфейсом, используя RMI?Что я должен знать о блокировке / потоке / синхронизации, чтобы эта работа работала?

Ответы [ 4 ]

11 голосов
/ 03 сентября 2010

Один из быстрых способов сделать это - использовать Spring. Это не обязательно означает использование множества конфигураций XML: классы поддержки RMI в Spring можно использовать программно.

Два ключевых класса:

Преимущество такого способа состоит в том, что вам нужно только написать реализацию вашего интерфейса, и это можно сделать доступным с помощью RmiServiceExporter. Между тем, на стороне клиента использование RmiProxyFactoryBean дает вам прокси-объект, который реализует интерфейс. Что касается кода на стороне клиента, он работает с «реальной» реализацией интерфейса, но прокси-сервер выполняет для вас вызовы RMI. Использование RMI прозрачно.

В качестве примера того, как быстро это может быть, я только что написал сервер и клиент, используя ваш интерфейс.

Моя реализация интерфейса:

public class ApplicationImpl implements Application {

    private boolean enable;

    @Override
    public void setLoggingEnabled(boolean enable) {
        this.enable = enable;
    }

    @Override
    public boolean isLoggingEnabled() {
        return enable;
    }

}

Код на стороне сервера:

RmiServiceExporter exporter = new RmiServiceExporter();
exporter.setService(new ApplicationImpl());
exporter.setServiceInterface(Application.class);
exporter.setServiceName("application");
exporter.afterPropertiesSet();

Код на стороне клиента:

RmiProxyFactoryBean pfb = new RmiProxyFactoryBean();
pfb.setServiceInterface(Application.class);
pfb.setServiceUrl("rmi://localhost/application");
pfb.afterPropertiesSet();
Application app = (Application) pfb.getObject();

System.out.println(app.isLoggingEnabled());
app.setLoggingEnabled(true);
System.out.println(app.isLoggingEnabled());

который в качестве ожидаемых результатов:

false
true
6 голосов
/ 03 сентября 2010

Вы можете начать с официального руководства RMI .


Ресурсы:

По той же теме:

2 голосов
/ 03 сентября 2010
1 голос
/ 03 сентября 2010

Как сказали Йок и Колин, посмотрите учебник по RMI, поддерживаемый Oracle (Sun), и к тому времени, когда вы читаете, попробуйте кодировать примеры кодов и протестировать их в примере проекта.

Ссылки

...