Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Используя Активацию: Setup Программа

Это учебное руководство описывает, как записать программу, которая регистрирует дескриптор активации для удаленного объекта с JavaTM Удаленный Вызов метода (Java RMI) системный демон активации (rmid) и затем связывает тупик для того удаленного объекта в rmiregistry так, чтобы клиенты могли искать это.

У этого учебного руководства есть следующие шаги:

Файлы, необходимые для этого учебного руководства:

Реализуйте Setup программа

Setup программа, реализованная классом examples.activation.Setup, регистрирует дескриптор активации в rmid включать будущей активации объекта, определенного тем дескриптором активации. Эта программа не создает экземпляр удаленного объекта, но вместо этого регистрирует тупик удаленного объекта в rmiregistry так, чтобы клиенты могли искать это. Это Setup программа должна быть выполнена до выполнения любого из клиентов, описанных в других учебных руководствах по активации.

Setup программа использует много системных свойств, чтобы настроить информацию, которая регистрируется в rmid и rmiregistry. Программа также берет единственный параметр командной строки, который определяет полностью определенное имя пакета класса реализации для activatable зарегистрированного удаленного объекта. Setup программа выполняется следующим образом:

java -cp classpath \
     -Djava.security.policy=setup.policy        \
     -Djava.rmi.server.codebase=codebase         \
     -Dexamples.activation.setup.codebase=setupCodebase  \
     -Dexamples.activation.impl.codebase=implCodebase \
     -Dexamples.activation.name=name             \
     [-Dexamples.activation.file=filename]       \
     [-Dexamples.activation.policy=group.policy] \
     examples.activation.Setup implClass

где:

Следующее является файлом политики в качестве примера для Setup программа:

  grant codeBase "${examples.activation.setup.codebase}" {

    // permissions to read system properties required by setup program
    permission java.util.PropertyPermission "examples.activation.impl.codebase","read";
    permission java.util.PropertyPermission "examples.activation.policy","read";
    permission java.util.PropertyPermission "examples.activation.file","read";
    permission java.util.PropertyPermission "examples.activation.name","read";

    // permission to connect to the activation system and the registry
    permission java.net.SocketPermission "*:1098-1099","connect";
};

Кодовой базой, которой предоставляют полномочия, является URL, определяющий расположение Setup класс (ы) реализации программы. Этот URL является значением examples.activation.setup.codebase системное свойство, которое определяется когда Setup программа выполняется. Setup программа нуждается в следующих полномочиях:

Есть несколько шагов к записи этого Setup программа:

Setup у класса есть помехи main метод, который выполняет все вышеупомянутые шаги. Но прежде, чем сделать так, main метод устанавливает a SecurityManager и получает единственный параметр командной строки, который определяет полностью определенное имя пакета класса реализации для activatable удаленного объекта. Остальная часть шагов описывается ниже. См. Setup.java для полного исходного кода.

Создайте групповой дескриптор активации

Прежде, чем приложение регистрирует информацию об определенном activatable удаленном объекте, это сначала должно зарегистрировать информацию о группе активации, в которой будет содержаться объект. Группа активации является контейнерной виртуальной машиной (VM) для ряда activatable объекты. Каждая группа активации управляет выполнением одного или более объектов activatable. Групповой дескриптор активации содержит информацию, что система активации должна запустить групповой VM активации. Приложение может зарегистрировать групповой дескриптор активации в системе активации rmid получить групповой ID активации, чтобы использовать для объекта activatable, или приложения может использовать групповой ID активации, полученный из предыдущей групповой регистрации.

Групповой дескриптор активации, экземпляр класса java.rmi.activation.ActivationGroupDesc, может быть создан несколькими способами. Это учебное руководство использует двух конструкторов параметра ActivationGroupDesc(Properties,CommandEnvironment). Properties карта содержит переопределения для системных свойств в группе активации VM. Для этого учебного руководства группа активации VM нуждается в следующих системных определенных свойствах:

java.security.policy свойство определяется examples.activation.policy системное свойство, и значения по умолчанию к файлу называют group.policy который, практически, будет в рабочем каталоге где rmid выполняется. java.class.path свойство определяется как no_classpath. examples.activation.impl.codebase и examples.activation.file свойства определяются их текущей стоимостью (соответственно), определяются когда Setup выполнения программы.

Групповой дескриптор создается следующим образом:

String policy =
    System.getProperty("examples.activation.policy", "group.policy");
