Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Java Удаленный Вызов метода


7.4 Интерфейсы активации

В протоколе активации RMI есть две гарантии, что активатор должен сделать для системы, чтобы функционировать должным образом: Активатор поддерживает базу данных соответствующей информации для групп и возражает, что это участвует в активировании.


7.4.1 Activator Интерфейс

Активатор является одним из объектов, который участвует во время процесса активации. Как описано ранее, дающая сбой ссылка (в тупике) вызывает активатор activate метод, чтобы получить "живую" ссылку на activatable удаленный объект. После получения запроса на активацию активатор ищет дескриптор активации для идентификатора активации, идентификатора, определяет группу, в которой объект должен быть активирован, и вызывает newInstance метод на групповом instantiator активации (удаленный интерфейс ActivationGroup описывается ниже). Активатор инициирует выполнение групп активации по мере необходимости. Например, если группа активации для определенного группового дескриптора уже не выполнится, то активатор породит дочернюю JVM для группы активации, чтобы установить группу в новой JVM.

Активатор ответственен за контроль и обнаружение, когда группы активации перестали работать так, чтобы это могло удалить устарелые удаленные ссылки из своих внутренних таблиц.

package java.rmi.activation;
public interface Activator extends java.rmi.Remote { java.rmi.MarshalledObject activate(ActivationID id, boolean force) throws UnknownObjectException, ActivationException, java.rmi.RemoteException; }
activate метод активирует объект, связанный с идентификатором активации, идентификатором. Если активатор знает объект уже быть активным, и параметр силы является ложью, тупик с "живой" ссылкой сразу возвращается к вызывающей стороне; иначе, если активатор не знает, что соответствующий удаленный объект является активным, или параметр силы true, активатор использует информацию о дескрипторе активации (ранее зарегистрированный, чтобы получить идентификатор), чтобы определить группу (JVM), в которой должен быть активирован объект. Если АктивацияInstantiator соответствие группе объекта уже существует, активатор вызывает instantiator's активации newInstance метод, передавая это идентификатор и дескриптор активации объекта.

Если активация instantiator (группа) для группового дескриптора объекта еще не существует, активатор запускает новое воплощение ActivationInstantiator выполнение (порождая дочерний процесс, например). Когда активатор воссоздает ActivationInstantiator для группы это должно постепенно увеличить число воплощения группы. Отметьте, что число воплощения основано на нуле. Система активации использует числа воплощения, чтобы обнаружить поздно ActivationSystem.activeGroup и ActivationMonitor.inactiveGroup вызовы. Система активации отбрасывает вызовы с более ранним числом воплощения чем текущее число для группы.


Отметьте - активатор должен передать и групповой идентификатор активации, дескриптор, и число воплощения, когда это запускает новую группу активации. Активатор порождает группу активации в отдельной JVM (как отдельный или дочерний процесс, например), и поэтому должен передать информацию, определяющую информацию, необходимую, чтобы создать группу через ActivationGroup.createGroup метод. Как активатор передается, эта информация к порожденному процессу является неуказанной, однако, эта информация могла быть отправлена в форме упорядоченных объектов к стандартному вводу дочернего процесса.
Когда активатор принимает групповой вызов активации назад (через ActivationSystem.activeGroup метод) определение групповой ссылки активации и числа воплощения, активатор может тогда вызвать тот instantiator's активации newInstance метод, чтобы передать каждый запрос активации на ожидании к активации instantiator и возвратить результат (упорядоченная ссылка удаленного объекта, тупик) к каждой вызывающей стороне.

Отметьте, что активатор получает a MarshalledObject вместо a Remote возразите так, чтобы активатор не должен был загрузить код для того объекта, или участвовать в распределенной сборке "мусора" для того объекта. Если бы активатор, сохраненный сильной ссылкой на удаленный объект, активатор тогда препятствовал бы объекту быть собранным "мусор" под нормальным распределенным механизмом сборки "мусора".

activate броски метода ActivationException если активация перестала работать. Активация может перестать работать для множества причин: класс не мог быть найден, с группой активации нельзя было связаться и т.д. activate броски метода UnknownObjectException если никакой дескриптор активации для идентификатора активации, идентификатора, не был ранее зарегистрирован в этом активаторе. RemoteException бросается, если удаленный звонок в активатор перестал работать.


7.4.2 ActivationSystem Интерфейс

