Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Java Удаленный Вызов метода


3.5 RMI Через Брандмауэры Через Прокси

Транспортный уровень RMI обычно пытается открыть прямые сокеты для узлов в Интернете. У многих интранет, однако, есть брандмауэры, которые не позволяют это. Транспорт RMI по умолчанию, поэтому, обеспечивает два, чередуют основанные на HTTP механизмы, которые позволяют клиенту позади брандмауэра вызвать метод на удаленный объект, который находится вне брандмауэра.

Как описано в этом разделе, основанный на HTTP механизм, который использование транспортного уровня RMI для RMI вызывает только, применяется к брандмауэрам с прокси-серверами HTTP.


3.5.1 Как Вызов RMI Упаковывается в пределах Протокола HTTP

Чтобы выбраться наружу брандмауэр, транспортный уровень встраивает вызов RMI в пределах доверяемого брандмауэру протокола HTTP. Данные вызова RMI отправляются снаружи как тело запроса POST HTTP, и информацию о возврате отсылают назад в теле ответа HTTP. Транспортный уровень сформулирует запрос POST одним из двух способов:

3.5.2 Фабрика Сокета По умолчанию

Транспортная реализация RMI включает расширение класса java.rmi.server.RMISocketFactory, который является провайдером ресурсов по умолчанию для сокетов клиента и сервера, используемых, чтобы отправить и получить вызовы RMI; эта фабрика сокета по умолчанию может быть получена через java.rmi.server.RMISocketFactory.getDefaultSocketFactory метод. Эта фабрика сокета по умолчанию создает сокеты, которые прозрачно обеспечивают брандмауэр, туннелирующий механизм следующим образом: Сокеты клиентской стороны, с этим поведением по умолчанию, обеспечиваются фабрикой java.rmi.server.RMISocketFactory.createSocket метод. Сокеты серверной стороны с этим поведением по умолчанию обеспечиваются фабрикой java.rmi.server.RMISocketFactory.createServerSocket метод.


3.5.3 Конфигурирование Клиента

Клиент может отключить упаковку вызовов RMI, как HTTP запрашивает, устанавливая java.rmi.server.disableHttp свойство, чтобы равняться булеву значению true.


3.5.4 Конфигурирование Сервера


Отметьте - имя хоста не должно быть определено как IP-адрес узла, потому что некоторые прокси брандмауэра не будут передавать такому имени хоста.
  1. Для клиента вне домена узла сервера, чтобы быть в состоянии вызвать методы на удаленные объекты сервера, клиент должен быть в состоянии найти сервер. Сделать это, удаленные ссылки, что экспорт сервера должен содержать полностью определенное имя узла сервера.

    В зависимости от платформы сервера и сетевой среды, эта информация может или, возможно, не доступна виртуальной машине Java, на которой работает сервер. Если это не доступно, полностью определенное имя узла должно быть определено со свойством java.rmi.server.hostname запуская сервер.

    Например, используйте эту команду, чтобы запустить класс сервера RMI ServerImpl на машине chatsubo.example.com:

       java -Djava.rmi.server.hostname=chatsubo.example.com ServerImpl
    
  2. Если сервер не будет поддерживать клиенты RMI позади брандмауэров, которые могут передать произвольным портам, использовать эту конфигурацию:
    1. Сервер HTTP слушает на порту 80.
    2. Сценарий CGI располагается в искаженном пути URL
          /cgi-bin/java-rmi.cgi
      
      Этот сценарий:
      • Вызывает локальный интерпретатор для языка программирования Java, чтобы выполнить класс, внутренний к транспортному уровню, который передает запрос к соответствующему порту сервера RMI.
      • Определяет свойства в виртуальной машине Java с теми же самыми именами и значениями как CGI 1.0 определенных переменные окружения.
Сценарий в качестве примера предоставляется в распределении RMI для операционных систем Windows 32 и Соляриса. Отметьте, что сценарий должен определить полный путь к интерпретатору для языка программирования Java на машине сервера.


3.5.5 Проблемы производительности и Ограничения

Вызовы, переданные через запросы HTTP, являются, по крайней мере, порядком величины медленнее, который отправленные через прямые сокеты, не принимая передачу прокси во внимание задерживают.

Поскольку запросы HTTP могут только инициироваться в одном направлении через брандмауэр, клиент не может экспортировать его собственные удаленные объекты вне брандмауэра, потому что узел вне брандмауэра не может инициировать вызов метода назад на клиенте.



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Copyright 1997, 2010, Oracle и/или его филиалы. Все права защищены.