Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
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
вызовы. Система активации отбрасывает вызовы с более ранним числом воплощения чем текущее число для группы.
ActivationGroup.createGroup
метод. Как активатор передается, эта информация к порожденному процессу является неуказанной, однако, эта информация могла быть отправлена в форме упорядоченных объектов к стандартному вводу дочернего процесса. ActivationSystem.activeGroup
метод) определение групповой ссылки активации и числа воплощения, активатор может тогда вызвать тот instantiator's активации newInstance
метод, чтобы передать каждый запрос активации на ожидании к активации instantiator и возвратить результат (упорядоченная ссылка удаленного объекта, тупик) к каждой вызывающей стороне. Отметьте, что активатор получает a MarshalledObject
вместо a Remote
возразите так, чтобы активатор не должен был загрузить код для того объекта, или участвовать в распределенной сборке "мусора" для того объекта. Если бы активатор, сохраненный сильной ссылкой на удаленный объект, активатор тогда препятствовал бы объекту быть собранным "мусор" под нормальным распределенным механизмом сборки "мусора".
activate
броски метода ActivationException
если активация перестала работать. Активация может перестать работать для множества причин: класс не мог быть найден, с группой активации нельзя было связаться и т.д. activate
броски метода UnknownObjectException
если никакой дескриптор активации для идентификатора активации, идентификатора, не был ранее зарегистрирован в этом активаторе. RemoteException
бросается, если удаленный звонок в активатор перестал работать.
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]Эта команда завершит работу демона активации на указанном порту (если никакой порт не будет определен, то демон на порту по умолчанию будет выключен).
ActivationMonitor
КлассActivationMonitor
является определенным для ActivationGroup
и получается, когда о группе сообщают через звонок ActivationSystem.activeGroup
(это делается внутренне ActivationGroup.createGroup
метод). Группа активации ответственна за информирование ActivationMonitor
когда: 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
бросается.
ActivationInstantiator
КлассActivationInstantiator
ответственно за создание экземпляров объектов activatable. Конкретный подкласс ActivationGroup
реализации newInstance
метод, чтобы обработать объекты создания в пределах группы.
package java.rmi.activation;Активатор вызывает instantiator's
public interface ActivationInstantiator extends java.rmi.Remote { public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) throws ActivationException, java.rmi.RemoteException; }
newInstance
метод, чтобы воссоздать в той группе объект с идентификатором активации, идентификатором, и дескриптором, desc. instantiator ответственен за: getClassName
метод,getLocation
метод),ActivationID
, и MarshalledObject
содержа объектно-специфичные данные инициализации, иMarshalledObject
содержа удаленный объект это создало.inactiveObject
звонок в ActivationMonitor
(см. ActivationGroup
класс для большего количества деталей). Если активизация объектов перестала работать, то newInstance метод бросает ActivationException
. Если удаленный вызов перестал работать, то метод бросает RemoteException
.
ActivationGroupDesc
КлассActivationGroupDesc
) содержит информацию, необходимую, чтобы создать или воссоздать группу активации, в которой можно активировать объекты в той же самой JVM.
null
указывает на значение по умолчанию ActivationGroup
реализация),ActivationGroup
. Подкласс ActivationGroup
создается или воссоздается через ActivationGroup.createGroup
статический метод, который вызывает специального конструктора, который берет два параметра:
package java.rmi.activation;Первый конструктор создает групповой дескриптор, который использует системное значение по умолчанию для групповой реализации и участка кода. Свойства определяют переопределения среды приложения Java (который переопределит системные свойства в групповой JVM реализации). Командная среда может управлять точной командой/опциями, используемой в запуске дочерней JVM, или может быть
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(); }
null
принять rmid
's значение по умолчанию. Этот конструктор создаст ActivationGroupDesc
с a null
групповое имя класса, которое указывает на значение по умолчанию системы ActivationGroup
реализация. Второй конструктор является тем же самым как первым, но позволяет спецификацию Properties
и CommandEnvironment
.
getClassName
метод возвращает имя класса группы (возможно null
). A null
групповое имя класса указывает на значение по умолчанию системы ActivationGroup
реализация.
getLocation
метод возвращает путь кодовой базы из того, где класс группы может быть загружен.
getData
метод возвращает данные инициализации группы в упорядоченной форме.
getCommandEnvironment
метод возвращает командную среду (возможно null
).
getPropertiesOverrides
метод возвращает переопределения свойств (возможно null
) для этого дескриптора.
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
метод возвращает командную строку объекта среды.
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) система активации, определенная в каждом, обращается к тому же самому удаленному объекту.
ActivationGroup
КлассActivationGroup
ответственно за создание новых экземпляров объектов activatable в его группе, сообщая его ActivationMonitor
когда: ActivationGroup
первоначально создается одним из нескольких способов: ActivationDesc
для объекта, илиActivationGroup.createGroup
метод, илиActivationGroupDesc
был только зарегистрирован.ActivationGroup
. Икра активатора, столь же необходимая, отдельная JVM (как дочерний процесс, например) для каждой зарегистрированной группы активации и, предписывает, чтобы активация запросила соответствующей группе. Это - реализация, определенная, как порождаются JVM. Группа активации создается через ActivationGroup.createGroup
статический метод. createGroup
у метода есть два требования к группе, чтобы быть созданным: 1) группа должна быть конкретным подклассом ActivationGroup
, и 2) у группы должен быть конструктор, который берет два параметра:
Когда создающийся, реализация по умолчанию ActivationGroup
установит системные свойства в системные свойства в силе когда ActivationGroupDesc
создавался, и установит менеджера безопасности в java.rmi.RMISecurityManager
. Если Ваше приложение требует, чтобы некоторые определенные свойства были установлены, когда объекты активируются в группе, приложение должно установить свойства прежде, чем создать любого ActivationDesc
s (прежде, чем значение по умолчанию 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. Группа активации ответственна за: getClassName
метод,getLocation
метод),ActivationID
, и a MarshalledObject
содержа данные инициализации объекта, и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, стал неактивным.
MarshalledObject
Класс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: get
метод), байт-коды для каждого класса могут быть расположены и загружены, иMarshalledObject
пишется a java.io.ObjectOutputStream
, упорядоченная форма содержавшего объекта (создаваемый во время конструкции) пишется потоку; таким образом только поток байтов сериализируется. Когда a MarshalledObject
читается из a java.io.ObjectInputStream
, содержавший объект не десериализовывается в конкретный объект; объект остается в его упорядоченном представлении до упорядоченного объекта get
метод вызывают.
get
метод всегда восстанавливает новую копию содержавшего объекта от его упорядоченной формы. Внутреннее представление десериализовывается с семантикой, используемой для того, чтобы неупорядочить параметры для вызовов RMI. Так, десериализация представления объекта загружает код класса (если не доступный локально) использование аннотации URL, встроенной в сериализованный поток для объекта.
hashCode
из упорядоченного представления объекта то же самое как объект, который передают конструктору. equals
метод возвратит true, если упорядоченное представление сравниваемых объектов будет эквивалентно. Сравнение, которое равняется использованию, игнорирует аннотацию кодовой базы класса, означая, что два объекта эквивалентны, если у них есть то же самое сериализированное представление за исключением кодовой базы каждого класса в сериализированном представлении.