String implCodebase =
    System.getProperty("examples.activation.impl.codebase");
String filename =
    System.getProperty("examples.activation.file", "");

Properties props = new Properties();
props.put("java.security.policy", policy);
props.put("java.class.path", "no_classpath");
props.put("examples.activation.impl.codebase", implCodebase);
if (filename != null && !filename.equals("")) {
    props.put("examples.activation.file", filename);
}

ActivationGroupDesc groupDesc = new ActivationGroupDesc(props, null);

Следующее является примером group.policy файл, который предоставляет соответствующие полномочия для примеров активации:

grant codeBase "${examples.activation.impl.codebase}" {
    
    // permission to read and write object's file
    permission java.io.FilePermission "${examples.activation.file}","read,write";
    
    // permission to listen on an anonymous port
    permission java.net.SocketPermission "*:1024-","accept";
};

Кодовой базой, которой предоставляют полномочия, является URL, определяющий расположение классов реализации activatable объекта. Этот URL является значением examples.activation.impl.codebase системное свойство, которое будет определено в групповом VM активации. Объект activatable в группе нуждается в двух полномочиях:

Зарегистрируйте групповой дескриптор

Затем, Setup программа должна зарегистрировать групповой дескриптор активации в системе активации, чтобы получить ID группы, экземпляр класса java.rmi.activation.ActivationGroupID. Класс java.rmi.activation.ActivationGroup имеет статический метод getSystem для того, чтобы получить тупик для системы активации. Setup программа вызывает удаленный метод системы активации registerGroup, передача группового дескриптора, создаваемого выше, чтобы зарегистрировать группу активации:
ActivationGroupID groupID = 
    ActivationGroup.getSystem().registerGroup(groupDesc);

Создайте дескриптор активации

Как только групповой ID активации получается, Setup программа может зарегистрировать дескриптор активации. У дескриптора активации есть четыре основных сведения:

В этом примере групповой ID активации является тем, полученным выше; имя класса реализации является именем класса, implClass, предоставленный как параметр командной строки Setup программа; расположение (URL) определяется системным свойством examples.activation.impl.codebase; и, данные инициализации (который является дополнительным) являются именем файла, определенным системным свойством examples.activation.file.

Дескриптор активации создается следующим образом:

MarshalledObject data = null;
if (filename != null && !filename.equals("")) {
    data = new MarshalledObject(filename);
}

ActivationDesc desc =
    new ActivationDesc(groupID, implClass, implCodebase, data);

Зарегистрируйте дескриптор активации

Затем, Setup программа должна зарегистрировать дескриптор активации в системе активации. Класс Activatable имеет статический метод удобства, register, это регистрирует дескриптор активации в системе активации и возвращает тупик для объекта activatable, определенного дескриптором.

Remote stub = Activatable.register(desc);

Отметьте: register метод пытается загрузить тупиковый класс для класса реализации, чтобы создать тупиковый экземпляр. Если Ваш объект activatable должен поддерживать пред5.0 клиентов, Вы должны будете использовать rmic предварительно генерировать тупиковый класс для класса реализации. Если Ваш объект activatable не должен поддерживать пред5.0 клиентов, то нет никакой потребности предварительно генерировать тупиковый класс для класса реализации. Если register метод неспособен загрузить предварительно сгенерированный тупиковый класс, он будет использовать экземпляр динамически сгенерированного прокси-класса, который реализует все интерфейсы класса реализации. В последнем случае register потребности метода загружают класс реализации, чтобы определить удаленные интерфейсы, которые реализует класс реализации. Так, register у метода есть небольшое поведенческое различие, в зависимости от того, используется ли предварительно сгенерированный или динамически сгенерированный тупиковый класс.

Свяжите тупик удаленного объекта в a rmiregistry

Наконец, тупик удаленного объекта связывается с именем в реестре, работающем на порту по умолчанию 1099. Имя определяется системным свойством examples.activation.name.

String name = System.getProperty("examples.activation.name");
LocateRegistry.getRegistry().rebind(name, stub);

Скомпилируйте исходный файл

Исходный файл для этого примера может быть скомпилирован следующим образом:

javac -d setupDir Setup.java
где setupDir является корневым целевым каталогом, чтобы вставить файлы класса.

Запустить rmid, rmiregistry, и Setup программа

Выполнять это Setup программа, Вы должны будете сделать следующее:

Запустить rmid

Запускаться rmid, работайте rmid команда на узле сервера. Эта команда не должна произвести вывод, если она выполняется с файлом политики безопасности как определено ниже. Для получения дополнительной информации см. документацию инструментов для rmid [Солярис, Windows].

Например, в Операционной системе Соляриса:

rmid -J-Djava.security.policy=rmid.policy \
     -J-Dexamples.activation.policy=group.policy &
         

Или, на платформах Windows:

start rmid -J-Djava.security.policy=rmid.policy \
           -J-Dexamples.activation.policy=group.policy

где:

Файл политики безопасности для rmid полномочия предоставлений для rmid выполнить определенные команды и использовать определенные параметры командной строки в запускающейся группе активации VMs. Например, пользователь мог бы предоставить, что определенные полномочия запустили группу активации VM с одного или более системных свойств или другого java параметры командной строки. Этот пример позволяет rmid запустить группу активации VMs, которые определяют системные свойства java.security.policy, java.class.path, examples.activation.impl.codebase, и examples.activation.file. Следующий файл политики безопасности в качестве примера предоставляет, что разрешение запускает группу активации VM с этих определенных определенных свойств:

grant { 
    // allow activation groups to use certain system properties
    permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.security.policy=${examples.activation.policy}";
    permission com.sun.rmi.rmid.ExecOptionPermission "-Djava.class.path=no_classpath";
    permission com.sun.rmi.rmid.ExecOptionPermission "-Dexamples.activation.impl.codebase=*";
    permission com.sun.rmi.rmid.ExecOptionPermission "-Dexamples.activation.file=*";
};

Первое ExecOptionPermission предоставление разрешения ограничивает java.security.policy системное свойство, чтобы быть файлом, определенным системным свойством examples.activation.policy, определенный, когда rmid выполняется. Следующее предоставление разрешения позволяет группе определять системное свойство java.class.path как no_classpath, фиктивный путь к классу, который препятствует тому, чтобы группа имела допустимый путь к классу. Следующее предоставление разрешения позволяет группе определять системное свойство examples.activation.impl.codebase быть любым значением. Заключительное предоставление разрешения позволяет examples.activation.file системное свойство, чтобы быть любым значением.

Запустить rmiregistry

Чтобы запустить реестр, работайте rmiregistry команда на узле сервера. Эта команда не производит вывода (когда успешный), и обычно выполняется в фоновом режиме. Для получения дополнительной информации см. документацию инструментов для rmiregistry [Солярис, Windows].

Например, в Операционной системе Соляриса:

rmiregistry &

Или, на платформах Windows:

start rmiregistry 

По умолчанию реестр работает на порту TCP 1099. Чтобы запустить реестр на различном порту, определите номер порта из командной строки. Например, чтобы запустить реестр на порту 2001 на платформе Windows:

start rmiregistry 2001

Отметьте: Удостоверьтесь это rmiregistry не имеет никаких классов реализации в ее пути к классу, чтобы препятствовать тому, чтобы это загрузило любые классы из своего пути локального класса.

Если реестр будет работать на порту кроме 1099, Вы должны будете определить номер порта в звонках LocateRegistry.getRegistry в Setup программа, так же как любые клиенты тот доступ этот реестр. Например, если реестр работает на порту 2001 в этом примере, звонке getRegistry был бы:

Registry registry = LocateRegistry.getRegistry(2001);

Также отметьте это, если Вы используете порт реестра кроме 1099, Вы должны будете также изменить Setup и клиентские файлы политики программы, чтобы предоставить, что разрешение соединяется с портом реестра.

Работайте Setup программа

Запускаться Setup программа, выполненная Setup класс используя java команда следующим образом:

java -cp setupDir:implDir \
     -Djava.security.policy=setup.policy        \
     -Djava.rmi.server.codebase=codebase         \
     -Dexamples.activation.setup.codebase=setupCodebase       \
     -Dexamples.activation.impl.codebase=implCodebase \
     -Dexamples.activation.name=name             \
     [-Dexamples.activation.file=file]       \
     [-Dexamples.activation.policy=group.policy] \
     examples.activation.Setup implClass

где:

Отметьте: Если Вы используете файл, URL для любой из упомянутых выше кодовых баз, удостоверяются, что каждый файл, у URL есть запаздывающая наклонная черта, или кодовая база, будет недопустим.

Вывод от Setup программа должна быть похожей на это:

Activation group descriptor registered.
Activation descriptor registered.
Stub bound in registry.

Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами