|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Setup ПрограммаЭто учебное руководство описывает, как записать программу, которая регистрирует дескриптор активации для удаленного объекта с JavaTM Удаленный Вызов метода (Java RMI) системный демон активации (rmid) и затем связывает тупик для того удаленного объекта в rmiregistry так, чтобы клиенты могли искать это.
У этого учебного руководства есть следующие шаги:
Setup программаrmid, rmiregistry, и Setup программаSetup.java - основной Setup программаsetup.policy - файл политики безопасности для Setup программаrmid.policy - файл политики безопасности для rmidgroup.policy - файл политики безопасности для группы активацииSetup программа Setup программа, реализованная class examples.activation.Setup, регистрирует дескриптор активации в rmid включать будущей активации объекта, определенного тем дескриптором активации. Эта программа не создает экземпляр удаленного объекта, но вместо этого регистрирует тупик удаленного объекта в rmiregistry так, чтобы клиенты могли искать это. Это Setup программа должна быть выполнена до выполнения любого из клиентов, описанных в других учебных руководствах по активации.
Setup программа использует много системных свойств, чтобы настроить информацию, которая регистрируется в rmid и rmiregistry. Программа также берет единственный параметр командной строки, который определяет полностью определенное имя пакета реализации class для 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 программа и классы реализацииSetup программаSetup программа class (используемый в предоставлении полномочий к Setup программа в setup.policy файле)group.policy), иСледующее является файлом политики в качестве примера для 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 реализация программы class. Этот URL является значением examples.activation.setup.codebase системное свойство, которое определяется когда Setup программа выполняется. Setup программа нуждается в следующих полномочиях:
java.util.PropertyPermission - считать различные системные свойства, требуемые Setup программаjava.net.SocketPermission - соединяться с системой активации (порт 1098) зарегистрировать дескриптор активации, и соединиться с реестром (порт 1099) связывать тупик activatable объекта с именемЕсть несколько шагов к записи этого Setup программа:
rmiregistry Setup У class есть помехи main метод, который выполняет все вышеупомянутые шаги. Но прежде, чем сделать так, main метод устанавливает a SecurityManager и получает единственный параметр командной строки, который определяет полностью определенное имя пакета реализации class для activatable удаленного объекта. Остальная часть шагов описывается ниже. См. Setup.java для полного исходного кода.
Прежде, чем приложение регистрирует информацию об определенном activatable удаленном объекте, это сначала должно зарегистрировать информацию о группе активации, в которой будет содержаться объект. Группа активации является контейнерной виртуальной машиной (VM) для ряда activatable объекты. Каждая группа активации управляет выполнением одного или более объектов activatable. Групповой дескриптор активации содержит информацию, что система активации должна запустить групповой VM активации. Приложение может зарегистрировать групповой дескриптор активации в системе активации rmid получить групповой ID активации, чтобы использовать для объекта activatable, или приложения может использовать групповой ID активации, полученный из предыдущей групповой регистрации.
Групповой дескриптор активации, экземпляр class java.rmi.activation.ActivationGroupDesc, может быть создан несколькими способами. Это учебное руководство использует двух конструкторов параметра ActivationGroupDesc(Properties,CommandEnvironment). Properties карта содержит переопределения для системных свойств в группе активации VM. Для этого учебного руководства группа активации VM нуждается в следующих системных определенных свойствах:
java.security.policy - файл политики безопасности группыjava.class.path - фиктивный путь class, чтобы препятствовать тому, чтобы группа активации загрузила классы реализации из локального пути classexamples.activation.impl.codebase - расположение классов реализации, который использование файла политики группы предоставить полномочияexamples.activation.file - файл containg постоянное состояние объекта 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 в группе нуждается в двух полномочиях:
java.io.FilePermission - считать и записать файл, содержащий постоянное состояние activatable объектаjava.net.SocketPermission - чтобы экспортировать activatable возражают, чтобы принять соединения анонимный портSetup программа должна зарегистрировать групповой дескриптор активации в системе активации, чтобы получить ID группы, экземпляр class java.rmi.activation.ActivationGroupID. class java.rmi.activation.ActivationGroup имеет статический метод getSystem для того, чтобы получить тупик для системы активации. Setup программа вызывает удаленный метод системы активации registerGroup, передача группового дескриптора, создаваемого выше, чтобы зарегистрировать группу активации:
ActivationGroupID groupID =
ActivationGroup.getSystem().registerGroup(groupDesc);
Как только групповой ID активации получается, Setup программа может зарегистрировать дескриптор активации. У дескриптора активации есть четыре основных сведения:
В этом примере групповой ID активации является тем, полученным выше; имя class реализации является именем class, 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 программа должна зарегистрировать дескриптор активации в системе активации. class Activatable имеет статический метод удобства, register, это регистрирует дескриптор активации в системе активации и возвращает тупик для объекта activatable, определенного дескриптором.
Remote stub = Activatable.register(desc);
Отметьте: register метод пытается загрузить тупиковый class для реализации class, чтобы создать тупиковый экземпляр. Если Ваш объект activatable должен поддерживать пред5.0 клиентов, Вы должны будете использовать rmic предварительно генерировать тупиковый class для реализации class. Если Ваш объект activatable не должен поддерживать пред5.0 клиентов, то нет никакой потребности предварительно генерировать тупиковый class для реализации class. Если register метод неспособен загрузить предварительно сгенерированный тупиковый class, он будет использовать экземпляр динамически сгенерированного прокси class, который реализует все интерфейсы реализации class. В последнем случае register потребности метода загружают реализацию class, чтобы определить удаленные интерфейсы, которые реализует реализация class. Так, register у метода есть небольшое поведенческое различие, в зависимости от того, используется ли предварительно сгенерированный или динамически сгенерированный тупиковый class.
rmiregistryНаконец, тупик удаленного объекта связывается с именем в реестре, работающем на порту значения по умолчанию 1099. Имя определяется системным свойством examples.activation.name.
String name = System.getProperty("examples.activation.name");
LocateRegistry.getRegistry().rebind(name, stub);
Исходный файл для этого примера может быть скомпилирован следующим образом:
javac -d setupDir Setup.javaгде setupDir является корневым целевым каталогом, чтобы вставить файлы class.
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
где:
rmidrmid's файл политикиФайл политики безопасности для 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, фиктивный путь class, который препятствует тому, чтобы группа имела допустимый путь class. Следующее предоставление разрешения позволяет группе определять системное свойство examples.activation.impl.codebase быть любым значением. Заключительное предоставление разрешения позволяет examples.activation.file системное свойство, чтобы быть любым значением.
rmiregistryЧтобы запустить реестр, работайте rmiregistry команда на узле сервера. Эта команда не производит вывода (когда успешный), и обычно выполняется в фоновом режиме. Для получения дополнительной информации см. документацию инструментов для rmiregistry [Солярис, Windows].
Например, в Операционной системе Соляриса:
rmiregistry &
Или, на платформах Windows:
start rmiregistry
По умолчанию реестр работает на порту TCP 1099. Чтобы запустить реестр на различном порту, определите номер порта из командной строки. Например, чтобы запустить реестр на порту 2001 на платформе Windows:
start rmiregistry 2001
Отметьте: Удостоверьтесь это rmiregistry не имеет никаких классов реализации в ее пути class, чтобы препятствовать тому, чтобы это загрузило любые классы из своего локального пути class.
Если реестр будет работать на порту кроме 1099, Вы должны будете определить номер порта в звонках LocateRegistry.getRegistry в Setup программа, так же как любые клиенты тот доступ этот реестр. Например, если реестр работает на порту 2001 в этом примере, звонке getRegistry был бы:
Registry registry = LocateRegistry.getRegistry(2001);
Также отметьте это, если Вы используете порт реестра кроме 1099, Вы должны будете также изменить Setup и клиентские файлы политики программы, чтобы предоставить, что разрешение соединяется с портом реестра.
Setup программаЗапускаться Setup программа, выполненная Setup class используя 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
где:
Setup class программыSetup программаSetup программа class (используемый в предоставлении полномочий к Setup программа в setup.policy файле)data в дескрипторе активации объекта (никакое значение по умолчанию)group.policy), иОтметьте: Если Вы используете файл, URL для любой из упомянутых выше кодовых баз, удостоверяются, что каждый файл, у URL есть запаздывающая наклонная черта, или кодовая база, будет недопустим.
Вывод от Setup программа должна быть похожей на это:
Activation group descriptor registered. Activation descriptor registered. Stub bound in registry.