Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
ActivationDesc
) может быть зарегистрирован одним из нескольких способов: register
метод класса Activatable
, илиActivatable
класс, илиActivatable
's первый или второй exportObject
метод.ActivationDesc
КлассActivationDesc
содержит информацию, необходимую, чтобы активировать объект. Это содержит групповой идентификатор активации объекта, имя класса для объекта, путь кодовой базы (или URL), из которого код объекта может быть загружен, и a MarshalledObject
это может содержать объектно-специфичные данные инициализации, используемые во время каждой активации. С дескриптором, зарегистрированным в системе активации, консультируются (во время процесса активации), чтобы получить информацию, чтобы воссоздать или активировать объект. MarshalledObject
в дескрипторе объекта передается как второй параметр конструктору удаленного объекта для объекта использовать во время активации.
package java.rmi.activation;Первый конструктор для
public final class ActivationDesc implements java.io.Serializable { public ActivationDesc(String className, String codebase, java.rmi.MarshalledObject data) throws ActivationException; public ActivationDesc(String className, String codebase, java.rmi.MarshalledObject data, boolean restart) throws ActivationException; public ActivationDesc(ActivationGroupID groupID, String className, String codebase, java.rmi.MarshalledObject data, boolean restart); public ActivationDesc(ActivationGroupID groupID, String className, String codebase, java.rmi.MarshalledObject data); public ActivationGroupID getGroupID(); public String getClassName(); public String getLocation(); public java.rmi.MarshalledObject getData() public boolean getRestartMode(); }
ActivationDesc
создает объектный дескриптор для объекта, класс которого является именем класса, которое может быть загружено из пути кодовой базы, и чья информацией об инициализации, в упорядоченной форме, являются данные. Если эта форма конструктора используется, групповые значения по умолчанию идентификатора объекта к текущему идентификатору для ActivationGroup
для этой JVM. Все объекты с тем же самым ActivationGroupID
активируются в той же самой JVM. Если текущая группа неактивна ActivationException
бросается. Если groupID null
, IllegalArgumentException
бросается. Второй конструктор для ActivationDesc
создает объектный дескриптор тем же самым способом, как первый конструктор кроме дополнительного параметра, перезапуска, должен быть предоставлен. Если объект требует службы перезапуска, означая, что объект будет перезапущен автоматически, когда активатор будет перезапущен (в противоположность тому, чтобы быть активированным лениво по требованию), перезапуск должен быть true
. Если перезапуск false
, объект просто активируется по требованию (через удаленный вызов метода).
Третий конструктор для ActivationDesc
создает объектный дескриптор для объекта, групповой идентификатор которого является groupID, имя класса которого является именем класса, которое может быть загружено из пути кодовой базы, и чья информацией об инициализации являются данные. Все объекты с тем же самым groupID активируются в той же самой JVM.
Четвертый конструктор для ActivationDesc
создает объектный дескриптор тем же самым способом как третий конструктор, но позволяет режиму перезапуска быть определенным. Если объект требует службы перезапуска (как определено выше), перезапуск должен быть true
.
getGroupID
метод возвращает групповой идентификатор для объекта, определенного дескриптором. Группа обеспечивает способ агрегировать объекты в единственную виртуальную машину Java.
getClassName
метод возвращает имя класса для объекта, определенного дескриптором активации.
getLocation
метод возвращает путь кодовой базы из того, где класс объекта может быть загружен.
getData
метод возвращает "упорядоченный объект", содержащий инициализацию (активация) данные для объекта, определенного дескриптором.
getRestartMode
возвраты метода true
если режим перезапуска включается для этого объекта, иначе это возвращает false.
ActivationID
КлассActivationID
) содержит несколько сведений, необходимых для того, чтобы активировать объект:
Идентификатор активации для объекта может быть получен, регистрируя объект с системой активации. Регистрация выполняется несколькими способами (также отмеченный выше): Activatable.register
метод, илиActivatable
конструктор, который и регистрирует и экспортирует объект, илиActivatable.exportObject
метод, этот метод и регистрирует и экспортирует объект.package java.rmi.activation;Конструктор для
public class ActivationID implements java.io.Serializable { public ActivationID(Activator activator); public Remote activate(boolean force) throws ActivationException, UnknownObjectException, java.rmi.RemoteException; public boolean equals(Object obj); public int hashCode(); }
ActivationID
берет единственный параметр, активатор, который определяет удаленную ссылку на активатор, ответственный за активирование объекта, связанного с этим идентификатором активации. Экземпляр ActivationID
глобально уникально. activate
метод активирует объект, связанный с идентификатором активации. Если параметр силы является истиной, активатор рассматривает любую кэшируемую ссылку для удаленного объекта как устарелую, таким образом вынуждая активатор связаться с группой, активируя объект. Если сила является ложью, то возврат кэшируемого значения является приемлемым. Если активация перестала работать, ActivationException
бросается. Если объектный идентификатор не известен активатору, то метод бросает UnknownObjectException
. Если удаленный звонок в сбои активатора, то RemoteException
бросается.
equals
метод реализует равенство контента. Это возвращается true
если все поля эквивалентны (или идентичный или эквивалентный согласно каждому полю Object.equals
семантика). Если p1 и p2 являются экземплярами класса ActivationID
, hashCode
метод возвратит то же самое значение если p1.equals(p2)
возвраты true
.
Activatable
КлассActivatable
класс оказывает поддержку для удаленных объектов, которые требуют персистентного доступа в течение долгого времени, и это может быть активировано системой. Класс Activatable
основной API, который разработчики должны использовать, чтобы реализовать и управлять объектами activatable. Отметьте, что Вы должны первый показ системный демон активации, rmid
, прежде, чем объекты могут быть зарегистрированы и/или активированы.
package java.rmi.activation;Реализация для activatable удаленного объекта может или, возможно, не расширяет класс
public abstract class Activatable extends java.rmi.server.RemoteServer { protected Activatable(String codebase, java.rmi.MarshalledObject data, boolean restart, int port) throws ActivationException, java.rmi.RemoteException; protected Activatable(String codebase, java.rmi.MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, java.rmi.RemoteException; protected Activatable(ActivationID id, int port) throws java.rmi.RemoteException; protected Activatable(ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws java.rmi.RemoteException; protected ActivationID getID(); public static Remote register(ActivationDesc desc) throws UnknownGroupException, ActivationException, java.rmi.RemoteException; public static boolean inactive(ActivationID id) throws UnknownObjectException, ActivationException, java.rmi.RemoteException; public static void unregister(ActivationID id) throws UnknownObjectException, ActivationException, java.rmi.RemoteException; public static ActivationID exportObject(Remote obj, String codebase, MarshalledObject data, boolean restart, int port) throws ActivationException, java.rmi.RemoteException; public static ActivationID exportObject(Remote obj, String codebase, MarshalledObject data, boolean restart, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws ActivationException, java.rmi.RemoteException; public static Remote exportObject(Remote obj, ActivationID id, int port) throws java.rmi.RemoteException; public static Remote exportObject(Remote obj, ActivationID id, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws java.rmi.RemoteException; public static boolean unexportObject(Remote obj, boolean force) throws java.rmi.NoSuchObjectException; }
Activatable
. Реализация удаленного объекта, которая действительно расширяется Activatable
класс наследовал соответствующие определения hashCode
и equals
методы от суперкласса java.rmi.server.RemoteObject
. Так, две ссылки удаленного объекта, которые обращаются к тому же самому Activatable
удаленный объект будет эквивалентен ( equals
метод возвратит true). Кроме того, экземпляр класса Activatable
будет "равняется" соответствующему тупиковому объекту для экземпляра (то есть, Object.equals
метод возвратит true если вызвано с соответствующим тупиковым объектом для реализации как параметр, и наоборот). Activatable
класс используется, чтобы зарегистрировать и экспортировать объект на указанном порту (анонимный порт выбирается, если порт является нулем). Путь URL объекта для того, чтобы загрузить его код класса является кодовой базой, и его данные инициализации являются данными. Если перезапуск true
, объект будет перезапущен автоматически, когда активатор будет перезапущен и если группа отказывает. Если перезапуск false
, объект будет активирован по требованию (через удаленный вызов метода объекта). Конкретный подкласс Activatable
класс должен вызвать этого конструктора, чтобы зарегистрировать и экспортировать объект во время начальной конструкции. Как побочный эффект конструкции объекта activatable, удаленный объект и "регистрируется" в системе активации и "экспортируется" (на анонимном порту, если порт является нулем) ко времени выполнения RMI так, чтобы это было доступно, чтобы принять входящие вызовы от клиентов.
Броски конструктора ActivationException
регистрируя объект в системных сбоях активации. RemoteException
бросается, экспортируя объект в сбои времени выполнения RMI.
Второй конструктор является тем же самым как первым Activatable
конструктор, но позволяет спецификацию фабрик сокета клиента и сервера, используемых, чтобы связаться с этим объектом activatable. См. раздел в приблизительно "Фабриках Сокета RMI" для деталей.
Третий конструктор используется, чтобы активировать и экспортировать объект (с ActivationID
, идентификатор) на указанном порту. Конкретный подкласс Activatable
класс должен вызвать этого конструктора, когда сам объект активируется через его специального конструктора "активации", параметры которого должны быть:
RemoteException
экспортируя объект в сбои времени выполнения RMI. Четвертый конструктор является тем же самым как третий конструктор, но позволяет спецификацию фабрик сокета клиента и сервера, используемых, чтобы связаться с этим объектом activatable.
getID
метод возвращает идентификатор активации объекта. Метод защищается так, чтобы только подклассы могли получить идентификатор объекта. Идентификатор объекта используется, чтобы сообщить об объекте как неактивном или незарегистрировать дескриптор активации объекта.
register
регистры метода, с системой активации, объектным дескриптором, desc, для activatable удаленного объекта так, чтобы это могло быть активировано по требованию. Этот метод используется, чтобы зарегистрировать объект activatable, не имея необходимость сначала создавать объект. Этот метод возвращается Remote
тупик для объекта activatable так, чтобы это могло быть сохранено и вызвано в более позднее время, таким образом вынуждая объект быть созданным/активированным впервые. Броски метода UnknownGroupException
если групповой идентификатор в desc не регистрируется в системе активации. ActivationException
бросается, если система активации не работает. Наконец, RemoteException
бросается, если удаленный звонок в систему активации перестал работать.
inactive
метод используется, чтобы сообщить системе, что объект с соответствующим идентификатором активации в настоящий момент неактивен. Если объект, как в настоящий момент известно, является активным, объект неэкспортируется со времени выполнения RMI (только если нет никакого ожидания или выполнения вызовов) так, что это больше не может получить входящие вызовы. Этот вызов также сообщает этой JVM ActivationGroup
то, что объект неактивен; группа, поочередно, сообщает ActivationMonitor
. Если вызов завершается успешно, последующий активируются, запросы к активатору вызовут объект оживить. inactive
возвраты метода true
если объект успешно неэкспортировался (подразумевать, что у него не было никакого ожидания или выполнения вызовов в это время), и возвраты false
если объект не мог бы быть неэкспортирован из-за ожидания, или происходящий вызывает. Броски метода UnknownObjectException
если объект не известен (это может уже быть неактивно); ActivationException
бросается, если группа не активна; a RemoteException
бросается, если вызов, сообщающий монитору, перестал работать. Работа может все еще успешно выполниться, если объект считают активным, но уже неэкспортировал себя.
unregister
метод отменяет предыдущую регистрацию для дескриптора активации, связанного с идентификатором. Объект больше не может быть активирован через тот идентификатор. Если объектный идентификатор неизвестен системе активации, UnknownObjectException
бросается. Если система активации не работает, ActivationException
бросается. Если удаленный звонок в системные сбои активации, то a RemoteException
бросается.
Первое exportObject
метод может быть вызван явно объектом "activatable", который не расширяется Activatable
класс, чтобы обоим
Это exportObject
метод возвращает идентификатор активации, полученный из регистрации дескриптора, desc, с системой активации. Если группа активации не активна в JVM, то ActivationException
бросается. Если объектная регистрация или сбои экспорта, то RemoteException
бросается.
Этот метод не должны вызвать, если obj расширяется Activatable
, начиная с первого Activatable
конструктор вызывает этот метод.
Второе exportObject
метод является тем же самым, поскольку первое кроме этого позволяет спецификацию фабрик сокета клиента и сервера, используемых, чтобы связаться с объектом activatable.
Третье exportObject
метод экспортирует "activatable" удаленный объект (не обязательно типа Activatable
) с идентификатором, идентификатором, ко времени выполнения RMI, чтобы сделать объект, obj, доступный, чтобы получить входящие вызовы. Объект экспортируется на анонимном порту, если порт является нулем.
Во время активации, этого exportObject
метод должен быть вызван явно объектом "activatable", который не расширяется Activatable
класс. Нет никакой потребности в объектах, которые действительно расширяются Activatable
класс, чтобы вызвать этот метод непосредственно; этот метод вызывает третий конструктор выше (который подкласс должен вызвать от его специального конструктора активации).
Это exportObject
метод возвращается Remote
тупик для объекта activatable. Если объектный экспорт перестал работать, то метод бросает RemoteException
.
Четвертое exportObject
метод является тем же самым как третьим, но позволяет спецификацию фабрик сокета клиента и сервера, используемых, чтобы связаться с этим объектом activatable.
unexportObject
метод делает удаленный объект, obj, недоступным входящим вызовам. Если параметр силы true
, объект насильственно неэкспортируется, даже если там ожидают, призывает к удаленному объекту, или у удаленного объекта все еще есть происходящие вызовы. Если параметр силы false
, объект только неэкспортируется, если нет никакого ожидания, или происходящий призывает к объекту. Если объект успешно неэкспортируется, время выполнения RMI удаляет объект из своих внутренних таблиц. Удаление объекта от использования RMI этим насильственным способом может оставить клиенты, содержащие устарелые удаленные ссылки на удаленный объект. Этот метод броски java.rmi.NoSuchObjectException
если объект ранее не экспортировался во время выполнения RMI.
Activatable
класс), должен определить специального общедоступного конструктора, который берет два параметра, его идентификатор активации типа ActivationID
, и его данные активации, a java.rmi.MarshalledObject
, предоставленный в дескрипторе активации используется во время регистрации. Когда группа активации активирует удаленный объект в своей JVM, она создает объект через этого специального конструктора (описанный более подробно ниже). Реализация удаленного объекта может использовать данные активации, чтобы инициализировать себя подходящим способом. Удаленный объект может также хотеть сохранить свой идентификатор активации, так, чтобы он мог сообщить группе активации, когда это становится неактивным (через звонок Activatable.
inactive
метод). Первый и второй конструктор формируется для Activatable
используются, чтобы и зарегистрировать и экспортировать объект activatable на указанном порту. Этот конструктор должен использоваться, первоначально создавая объект; третья форма конструктора используется, оживляя объект.
Конкретный подкласс Activatable
должен вызвать первую или вторую форму конструктора, чтобы зарегистрировать и экспортировать объект во время начальной конструкции. Этот конструктор сначала создает дескриптор активации (ActivationDesc
) с именем класса объекта, предоставленной кодовой базой объекта и данными, и чья группа активации является группой по умолчанию для JVM. Затем, конструктор регистрирует этот дескриптор в значении по умолчанию ActivationSystem
. Наконец, конструктор экспортирует объект activatable во время выполнения RMI на определенном порту (если порт является нулем, то анонимный порт выбирается), и сообщает об объекте как activeObject
к локальной переменной ActivationGroup
. Если ошибка происходит во время регистрации или экспорта, бросков конструктора RemoteException
. Отметьте, что конструктор также инициализирует ActivationID
(полученный через регистрацию), так, чтобы последующие звонки в защищенный метод getID
возвратит идентификатор активации объекта.
Третий конструктор формируется для Activatable
используется, чтобы экспортировать объект на указанном порту. Конкретный подкласс Activatable
должен вызвать третью форму конструктора, когда она активируется через собственного конструктора "активации" объекта, который берет два параметра:
ActivationGroup
то, что объект является активным, так как это ActivationGroup
это активирует объект и знает, что это уже активно. Следующее является примером интерфейса удаленного объекта, Server
, и реализация, ServerImpl
, это расширяется Activatable
класс:
package examples; public interface Server extends java.rmi.Remote { public void doImportantStuff() throws java.rmi.RemoteException; } public class ServerImpl extends Activatable implements Server { // Constructor for initial construction, registration and export public ServerImpl(String codebase, MarshalledObject data) throws ActivationException, java.rmi.RemoteException { // register object with activation system, then // export on anonymous port super(codebase, data, false, 0); } // Constructor for activation and export; this constructor // is called by the ActivationInstantiator.newInstance // method during activation in order to construct the object. public ServerImpl(ActivationID id, MarshalledObject data) throws java.rmi.RemoteException { // call the superclass's constructor in order to // export the object to the RMI runtime. super(id, 0); // initialize object (using data, for example) } public void doImportantStuff() { ... } }Объект ответственен за экспорт себя. Конструкторы для
Activatable
заботьтесь об экспорте объекта ко времени выполнения RMI с живым ссылочным типом a UnicastRemoteObject
, так объектное расширение реализации Activatable
не должен волноваться о детали экспорта объекта явно (кроме вызова соответствующего конструктора суперклассов). Если объектная реализация не расширяет класс Activatable
, объект должен экспортировать объект явно через звонок в один из Activatable.exportObject
статические методы. В следующем примере, ServerImpl
не расширяется
Activatable
, а скорее другой класс, таким образом, ServerImpl
ответственно за экспорт себя во время начальной конструкции и активации. Следующие шоу определения класса ServerImpl
's конструктор инициализации и ее специальный конструктор "активации" и соответствующий вызов, чтобы экспортировать объект в пределах каждого конструктора:
package examples;
public class ServerImpl extends SomeClass implements Server { // constructor for initial creation public ServerImpl(String codebase, MarshalledObject data) throws ActivationException, java.rmi.RemoteException { // register and export the object Activatable.exportObject(this, codebase, data, false, 0); } // constructor for activation public ServerImpl(ActivationID id, MarshalledObject data) throws java.rmi.RemoteException { // export the object Activatable.exportObject(this, id, 0); } public void doImportantStuff() { ... } }
ActivationDesc
) для объекта. Дескриптор активации содержит всю необходимую информацию так, чтобы система активации могла активировать объект при необходимости. Дескриптор активации для экземпляра класса examples.ServerImpl
может быть зарегистрирован следующим способом (игнорируемая обработка исключений): Server server;
ActivationDesc desc;
String codebase = "http://zaphod/codebase/";
MarshalledObject data = new MarshalledObject("some data");
desc = new ActivationDesc( "examples.ServerImpl", codebase, data);
server = (Server)Activatable.register(desc);
register
вызовите возвраты a Remote
тупик, который является тупиком для examples.ServerImpl
объект и реализации тот же самый набор удаленных интерфейсов это examples.ServerImpl
реализации (то есть, тупик реализует удаленный интерфейс Server
). Этот тупиковый объект (выше, бросок и присвоенный серверу) можно передать в качестве параметра в любом вызове метода, ожидая объект, который реализует examples.Server
удаленный интерфейс.