Распределенные объектные системы разрабатываются, чтобы поддерживать долговечные персистентные объекты., Учитывая, что эти системы будут составлены из многих тысяч (возможно, миллионы) таких объектов, было бы неблагоразумно для объектных реализаций стать активным и остаться активным, приводя ценные системные ресурсы в рабочее состояние, в течение неопределенных сроков времени. Кроме того, клиенты нуждаются в возможности сохранить персистентные ссылки на объекты так, чтобы передача среди объектов могла быть восстановлена после системного катастрофического отказа, так как обычно ссылка на распределенный объект допустима только, в то время как объект является активным.
Активизация объектов является механизмом для того, чтобы обеспечить персистентные ссылки на объекты и управлять выполнением объектных реализаций. В RMI активация позволяет объектам начать выполнение на как - необходимое основание. Когда к activatable удаленному объекту получают доступ (через вызов метода), если тот удаленный объект в настоящий момент не выполняется, система инициирует выполнение объекта в соответствующей JVM.
7.1.1 Терминология
Активный объект является удаленным объектом, который инстанцируют и экспортируется в JVM на некоторой системе. Пассивный объект является тем, который еще не инстанцируют (или экспортируется) в JVM, но который может быть принесен в активное состояние. Преобразование пассивного объекта в активный объект является процессом, известным как активация. Активация требует, чтобы объект был связан с JVM, которая может повлечь за собой загрузку class для того объекта в JVM и объекта, восстанавливающего его постоянное состояние (если любой).
В системе RMI мы используем ленивую активацию. Ленивая активация задерживает активирование объекта до первого использования клиента (то есть, первый вызов метода).
7.1.2 Ленивая Активация
Ленивая активация удаленных объектов реализуется, используя дающую сбой удаленную ссылку (иногда называемый блоком отказа). Дающая сбой удаленная ссылка на удаленный объект "дает сбой в" ссылке активного объекта после первого вызова метода к объекту. Каждая дающая сбой ссылка поддерживает обоих персистентный дескриптор (идентификатор активации) и переходная удаленная ссылка на целевой удаленный объект. Идентификатор активации удаленного объекта содержит достаточную информацию, чтобы вовлечь третью сторону в активирование объекта. Переходная ссылка является фактической "живой" ссылкой на активный удаленный объект, который может использоваться, чтобы связаться с выполняющимся объектом.
В дающей сбой ссылке, если живая ссылка на удаленный объект null, целевой объект, как известно, не является активным. После вызова метода дающая сбой ссылка (для того объекта) участвует в протоколе активации, чтобы получить "живую" ссылку, которая является удаленной ссылкой (такой как одноадресная передача удаленная ссылка) для недавно активированного объекта. Как только дающая сбой ссылка получает живую ссылку, дающая сбой ссылка вперед вызовы метода к базовой удаленной ссылке который, поочередно, вперед вызов метода к удаленному объекту.
В более конкретных сроках тупик удаленного объекта содержит "дающий сбой" удаленный ссылочный тип, который содержит обоих:
идентификатор активации для удаленного объекта, и
"живая" ссылка (возможно null) содержа "активный" удаленный ссылочный тип удаленного объекта (например, удаленный ссылочный тип с одноадресной семантикой).
Отметьте - система RMI сохраняет "самое большее однажды" семантика для удаленных вызовов. Другими словами звонок в activatable или одноадресный удаленный объект отправляется самое большее однажды. Таким образом, если звонок в удаленный объект перестал работать (обозначенный a RemoteException будучи брошенным), клиенту можно гарантировать это удаленный метод, выполняемый не больше, чем однажды (и возможно нисколько). СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Copyright 1997, 2010, Oracle и/или его филиалы. Все права защищены.