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