Spec-Zone .ru
спецификации, руководства, описания, API
|
Activatable
Это учебное руководство описывает, как реализовать activatable удаленный объект, но отличается от учебного руководства Используя Активацию: Расширение Activatable
в этом реализация для удаленного объекта не расширяет класс java.rmi.activation.Activatable
. Вместо этого реализация использует статический метод класса Activatable
экспортировать activatable удаленный объект. Это учебное руководство использует a Setup
программа (описанный в учебном руководстве Используя Активацию: Setup
Программа), который регистрирует информацию о activatable удаленном объекте с JavaTM Удаленный Вызов метода (Java RMI) системный демон активации (rmid
) и затем связывает тупик для того удаленного объекта в rmiregistry
так, чтобы клиенты могли искать это. Можно хотеть считать то учебное руководство перед этим.
У этого учебного руководства есть следующие шаги:
Setup
программаФайлы, необходимые для этого учебного руководства:
MyRemoteInterface.java
- простой удаленный интерфейсDoesNotExtendActivatable.java
- "activatable" реализация удаленного интерфейсаClient.java
- клиент, который использует удаленный интерфейсclient.policy
- файл политики безопасности для клиентаЕсть несколько основных способов реализовать activatable удаленный объект. Это учебное руководство описывает, как реализовать activatable удаленный объект при использовании статического метода класса java.rmi.activation.Activatable
экспортировать activatable удаленный объект.
Удаленный объект активируется, когда клиент вызывает удаленный метод на тупик для activatable удаленного объекта. Тупик для activatable удаленного объекта содержит ID активации удаленного объекта и информацию о том, как связаться с Java системный демон активации RMI (rmid
) для удаленного объекта. Если тупик не может соединиться с последним - известный адрес (то есть, узел/порт) для удаленного объекта, тупик свяжется с активатором удаленного объекта (rmid
) активировать объект. Когда rmid
получает запрос активации, он запускает группу активации удаленного объекта (или контейнер) VM, если группа уже не выполняется, и затем rmid
просит группа делать экземпляр удаленного объекта. Как только группа создает удаленный объект, она возвращает тупик удаленного объекта rmid
который, поочередно, возвращает фактический тупик тупику инициирования так, чтобы тупик инициирования мог обновить свою информацию о том, как связаться с удаленным объектом в будущем.
Прежде, чем любая эта активация может иметь место, приложение должно зарегистрировать информацию о activatable удаленных объектах, которые это должно использовать. Следующее отдельное учебное руководство описывает информацию, необходимую к activatate удаленный объект и как зарегистрировать эту информацию в rmid
:
В этом примере activatable удаленный объект реализует следующий удаленный интерфейс examples.activation.MyRemoteInterface
:
package examples.activation; import java.rmi.*; public interface MyRemoteInterface extends Remote { Object remoteMethod(Object obj) throws RemoteException; }
Класс реализации, examples.activation.DoesNotExtendActivatable
, поскольку activatable удаленный объект следующие:
package examples.activation; import java.rmi.*; import java.rmi.activation.*; public class DoesNotExtendActivatable implements MyRemoteInterface { private final ActivationID id; public DoesNotExtendActivatable(ActivationID id, MarshalledObject data) throws RemoteException { this.id = id; Activatable.exportObject(this, id, 0); } public Object remoteMethod(Object obj) { return obj; } }
Класс DoesNotExtendActivatable
реализует удаленный интерфейс MyRemoteInterface
, но не расширяет класса.
Класс DoesNotExtendActivatable
объявляет специального конструктора "активации", которого группа активации вызывает, чтобы создать экземпляр во время процесса активации. Этот специальный конструктор берет два параметра:
ActivationID
, идентификатор для activatable удаленного объекта. Когда приложение регистрирует дескриптор активации в rmid
, rmid
присваивает это ID активации, который обращается к информации, связанной с дескриптором. Этот тот же самый ID активации (также содержавшийся в тупике удаленного объекта) передают этому конструктору, когда удаленный объект активируется.MarshalledObject
это содержит данные инициализации, предварительно зарегистрированные в rmid
. Эти данные инициализации могут быть именем файла для постоянного состояния объекта, например. Этот пример не требует, чтобы никакие данные инициализации создали удаленный объект.Конструктор сохраняет ID активации в частном поле, и затем вызывает статический метод Activatable.exportObject
, передача реализации непосредственно (this
), ID активации, и номер порта 0
, указание, что объект должен быть экспортирован на анонимном порту TCP. В то время как эта реализация фактически не использует ID активации, это хранит, этот пример сохраняет ID активации, чтобы демонстрировать то, что могла бы сделать типичная реализация объекта activatable. Такой реализации, возможно, понадобится ID активации в будущем, чтобы деактивировать объект, например.
Наконец, класс реализует единственный метод удаленного интерфейса, remoteMethod
возвратить объект, который передают как параметр.
Client
программа ищет тупик удаленного объекта (тот, который реализует удаленный интерфейс MyRemoteInterface
) в реестре на узле, предоставленном как дополнительный первый параметр, и затем, вызывает тупик remoteMethod
метод. Клиентская программа является тем же самым как той, описанной в учебном руководстве Используя Активацию: Расширение Activatable
. Для получения дополнительной информации см. следующий раздел того учебного руководства
Исходные файлы для этого примера могут быть скомпилированы следующим образом:
javac -d implDir MyRemoteInterface.java DoesNotExtendActivatable.java javac -d clientDir MyRemoteInterface.java Client.java
то, где implDir является целевым каталогом, чтобы поместить класс реализации, регистрирует файлы класса в, и clientDir является целевым каталогом, чтобы вставить файлы класса клиента.
Setup
программаКак только Ваша фаза реализации полна, Вы должны зарегистрировать информацию об объекте activatable, таким образом, клиент может использовать это. Setup
программа, описанная учебным руководством Используя Активацию: Setup
Программа, регистрирует дескриптор активации для объекта activatable с rmid
, и затем связывает тупик удаленного объекта в rmiregistry
так, чтобы клиенты могли искать это.
Работать Setup
программа для этого примера, см., что раздел Запускается rmid
, rmiregistry
, и Setup
программа в учебном руководстве по программе установки, которое описывает, как запустить rmid
, rmiregistry
, и Setup
программа непосредственно.
После того, как Вы работаете rmid
и rmiregistry
как проинструктировано в Setup
учебное руководство, Вы должны будете работать Setup
программа, чтобы зарегистрировать дескриптор активации для activatable возражает, что реализует класс examples.activation.DoesNotExtendActivatable
. Следующая командная строка работает Setup
программа, предоставляя соответствующий файл URL для каждой кодовой базы использовала:
java -cp setupDir:implDir \ -Djava.security.policy=setup.policy \ -Djava.rmi.server.codebase=file:/implDir/ \ -Dexamples.activation.setup.codebase=file:/setupDir/ \ -Dexamples.activation.impl.codebase=file:/impDir/ \ -Dexamples.activation.name=examples.activation.MyRemoteInterface \ -Dexamples.activation.policy=group.policy \ examples.activation.Setup examples.activation.DoesNotExtendActivatable
где:
Setup
класс программыSetup
программаОтметьте что examples.activation.file
системное свойство не должно быть определено, потому что DoesNotExtendActivatable
класс реализации не использует это. Также отметьте, что у каждого файла URL выше есть необходимая запаздывающая наклонная черта. Примеры группы и файлов политики установки, подходящих для этого учебного руководства, описываются в учебном руководстве по установке, и также упоминаются ниже:
Вывод от Setup
программа должна быть похожей на это:
Activation group descriptor registered. Activation descriptor registered. Stub bound in registry.
Как только Вы успешно зарегистрировали дескриптор активации для a DoesNotExtendActivatable
реализация, можно выполнить клиентскую программу, которая, во время ее первого выполнения, вызовет объект activatable активироваться.
Клиентская программа является тем же самым как той, описанной в учебном руководстве Используя Активацию: Расширение Activatable
. Для получения дополнительной информации см. следующий раздел того учебного руководства: