Класс RMISocketFactory
- java.lang.Object
-
- java.rmi.server.RMISocketFactory
- Все реализованные интерфейсы:
- RMIClientSocketFactory, RMIServerSocketFactory
public abstract class RMISocketFactory extends Object implements RMIClientSocketFactory, RMIServerSocketFactory
Экземпляр RMISocketFactory используется в RMI-среде для получения клиентских и серверных сокетов для RMI-вызовов. Приложение может использовать метод setSocketFactory для запроса использования экземпляра своего сокет-фактори в RMI-среде вместо реализации по умолчанию.
Реализация сокет-фактори по умолчанию использует трёхступенчатый подход к созданию клиентских сокетов. Сначала производится попытка прямого подключения к удалённой виртуальной машине. Если это не удаётся (из-за файрвола), среда использует HTTP с явным указанием порта сервера. Если файрвол не разрешает такой тип связи, используется HTTP для cgi-скрипта на сервере для отправки RMI-вызова методом POST. Механизмы HTTP-туннелирования отключены по умолчанию. Это поведение контролируется свойством java.rmi.server.disableHttp, значение которого по умолчанию true. Установка значения этого свойства в false включит механизмы HTTP-туннелирования.
Устаревшее: HTTP-туннелирование. Механизмы HTTP-туннелирования, описанные выше, а именно HTTP с явным указанием порта и HTTP для cgi-скрипта, устарели. Эти механизмы HTTP-туннелирования могут быть удалены в будущих релизах платформы.
Реализация сокет-фактори по умолчанию создаёт серверные сокеты, привязанные к универсальному адресу, который принимает запросы со всех сетевых интерфейсов.
- Примечание по реализации:
-
Можно использовать класс
RMISocketFactoryдля создания серверного сокета, привязанного к конкретному адресу, ограничивая источник запросов. Например, следующий код реализует сокет-фактори, который привязывает серверные сокеты к IPv4-адресу обратной петли. Это ограничивает обработку RMI запросов только с локального хоста.class LoopbackSocketFactory extends RMISocketFactory { public ServerSocket createServerSocket(int port) throws IOException { return new ServerSocket(port, 5, InetAddress.getByName("127.0.0.1")); } public Socket createSocket(String host, int port) throws IOException { // just call the default client socket factory return RMISocketFactory.getDefaultSocketFactory() .createSocket(host, port); } } // ... RMISocketFactory.setSocketFactory(new LoopbackSocketFactory());Установите системное свойствоjava.rmi.server.hostnameсо значением127.0.0.1, чтобы убедиться, что сгенерированные заглушки подключаются к нужному сетевому интерфейсу. - С:
- JDK1.1
Конструкторы
| Конструктор и описание |
|---|
RMISocketFactory() Создаёт экземпляр |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
abstract ServerSocket |
createServerSocket(int port) Создаёт серверный сокет на указанном порту (порт 0 указывает анонимный порт). |
abstract Socket |
createSocket(String host,
int port) Создаёт клиентский сокет, подключенный к указанному хосту и порту. |
static RMISocketFactory |
getDefaultSocketFactory() Возвращает ссылку на сокет-фактори по умолчанию, используемый этой RMI-реализацией. |
static RMIFailureHandler |
getFailureHandler() Возвращает обработчик сбоя создания сокета, установленный методом |
static RMISocketFactory |
getSocketFactory() Возвращает сокет-фактори, установленный методом |
static void |
setFailureHandler(RMIFailureHandler fh) Устанавливает обработчик сбоев, вызываемый RMI-средой в случае неудачи создания серверного сокета. |
static void |
setSocketFactory(RMISocketFactory fac) Устанавливает глобальный сокет-фактори, из которого RMI получает сокеты (если удалённый объект не связан со специфичным клиентским и/или серверным сокет-фактори). |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Конструкторы
RMISocketFactory
public RMISocketFactory()
Создаёт экземпляр RMISocketFactory.
- С:
- JDK1.1
Методы
createSocket
public abstract Socket createSocket(String host,
int port)
throws IOException
Создаёт клиентский сокет, подключенный к указанному хосту и порту.
- Определено в:
-
createSocketв интерфейсеRMIClientSocketFactory - Параметры:
-
host- имя хоста -
port- номер порта - Возвращает:
- сокет, подключенный к указанному хосту и порту.
- Исключения:
-
IOException- если во время создания сокета произошла ошибка ввода-вывода - С:
- JDK1.1
createServerSocket
public abstract ServerSocket createServerSocket(int port)
throws IOException
Создаёт серверный сокет на указанном порту (порт 0 указывает анонимный порт).
- Определено в:
-
createServerSocketв интерфейсеRMIServerSocketFactory - Параметры:
-
port- номер порта - Возвращает:
- серверный сокет на указанном порту
- Исключения:
-
IOException- если во время создания серверного сокета произошла ошибка ввода-вывода - С:
- JDK1.1
setSocketFactory
public static void setSocketFactory(RMISocketFactory fac)
throws IOException
Устанавливает глобальный сокет-фактори, из которого RMI получает сокеты (если удалённый объект не связан со специфичным клиентским и/или серверным сокет-фактори). Сокет-фактори RMI может быть установлен только один раз. Примечание: RMISocketFactory может быть установлен только если текущий менеджер безопасности разрешает установку сокет-фактори; если запрещено, будет брошено исключение SecurityException.
- Параметры:
-
fac- сокет-фактори - Исключения:
-
IOException- если сокет-фактори RMI уже установлен -
SecurityException- если менеджер безопасности существует и его методcheckSetFactoryне разрешает операцию. - С:
- JDK1.1
- См. также:
-
getSocketFactory(),SecurityManager.checkSetFactory()
getSocketFactory
public static RMISocketFactory getSocketFactory()
Возвращает сокет-фактори, установленный методом setSocketFactory. Возвращает null если сокет-фактори не был установлен.
- Возвращает:
- сокет-фактори
- С:
- JDK1.1
- См. также:
setSocketFactory(RMISocketFactory)
getDefaultSocketFactory
public static RMISocketFactory getDefaultSocketFactory()
Возвращает ссылку на сокет-фактори по умолчанию, используемый этой RMI-реализацией. Это будет фактори, используемый RMI-средой, когда getSocketFactory возвращает null.
- Возвращает:
- сокет-фактори RMI по умолчанию
- С:
- JDK1.1
setFailureHandler
public static void setFailureHandler(RMIFailureHandler fh)
Устанавливает обработчик сбоев, вызываемый RMI-средой в случае неудачи создания серверного сокета. По умолчанию, если обработчик сбоев не установлен и создание серверного сокета терпит неудачу, RMI-среда пытается пересоздать серверный сокет.
Если существует менеджер безопасности, этот метод сначала вызывает метод менеджера безопасности checkSetFactory для проверки разрешения операции. Это может привести к SecurityException.
- Параметры:
-
fh- обработчик сбоев - Исключения:
-
SecurityException- если менеджер безопасности существует и его методcheckSetFactoryне разрешает операцию. - С:
- JDK1.1
- См. также:
-
getFailureHandler(),RMIFailureHandler.failure(Exception)
getFailureHandler
public static RMIFailureHandler getFailureHandler()
Возвращает обработчик сбоя создания сокета, установленный методом setFailureHandler.
- Возвращает:
- обработчик сбоев
- С:
- JDK1.1
- См. также:
setFailureHandler(RMIFailureHandler)
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.