|
Spec-Zone .ru
спецификации, руководства, описания, API
|
| СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
java.io.Serializable интерфейс. Для получения дополнительной информации на том, как сделать классы сериализуемыми, см. "Спецификацию Сериализации Объекта Java." Классы, для параметров или возвращаемых значений, которые не доступны локально, загружаются динамически системой RMI. См. раздел по "Динамическому Классу, Загружающемуся" для получения дополнительной информации о том, как RMI загружает параметр и классы возвращаемого значения, читая параметры, возвращаемые значения и исключения. Так, когда неудаленный объект передают как значение аргумента или возвращаемое значение в удаленном вызове метода, контент неудаленного объекта копируется прежде, чем вызвать запрос к удаленному объекту.
Когда неудаленный объект возвращается из удаленного вызова метода, новый объект создается в виртуальной машине вызова.
java.io.ObjectOutputStream чтобы сериализировать параметры месту назначения удаленного вызова. ObjectOutputStream разделите на подклассы переопределяет replaceObject метод, чтобы заменить каждый экспортируемый удаленный объект его соответствующим тупиковым экземпляром. Параметры, которые являются объектами, пишутся потоку, используя ObjectOutputStream's writeObject метод. ObjectOutputStream вызовы replaceObject метод для каждого объекта, записанного потоку через writeObject метод (который включает объекты, на которые ссылаются те объекты, которые пишутся). replaceObject метод подкласса RMI ObjectOutputStream возвращает следующее: replaceObject экземпляр java.rmi.Remote и тот объект экспортируется во время выполнения RMI, тогда это возвращает тупик для удаленного объекта. Если объект является экземпляром java.rmi.Remote и объект не экспортируется во время выполнения RMI, тогда replaceObject возвращает объект непосредственно. Тупик для удаленного объекта получается через звонок в метод java.rmi.server.RemoteObject.toStub.replaceObject не экземпляр java.rmi.Remote, тогда объект просто возвращается.ObjectOutputStream также реализации annotateClass метод, который аннотирует поток вызова расположением class так, чтобы это могло быть загружено в получателе. См. раздел "Динамический Класс, Загружающийся" для получения дополнительной информации о как annotateClass используется. Так как параметры пишутся синглу ObjectOutputStream, ссылки, которые обращаются к тому же самому объекту в вызывающей стороне, обратятся к той же самой копии объекта в получателе. В получателе параметры читаются синглом ObjectInputStream.
Любое другое поведение значения по умолчанию ObjectOutputStream для того, чтобы записать объекты (и так же ObjectInputStream для того, чтобы считать объекты), сохраняется в передаче параметров. Например, вызов writeReplace при записи объектов и readResolve когда чтение объектов соблюдает параметр RMI, упорядочивают и неупорядочивают потоки.
Подобным образом к передаче параметров в RMI как описано выше, возвращаемое значение (или исключение) пишется подклассу ObjectOutputStream и имеет то же самое заменяющее поведение как передача параметра.