Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации
 

Java™ Информация о версии RMI
для JDK™ 6

Улучшения в Java™ SE Комплект разработчика (JDK) 6

java.rmi.MarshalledObject теперь универсальный
class MarshalledObject теперь имеет параметр типа, представляющий тип содержавшего сериализированного объекта.
Исправление ошибки: Явные порты TCP, освобожденные после удаленных объектов, неэкспортируемых (4457683)
В предыдущих выпусках, после того, как удаленный объект был экспортирован на явном (неанонимном) порту TCP, реализация RMI сохранит сокет сервера связанным с тем портом открытый для времени жизни виртуальной машины, независимо от жизненного цикла удаленных объектов экспортируемый на том порту. Эта ошибка была исправлена так, чтобы после того, как все удаленные объекты, которые были экспортированы на данном неанонимном порту, стали неэкспортируемыми (или явно или посредством распределенной сборки "мусора") тогда, связанный сокет сервера будет закрыт. (Есть эквивалентная ошибка для анонимных портов TCP: 6279965.)
Исправление ошибки: Сборка "мусора" клиента снабжает фабрики сокетом (4486732)
В предыдущих выпусках, после того, как удаленный вызов был сделан на удаленном тупике, содержащем не -null RMIClientSocketFactory в данной виртуальной машине, тогда или тот объект фабрики или эквивалентный объект фабрики остались бы навсегда достижимыми в виртуальной машине, предотвращая это (и ее определение загрузчик class) от того, чтобы когда-либо быть собранным "мусор"; эта ошибка была исправлена. (Есть эквивалентная ошибка для фабрик сокета, используемых, чтобы экспортировать удаленный объект: 6332603.)
Интервал GC значения по умолчанию lengthed к одному часу (6200091)
В предыдущих выпусках, максимальном интервале между сборками "мусора" локальной "кучи", осуществленной реализацией RMI (в то время как есть живые удаленные ссылки или экспортируемые удаленные объекты), которым управляют системные свойства sun.rmi.dgc.client.gcInterval и sun.rmi.dgc.server.gcInterval, была одна минута по умолчанию. Интервал значения по умолчанию является теперь одним часом, чтобы лучше снабдить приложения большими размерами "кучи" без специальной конфигурации.

Улучшения и Изменения в Предыдущих Выпусках

Динамическая Генерация Тупиковых Классов (начиная с 5.0)
Этот выпуск добавляет поддержку динамической генерации тупиковых классов во времени выполнения, устраняя потребность использовать Java Удаленный Вызов метода (Java RMI) тупиковый компилятор, rmic, предварительно генерировать тупиковые классы для удаленных объектов. Отметьте это rmic должен все еще использоваться, чтобы предварительно генерировать тупиковые классы для удаленных объектов, которые должны поддерживать клиенты, работающие на более ранних версиях.

Когда приложение экспортирует удаленный объект (использующий конструкторов или статичный exportObject methods1 классов java.rmi.server.UnicastRemoteObject или java.rmi.activation.Activatable) и предварительно сгенерированный тупиковый class для class удаленного объекта не может быть загружен, тупик удаленного объекта будет a java.lang.reflect.Proxy экземпляр (чей class динамически сгенерирован) с a java.rmi.server.RemoteObjectInvocationHandler как его обработчик вызова.

Существующее приложение может быть развернуто, чтобы использовать динамически сгенерированные тупиковые классы безоговорочно (то есть, существуют ли предварительно сгенерированные тупиковые классы), устанавливая системное свойство java.rmi.server.ignoreStubClasses к "true". Если это свойство устанавливается в "true", предварительно сгенерированные тупиковые классы никогда не используются.

Примечания:

1 статический метод UnicastRemoteObject.exportObject(Remote) как объявляют, возвращается java.rmi.server.RemoteStub и поэтому не может использоваться, чтобы экспортировать удаленный объект, чтобы использовать динамически сгенерированный тупиковый class для его тупика. Экземпляр динамически сгенерированного тупикового class является a java.lang.reflect.Proxy экземпляр, который не присваиваем RemoteStub.

Стандартные Классы Фабрики Сокета SSL/TLS (начиная с 5.0)
Этот выпуск добавляет стандартный Java классы фабрики сокета RMI, javax.rmi.ssl.SslRMIClientSocketFactory и javax.rmi.ssl.SslRMIServerSocketFactory, которые связываются по Уровню защищенных сокетов (SSL) или Безопасность Транспортного уровня (TLS) протоколы, используя Расширение Защищенного сокета Java (JSSE). Эти классы фабрики сокета обеспечивают простой способ использовать JSSE с Java RMI, включая осуществлению целостности, конфиденциальность (через шифрование), аутентификация сервера, и (дополнительно) аутентификация клиента для удаленных вызовов метода. Для получения дополнительной информации по тому, как использовать пользовательские фабрики сокета с Java RMI, см., что учебное руководство "Использует Пользовательские Фабрики Сокета с Java RMI". Для получения дополнительной информации по JSSE (включая то, как сконфигурировать это), см. Справочник JSSE.
Запуск rmid или Java Сервер RMI от inetd/xinetd (начиная с 5.0)
Новая функция, обеспеченная System.inheritedChannel метод, позволяет приложению получать канал (java.nio.channels.SocketChannel или java.nio.channels.ServerSocketChannel, например) наследованный от процесса, который запустил виртуальную машину (VM). Такой наследованный канал может привыкнуть к любой службе единственное входящее соединение (в случае a SocketChannel) или примите многократные входящие соединения (в случае ServerSocketChannel). Поэтому, сетевые приложения Java, запущенные inetd (Солярис (ТМ) Операционная система) или xinetd (Linux) может теперь получить SocketChannel или ServerSocketChannel наследованный от inetd/xinetd.

С добавлением этой функции, Java демон активации RMI rmid был улучшен, чтобы поддерживать быть запущенным от inetd/xinetd так, чтобы rmid может быть запущен только, когда это получает входящее соединение. Для получения дополнительной информации на улучшениях к rmid чтобы поддерживать эту функцию, см. страницу инструментов для rmid (для Операционной системы Соляриса). Для получения дополнительной информации на том, как сконфигурировать inetd запускаться rmid, см., что учебное руководство "Конфигурирует inetd Запускаться rmid".

Приложение, используя Java RMI может также быть разработано, чтобы быть запущенным от inetd или xinetd. Для примера на том, как реализовать этот метод, см., что учебное руководство "Разрабатывает Службы, которые будут Запущены от inetd."

rmic опция версии протокола тупика значения по умолчанию теперь -v1.2 (начиная с 5.0)
Когда rmic выполняется без опции, чтобы определить тупиковую версию протокола JRMP, которая будет использоваться сгенерированными классами, она теперь ведет себя как будто -v1.2 опция была определена, вместо -vcompat опция как в предыдущих выпусках.

Это изменение означает это по умолчанию, rmic не генерирует скелетных классов и генерирует тупиковые классы, которые только реализуют 1.2 тупиковых версии протокола. Если удаленная реализация class должна быть создана, чтобы поддерживать клиенты, работающие на JDK 1.1, то -vcompat опция должна теперь быть определена явно. (Кроме того, отметьте, что как описано выше, если удаленная реализация class не должен поддерживать клиенты, работающие на любом выпуске до 5.0, то rmic не должен быть выполнен вообще для того class.)

См. документацию инструментов для rmic Солярис и Linux[] Windows[] для получения дополнительной информации об этих параметрах командной строки.

rmic больше не компилирует произвольные исходные файлы в пути class (начиная с 5.0)
В предыдущих выпусках, rmic иногда был бы, обрабатывая ее ввод файлы class, попытка скомпилировать произвольный .java исходные файлы, с которыми это встретилось в пути class. В 5.0, rmic не пытается скомпилировать любые исходные файлы кроме тех для тупика, скелета, или классов связи, которые это генерирует.

Ожидание состоит в том что удаленные классы реализации, к которым передают rmic, так же как все классы и интерфейсы, от которых они зависят, были уже успешно скомпилированы с javac прежде rmic выполняется. Если существующее создает процедуру, зависит от предыдущего поведения rmic для того, чтобы скомпилировать некоторые из его исходных файлов приложения, тогда которые создают процедуру, должен будет быть изменен, чтобы гарантировать, что все необходимые классы правильно компилируются с javac перед выполнением rmic.

Серверные Трассировки Стека, Теперь Сохраненные в Удаленных Исключениях (начиная с 1.4)
Java реализация времени выполнения RMI теперь сохранит сторону сервера, складывает трассировочную информацию исключения, которое выдается от удаленного вызова, в дополнение к заполнению клиентской трассировки стека, как это сделало в предыдущих выпусках. Поэтому, когда такое исключение становится доступным для клиентского кода, его трассировка стека будет теперь содержать все его исходные серверные данные трассировки, сопровождаемые клиентской трассировкой.

Эта функция делается возможной новым "программируемым доступом сложить трассировочную информацию" функция java.lang.Throwable в J2SE 1.4, который включал создание a Throwable's складывают часть данных трассировки его значения по умолчанию сериализированная форма. То, что клиентский Java реализация времени выполнения RMI теперь делает, чтобы сотрудничать с этой функцией, должно добавить клиентскую трассировку к неупорядоченной серверной трассировке, вместо того, чтобы просто перезаписать с клиентской трассировкой, как это сделало в предыдущих выпусках.

Определенные серверные приложения могут хотеть препятствовать тому, чтобы любые серверные данные трассировки стека сопровождали исключение, которое будет упорядочено как результат удаленного вызова (как часть значения по умолчанию исключения сериализированная форма в J2SE 1.4), возможно по причинам производительности или конфиденциальности. В таких случаях, специфичном для реализации системном свойстве

sun.rmi.server.suppressStackTraces
может быть установлен в "истину" заставить серверный Java реализация времени выполнения RMI очищать трассировки стека всех исключений, выданных от текущей виртуальной машины как результат удаленных вызовов метода.
Интерфейс Поставщика услуг для RMIClassLoader (начиная с 1.4)
Определенные статические методы java.rmi.server.RMIClassLoader теперь делегируйте их поведение к экземпляру нового интерфейса поставщика услуг, java.rmi.server.RMIClassLoaderSpi. Поставщик услуг может быть сконфигурирован, чтобы увеличить Java RMI динамическое поведение загрузки class для данного приложения. По умолчанию поставщик услуг реализует стандартное поведение всех статических методов в RMIClassLoader. См. документацию class RMIClassLoader и RMIClassLoaderSpi для большего количества деталей.
Динамическое Имя хоста Сервера (начиная с 1.4)
java.rmi.server.hostname свойство может теперь быть динамически обновлено, чтобы указать, что будущий экспорт должен использовать новое имя хоста. Поэтому, новое значение имени хоста будет содержаться в тупике для объекта, который экспортируется после того, как свойство обновляется.
Нейтрализация HTTP Более Конфигурируема (начиная с 1.4.1)
Специфичное для реализации системное свойство sun.rmi.transport.proxy.eagerHttpFallback был добавлен, чтобы позволить дополнительное управление, когда Java фабрика сокета значения по умолчанию RMI отступит к туннелированию HTTP. Это свойство конфигурирует фабрику сокета значения по умолчанию так, чтобы любой SocketException, брошенный начальной (прямой) попыткой подключения, инициировал туннелирование HTTP; эта более "нетерпеливая" стратегия нейтрализации может быть полезной, имея дело с брандмауэрами, которые отрицают вместо, игнорируют попытки подключения к несанкционированным портам.
java.rmi.Naming.list Метод Больше Не Предварительно ожидает Схему к Возвращенным Именам (начиная с 1.4.1)
В предыдущих выпусках, Naming.list метод, предварительно ожидаемый схема rmi: к каждому имени, содержавшемуся в возвращенном массиве строк. Naming.list реализация теперь соответствует спецификацию, возвращая массив имен, которые отформатированы URL, но без компонента схемы.
java.rmi.activation.ActivationGroupDesc (начиная с 1.3)
getClassName метод, который возвращает имя class группы, может теперь возвратиться null, указание на групповую реализацию значения по умолчанию системы. Ранее, getClassName метод возвратил бы имя внутренней реализации class, если бы групповая реализация значения по умолчанию была выбрана, когда дескриптор был создан.

Из-за этого изменения, если приложение, работающее в 1.3 виртуальных машинах, регистрирует новый объект activatable в ActivationSystem, rmid должен также быть обновлен, чтобы работать 1.3, начиная с пред1.3 rmid не будет в состоянии активировать недавно зарегистрированный объект activatable.

Java Компилятор Тупика RMI, rmic (начиная с 1.3)
По умолчанию, rmic Солярис и Linux[] Windows[] теперь предполагает, что целевой каталог для сгенерированных тупиков является названным в честь пакета подкаталогом текущего рабочего каталога. Если"-d"опция не определяется, результатом является то же самое, как если бы это было определено с текущим рабочим каталогом "." как параметр."-d"может все еще использоваться, чтобы переопределить целевой каталог значения по умолчанию.

Две новых опции,"-idl"и"-iiop"были добавлены, чтобы генерировать IDL и тупики для IIOP, соответственно.

Java Демон Активации RMI, rmid (начиная с 1.3)
По умолчанию, rmid Солярис и Linux[] Windows[] теперь требует файла политики безопасности.
Сериализация удаленных объектов (начиная с 1.2.2)
До 1.2.2, попытка передать неэкспортируемый удаленный объект в вызове RMI привела бы к a java.rmi.StubNotFoundException. Это исключение было результатом отказа времени выполнения RMI определить местоположение тупикового объекта во время попытки заменить реализацию удаленного объекта ее соответствующим тупиком. В 1.2.2 и более поздние выпуски, неэкспортируемый удаленный объект, который передают в вызове RMI, больше не будет приводить к исключению, а скорее удаленный объект будет сериализирован вместо его тупика. Если реализация удаленного объекта не будет сериализуема, то попытка передать неэкспортируемый объект в вызове RMI приведет к a java.rmi.RemoteException с вложенным исключением java.io.NotSerializableException.

Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами