Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
Когда параметры и возвращаемые значения для удаленного вызова метода неупорядочиваются, чтобы стать живыми объектами в JVM получения, определения class требуются для всех типов объектов в потоке. Процесс немаршалинга сначала пытается разрешить классы по имени в его локальном контексте загрузки class (контекст загрузчик class текущего потока). RMI также предоставляет средство для того, чтобы оно динамически загрузило определения class для фактических типов объектов, которые передают как параметры и возвращаемые значения для удаленных вызовов метода от сетевых расположений, определенных конечной точкой передачи. Это включает динамическую загрузку удаленных тупиковых классов, соответствующих определенным классам реализации удаленного объекта (и используемый, чтобы содержать удаленные ссылки) так же как любой другой тип, который передает значение в вызовах RMI, таких как подкласс объявленного типа параметра, который не уже доступен в контексте загрузки class стороны немаршалинга.
Чтобы поддерживать динамическую загрузку class, время выполнения RMI использует специальные подклассы java.io.ObjectOutputStream
и java.io.ObjectInputStream
для упорядочивать потоков, которые это использует для маршалинга и немаршалинга параметров RMI и возвращаемых значений. Эти подклассы соответственно переопределяют annotateClass
метод ObjectOutputStream
и resolveClass
метод ObjectInputStream
передавать информацию о том, где определить местоположение файлов class, содержащих определения для классов, соответствующих дескрипторам class в потоке.
Поскольку каждый дескриптор class, записанный RMI, упорядочивают поток, annotateClass
метод добавляет к потоку результат вызова java.rmi.server.RMIClassLoader.getClassAnnotation
для объекта class, который может быть null
или может быть a String
объект, представляющий кодовую базу путь URL (разделенный пробелом список URL), с которого удаленная конечная точка должна загрузить файл определения class для данного class.
Поскольку каждый дескриптор class, считанный из RMI, упорядочивают поток, resolveClass
метод читает единственный объект из потока. Если объектом является Строка (и значение java.rmi.server.useCodebaseOnly
свойство не true
), тогда resolveClass
возвращает результат вызова RMIClassLoader.loadClass
с аннотируемым String
возразите как первый параметр и имя требуемого class в дескрипторе class как второй параметр. Иначе, resolveClass
возвращает результат вызова RMIClassLoader.loadClass
с именем требуемого class как единственный параметр.
См. раздел "Класс RMIClassLoader" для большего количества деталей о class, загружающемся в RMI.