ActivationSystem обеспечивает средство для того, чтобы оно зарегистрировало группы, и activatable возражает, чтобы быть активированным в пределах тех групп. ActivationSystem работает в тесном сотрудничестве с обоими Activator, который активирует объекты, зарегистрированные через ActivationSystem, и ActivationMonitor, который получает информацию об активных и неактивных объектах и неактивных группах.
package java.rmi.activation;
public interface ActivationSystem extends java.rmi.Remote { public static final int SYSTEM_PORT = 1098; ActivationGroupID registerGroup(ActivationGroupDesc desc) throws ActivationException, java.rmi.RemoteException; ActivationMonitor activeGroup(ActivationGroupID id, ActivationInstantiator group, long incarnation) throws UnknownGroupException, ActivationException, java.rmi.RemoteException; void unregisterGroup(ActivationGroupID id) throws ActivationException, UnknownGroupException, java.rmi.RemoteException; ActivationID registerObject(ActivationDesc desc) throws ActivationException, UnknownGroupException, java.rmi.RemoteException; void unregisterObject(ActivationID id) throws ActivationException, UnknownObjectException, java.rmi.RemoteException; void shutdown() throws java.rmi.RemoteException; }

Отметьте - Как меры безопасности, все вышеупомянутые методы (registerGroup, activeGroup, unregisterGroup, registerObject, unregisterObject, и shutdown) бросит java.rmi.AccessException, подкласс java.rmi.RemoteException, если вызвано от клиента, который не находится на том же самом узле как система активации.
registerObject метод используется, чтобы зарегистрировать дескриптор активации, desc, и получить идентификатор активации для activatable удаленного объекта. ActivationSystem создает ActivationID (идентификатор активации) для объекта, определенного дескриптором, desc, и записями, в устойчивом хранении, дескрипторе активации и его связанном идентификаторе для более позднего использования. Когда Activator получает activate запрос на определенный идентификатор, это ищет дескриптор активации (зарегистрированный ранее) для указанного идентификатора и использует ту информацию, чтобы активировать объект. Если группа, упомянутая в desc, не регистрируется в этой системе, то метод бросает UnknownGroupException. Если регистрация перестала работать (например, отказ обновления базы данных, и т.д.), то метод бросает ActivationException. Если удаленный вызов перестал работать, то RemoteException бросается.

unregisterObject метод удаляет идентификатор активации, идентификатор, и связанный дескриптор, ранее зарегистрированный в ActivationSystem. После того, как вызов завершается, объект больше не может быть активирован через идентификатор активации объекта. Если объектный идентификатор неизвестен (не зарегистрированный) броски метода UnknownObjectException. Если работа нерегистра перестала работать (например, отказ обновления базы данных, и т.д.), то метод бросает ActivationException. Если удаленный вызов перестал работать, то RemoteException бросается.

registerGroup метод регистрирует группу активации, определенную групповым дескриптором, desc, с системой активации, и возвращается ActivationGroupID присвоенный той группе. Группа активации должна быть зарегистрирована в ActivationSystem прежде, чем объекты могут быть зарегистрированы в пределах той группы. Если групповая регистрация перестала работать, броски метода ActivationException. Если удаленный вызов перестал работать, то RemoteException бросается.

activeGroup метод является вызовом назад от ActivationGroup (с идентификатором, идентификатором), чтобы сообщить системе активации, что группа теперь активна и ActivationInstantiator для той JVM. Этот вызов выполняется внутренне ActivationGroup.createGroup метод, чтобы получить ActivationMonitor то, что групповое использование, чтобы обновить систему относительно объектов и состояние группы (то есть, что группа или объекты в пределах той группы стали неактивными). Если группа не регистрируется, то метод бросает UnknownGroupException. Если группа уже активна, то ActivationException бросается. Если удаленный звонок в системные сбои активации, то RemoteException бросается.

unregisterGroup метод удаляет группу активации с идентификатором, идентификатором, от системы активации. Группа активации заставляет это перезвонить, чтобы сообщить активатору, что группа должна быть уничтожена. Если этот вызов завершается успешно, объекты больше не могут быть зарегистрированы или активированы в пределах группы. Вся информация группы и ее связанных объектов удаляется из системы. Броски метода UnknownGroupException если группа не регистрируется. Если удаленный вызов перестал работать, то RemoteException бросается. Если нерегистр перестал работать, ActivationException бросается (например, отказ обновления базы данных, и т.д.).

shutdown метод корректно завершает (асинхронно) систему активации и все связанные процессы активации (активатор, мониторы и группы). Все группы, порожденные демоном активации, будут уничтожены, и демон активации выйдет. Чтобы завершить работу системного демона активации, rmid, выполните команду:

                rmid -stop [-port num]
Эта команда завершит работу демона активации на указанном порту (если никакой порт не будет определен, то демон на порту по умолчанию будет выключен).


7.4.3 ActivationMonitor Класс

ActivationMonitor является определенным для ActivationGroup и получается, когда о группе сообщают через звонок ActivationSystem.activeGroup (это делается внутренне ActivationGroup.createGroup метод). Группа активации ответственна за информирование ActivationMonitor когда:
a. его объекты становятся активными,

b. его объекты становятся неактивными, или

c. группа в целом становится неактивной.

package java.rmi.activation;
public interface ActivationMonitor extends java.rmi.Remote { public abstract void inactiveObject(ActivationID id) throws UnknownObjectException, RemoteException; public void activeObject(ActivationID id, java.rmi.MarshalledObject mobj) throws UnknownObjectException, java.rmi.RemoteException; public void inactiveGroup(ActivationGroupID id, long incarnation) throws UnknownGroupException, java.rmi.RemoteException; }
Группа активации вызывает свой монитор inactiveObject метод, когда объект в его группе становится неактивным (деактивируется). Группа активации обнаруживает, что объект (что это участвовало в активировании) в его JVM больше не является активным через звонок в группу активации inactiveObject метод.

inactiveObject вызов сообщает ActivationMonitor то, что ссылка удаленного объекта, которую это содержит для объекта с идентификатором активации, идентификатором, больше не действительна. Монитор считает ссылку связанной с идентификатором как устарелая ссылка. Так как ссылку считают устарелой, последующее activate призовите к тем же самым результатам идентификатора активации в оживлении удаленного объекта. Если объект не известен ActivationMonitor, броски метода UnknownObjectException. Если удаленный вызов перестал работать, то RemoteException бросается.

activeObject вызов сообщает ActivationMonitor то, что объект, связанный с идентификатором, является теперь активным. Параметр obj является упорядоченным представлением тупика объекта. ActivationGroup должен сообщить его монитору, если объект в его группе становится активным другими средствами чем быть активированным непосредственно системой (то есть, объект регистрируется и "активировал" себя). Если объектный идентификатор ранее не регистрируется, то метод бросает UnknownObjectException. Если удаленный вызов перестал работать, то RemoteException бросается.

inactiveGroup вызов сообщает монитору, что группа, определенная идентификатором и воплощением, теперь неактивна. Группа будет воссоздана с большим числом воплощения по последующему запросу, чтобы активировать объект в пределах группы. Группа становится неактивной, когда все объекты в группе сообщают, что они неактивны. Если или групповой идентификатор не регистрируется или число воплощения, меньше чем текущее воплощение для группы, то метод бросает UnknownGroupException. Если удаленный вызов перестал работать, то RemoteException бросается.


7.4.4 ActivationInstantiator Класс

ActivationInstantiator ответственно за создание экземпляров объектов activatable. Конкретный подкласс ActivationGroup реализации newInstance метод, чтобы обработать объекты создания в пределах группы.

package java.rmi.activation;
public interface ActivationInstantiator extends java.rmi.Remote { public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, java.rmi.RemoteException; }
Активатор вызывает instantiator's newInstance метод, чтобы воссоздать в той группе объект с идентификатором активации, идентификатором, и дескриптором, desc. instantiator ответственен за: instantiator также ответственен за создание отчетов, когда объекты он создает или активируется, больше не являются активными, так, чтобы он мог сделать соответствующее inactiveObject звонок в ActivationMonitor (см. ActivationGroup класс для большего количества деталей).

Если активизация объектов перестала работать, то newInstance метод бросает ActivationException. Если удаленный вызов перестал работать, то метод бросает RemoteException.


7.4.5 ActivationGroupDesc Класс

Групповой дескриптор активации (ActivationGroupDesc) содержит информацию, необходимую, чтобы создать или воссоздать группу активации, в которой можно активировать объекты в той же самой JVM.

Такой дескриптор содержит:

Класс группы должен быть конкретным подклассом ActivationGroup. Подкласс ActivationGroup создается или воссоздается через ActivationGroup.createGroup статический метод, который вызывает специального конструктора, который берет два параметра:
package java.rmi.activation;
public final class ActivationGroupDesc implements java.io.Serializable { public ActivationGroupDesc(java.util.Properties props, CommandEnvironment env);; public ActivationGroupDesc(String className, String codebase, java.rmi.MarshalledObject data, java.util.Properties props, CommandEnvironment env); public String getClassName(); public String getLocation(); public java.rmi.MarshalledObject getData(); public CommandEnvironment getCommandEnvironment(); public java.util.Properties getPropertiesOverrides(); }
Первый конструктор создает групповой дескриптор, который использует системное значение по умолчанию для групповой реализации и участка кода. Свойства определяют переопределения среды приложения Java (который переопределит системные свойства в групповой JVM реализации). Командная среда может управлять точной командой/опциями, используемой в запуске дочерней JVM, или может быть null принять rmid's значение по умолчанию. Этот конструктор создаст ActivationGroupDesc с a null групповое имя класса, которое указывает на значение по умолчанию системы ActivationGroup реализация.

Второй конструктор является тем же самым как первым, но позволяет спецификацию Properties и CommandEnvironment.

getClassName метод возвращает имя класса группы (возможно null). A null групповое имя класса указывает на значение по умолчанию системы ActivationGroup реализация.

getLocation метод возвращает путь кодовой базы из того, где класс группы может быть загружен.

getData метод возвращает данные инициализации группы в упорядоченной форме.

getCommandEnvironment метод возвращает командную среду (возможно null).

getPropertiesOverrides метод возвращает переопределения свойств (возможно null) для этого дескриптора.


7.4.6 ActivationGroupDesc.CommandEnvironment Класс

CommandEnvironment класс позволяет переопределять системные свойства по умолчанию и определять implemention-определенные опции для ActivationGroup.
public static class CommandEnvironment 
        implements java.io.Serializable
{
        public CommandEnvironment(String cmdpath, String[] args);
        public boolean equals(java.lang.Object);
        public String[] getCommandOptions();
        public String getCommandPath();
        public int hashCode();


}
Конструктор создает a CommandEnvironment с данной командой, cmdpath, и дополнительными параметрами командной строки, args.

equals равенство контента реализаций для объектов командной среды. hashCode метод реализуется соответственно так, чтобы a CommandEnvironment может быть сохранен в хэш-таблице в случае необходимости.

getCommandOptions метод возвращает параметры командной строки объекта среды.

getCommandPath метод возвращает командную строку объекта среды.


7.4.7 ActivationGroupID Класс

Идентификатор для зарегистрированной группы активации служит нескольким целям: ActivationGroupID возвращается из звонка ActivationSystem.registerGroup и используется, чтобы идентифицировать группу в пределах системы активации. Этот групповой идентификатор передают как один из параметров специальному конструктору группы активации, когда группа активации создается или воссоздается.

package java.rmi.activation;
public class ActivationGroupID implements java.io.Serializable { public ActivationGroupID(ActivationSystem system); public ActivationSystem getSystem(); public boolean equals(Object obj); public int hashCode(); }
ActivationGroupID конструктор создает уникальный групповой идентификатор, ActivationSystem которого является системой.

getSystem метод возвращает систему активации для группы.

hashCode метод возвращает хэш-код для идентификатора группы. У двух групповых идентификаторов, которые обращаются к той же самой удаленной группе, будет тот же самый хэш-код.

equals метод сравнивает два групповых идентификатора для равенства контента. Возвраты метода true если оба из следующих условий являются истиной: 1) уникальные идентификаторы эквивалентны (контентом), и 2) система активации, определенная в каждом, обращается к тому же самому удаленному объекту.


7.4.8 ActivationGroup Класс

ActivationGroup ответственно за создание новых экземпляров объектов activatable в его группе, сообщая его ActivationMonitor когда:
a. его объекты становятся активными,

b. его объекты становятся неактивными, или

c. группа в целом становится неактивной.
ActivationGroup первоначально создается одним из нескольких способов: Только активатор может воссоздать ActivationGroup. Икра активатора, столь же необходимая, отдельная JVM (как дочерний процесс, например) для каждой зарегистрированной группы активации и, предписывает, чтобы активация запросила соответствующей группе. Это - реализация, определенная, как порождаются JVM. Группа активации создается через ActivationGroup.createGroup статический метод. createGroup у метода есть два требования к группе, чтобы быть созданным: 1) группа должна быть конкретным подклассом ActivationGroup, и 2) у группы должен быть конструктор, который берет два параметра: Когда создающийся, реализация по умолчанию ActivationGroup установит системные свойства в системные свойства в силе когда ActivationGroupDesc создавался, и установит менеджера безопасности в java.rmi.RMISecurityManager. Если Ваше приложение требует, чтобы некоторые определенные свойства были установлены, когда объекты активируются в группе, приложение должно установить свойства прежде, чем создать любого ActivationDescs (прежде, чем значение по умолчанию ActivationGroupDesc создается).
package java.rmi.activation;
public abstract class ActivationGroup extends UnicastRemoteObject implements ActivationInstantiator { protected ActivationGroup(ActivationGroupID groupID) throws java.rmi.RemoteException; public abstract MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, java.rmi.RemoteException; public abstract boolean inactiveObject(ActivationID id) throws ActivationException, UnknownObjectException, java.rmi.RemoteException; public static ActivationGroup createGroup(ActivationGroupID id, ActivationGroupDesc desc, long incarnation) throws ActivationException; public static ActivationGroupID currentGroupID(); public static void setSystem(ActivationSystem system) throws ActivationException; public static ActivationSystem getSystem() throws ActivationException; protected void activeObject(ActivationID id, java.rmi.MarshalledObject mobj) throws ActivationException, UnknownObjectException, java.rmi.RemoteException; protected void inactiveGroup() throws UnknownGroupException, java.rmi.RemoteException; }
Активатор вызывает группу активации newInstance метод, чтобы активировать объект с дескриптором активации, desc. Группа активации ответственна за: Броски метода ActivationException если экземпляр для данного дескриптора не мог бы быть создан.

Группа inactiveObject метод вызывают косвенно через звонок Activatable.inactive метод. Реализация удаленного объекта должна вызвать Activatable's inactive метод, когда тот объект деактивируется (объект считает, что это больше не активно). Если объект не вызывает Activatable.inactive когда это деактивируется, объект никогда не будет собираться "мусор", так как группа сохраняет сильные ссылки на объекты, которые это создает.

Группа inactiveObject метод неэкспортирует удаленный объект, связанный с идентификатором (только если нет никакого ожидания или выполнения звонков в удаленный объект) со времени выполнения RMI так, чтобы объект больше не мог получить входящие вызовы RMI. Если у объекта в настоящий момент есть или выполняющиеся вызовы на ожидании, inactiveObject возвраты false и никакие меры не предпринимаются.

Если unexportObject работа была успешна (подразумевать, что у объекта нет никакого ожидания или выполнения вызовов), группа сообщает ActivationMonitor (через монитор inactiveObject метод), что удаленный объект не является в настоящий момент активным так, чтобы удаленный объект был оживлен активатором по последующему запросу активации. Если работа была успешна, inactiveObject возвраты true. Работа может все еще успешно выполниться, если объект считают активным ActivationGroup но был уже неэкспортирован.

inactiveObject метод бросает UnknownObjectException если у группы активации нет никакого знания этого объекта (например, об объекте ранее сообщили как неактивный, или объект никогда не активировался через группу активации). Если неактивная работа перестала работать (например, если удаленный звонок в активатор или групповые сбои активации), RemoteException бросается.

createGroup метод создает и устанавливает группу активации для текущей JVM. Группа активации может только быть установлена, если она в настоящий момент не устанавливается. Группа активации устанавливается, используя createGroup метод, когда Activator инициирует воссоздание группы активации, чтобы выполнить поступление activate запросы. Группа должна сначала зарегистрировать групповой дескриптор в ActivationSystem прежде, чем это сможет быть создано через этот метод (передающий это ActivationID полученный из предыдущей регистрации).

Группа, определенная ActivationGroupDesc, desc, должен быть конкретный подкласс ActivationGroup и имейте общедоступного конструктора, который берет два параметра; ActivationGroupID для группы и a MarshalledObject содержа данные инициализации группы (полученный из ActivationGroupDesc). Если ActivationGroupDesc.getClassName возвраты метода null, групповая реализация системы по умолчанию используется. Отметьте: если Ваше приложение создает свою собственную группу активации, группа должна установить менеджера безопасности в конструкторе, или объекты не могут быть активированы в группе.

После того, как группа создается, ActivationSystem сообщается, что группа активна, вызывая activeGroup метод, который возвращается ActivationMonitor для группы. Приложение не должно вызвать activeGroup независимо, так как тот обратный вызов заботится о createGroup метод.

Как только группа создается, последующие звонки currentGroupID метод возвратит идентификатор для этой группы, пока группа не станет неактивной, в который точка currentGroupID метод возвратится null.

Воплощение параметра указывает на текущее групповое воплощение, то есть, число раз, группа была активирована. Число воплощения привыкло в качестве параметра к activeGroup метод, когда-то группа была успешно создана. Число воплощения основано на нуле. Если группа уже существует, или если ошибка происходит во время группового создания, createGroup броски метода ActivationException.

setSystem метод устанавливает ActivationSystem, система, для JVM. Система активации может только быть установлена, если никакая группа не в настоящий момент активна. Если система активации не устанавливается через явный звонок setSystem, тогда getSystem метод попытается получить ссылку на ActivationSystem ища имя java.rmi.activation. ActivationSystem в реестре Активатора. По умолчанию номер порта, используемый, чтобы искать систему активации, определяется ActivationSystem. SYSTEM_PORT. Этот порт может быть переопределен, устанавливая свойство java.rmi.activation.port. Если система активации уже устанавливается когда setSystem вызывается, броски метода ActivationException.

getSystem метод возвращает систему активации для JVM. Система активации может быть установлена setSystem метод (описанный выше).

activeObject метод является защищенным методом, используемым подклассами, чтобы сделать activeObject перезвоните к монитору группы, чтобы сообщить монитору, что удаленный объект с указанным идентификатором активации и чей тупик содержится в mobj, является теперь активным. Вызов просто переводится группе ActivationMonitor.

inactiveGroup метод является защищенным методом, используемым подклассами, чтобы сообщить монитору группы, что группа стала неактивной. Подкласс выполняет этот вызов, когда каждый объект, группа участвовала в активировании в JVM, стал неактивным.


7.4.9 MarshalledObject Класс

A MarshalledObject контейнер для объекта, который позволяет тому объекту быть переданным в качестве параметра в вызове RMI, но откладывает десериализовывать объект в получателе, пока приложение явно не запрашивает объект (через звонок в контейнерный объект). Serializable объект, содержавшийся в MarshalledObject сериализируется и десериализовывается (когда требующийся) с той же самой семантикой как параметры, которые передают в вызовах RMI, что означает что любой удаленный объект в MarshalledObject представляется сериализированным экземпляром его тупика. Объект, содержавший MarshalledObject может быть удаленный объект, неудаленный объект, или весь график удаленных и неудаленных объектов.

Когда объект помещается в MarshalledObject обертка, сериализированная форма объекта аннотируется кодовой базой URL (где класс может быть загружен); аналогично, когда содержавший объект получается от MarshalledObject обертка, если код для объекта не доступен локально, URL (аннотируемый во время сериализации) используется, чтобы определить местоположение и загрузить байт-коды для класса объекта.

package java.rmi;
public final class MarshalledObject implements java.io.Serializable { public MarshalledObject(Object obj) throws java.io.IOException; public Object get() throws java.io.IOException, ClassNotFoundException; public int hashCode(); public boolean equals(); }
MarshalledObject's конструктор берет сериализуемый объект, obj, как его единственный параметр и содержит упорядоченное представление объекта в потоке байтов. Упорядоченное представление объекта сохраняет семантику объектов, которые передают в вызовах RMI: Когда экземпляр класса MarshalledObject пишется a java.io.ObjectOutputStream, упорядоченная форма содержавшего объекта (создаваемый во время конструкции) пишется потоку; таким образом только поток байтов сериализируется.

Когда a MarshalledObject читается из a java.io.ObjectInputStream, содержавший объект не десериализовывается в конкретный объект; объект остается в его упорядоченном представлении до упорядоченного объекта get метод вызывают.

get метод всегда восстанавливает новую копию содержавшего объекта от его упорядоченной формы. Внутреннее представление десериализовывается с семантикой, используемой для того, чтобы неупорядочить параметры для вызовов RMI. Так, десериализация представления объекта загружает код класса (если не доступный локально) использование аннотации URL, встроенной в сериализованный поток для объекта.

hashCode из упорядоченного представления объекта то же самое как объект, который передают конструктору. equals метод возвратит true, если упорядоченное представление сравниваемых объектов будет эквивалентно. Сравнение, которое равняется использованию, игнорирует аннотацию кодовой базы класса, означая, что два объекта эквивалентны, если у них есть то же самое сериализированное представление за исключением кодовой базы каждого класса в сериализированном представлении.



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Copyright 1997, 2010, Oracle и/или его филиалы. Все права защищены.