JNI - Java Native Interface. Позволяет Java-программе вызывать программы, написанные на платформенных языках программирования. Т.е. в Java-программе мы обращаемся к двоичной библиотеке (самостоятельно написанной, например на C), в которой реализован код, вызывающий функции RACF.
Добавлено (30.08.2010, 16:04) --------------------------------------------- сразу же вопрос на засыпку - как вызвать из c/c++ ( желательно ++) функции RACF.и вообще возможно ли это - на картинке в методичке http://twitpic.com/2jn87o нет самого RACF Правда JNI использовать в JEE IBM не рекомендует...
API RACF для C не существует. Посему: 1. Из Си создаем TSO среду(IKJEFT01) и вызываем RACF TSO команды или 2. Пишем сразу на асме, благо там все просто(RACROUTE) и в книгах есть примеры. (что нетипично обычно для IBM)
зы: но мне кажется лучше использовать тот заточенный жава класс указанный выше.
Появилась пара свободных минут, решил поэкспериментировать.
У класса com.ibm.jzos.Exec есть метод main, что позволяет его попробовать без написания собственного кода. С помощью этого класса можно выполнить практически любую команду OMVS. Однако, команды RACF являются командами TSO. Пробовал варианты на команде LISTUSER.
Запуск напрямую "LISTUSER" дал IOException, ибо нет такой программы в OMVS.
Запуск через "/bin/tso LISTUSER" дал ошибку, ошибка такая: IKJ56652I You attempted to run an authorized command or program. This is not supported under the Dynamic TSO Environment.
сразу же вопрос на засыпку - как вызвать из c/c++ ( желательно ++) функции RACF.и вообще возможно ли это
Напрямую - никак. JNI умеет взаимодействовать с C/C++, а вот из него уже можно вызывать практически любой модуль системы. Т.е. путь будет примерно такой для данного случая:
Java-класс, который обращается к функции на C.
Модуль на C, который будет вызываться через JNI и в свою очередь вызывать ассемблерный модуль.
Небольшой модуль на ассемблере, который получает параметры по соглашениям LE, вызывает системный сервис RACF R_admin(IRRSEQ00), передает текст команды, получает результаты и коды возврата, и возвращает результаты по соглашениям LE.
PS : OMVS-команда "rac" по сути является "враппером" системного сервиса RACF R_admin.
Сообщение отредактировал EHabarov - Ср, 01.09.2010, 14:47
Интересно. А почему в книге говорится, что этот сервис для Тиволи? У вас работает без Тиволи в системе?
Вопрос про R_admin ? В книге "z/OS Security Server RACF Callable Services" (SA22-7691), где описан "R_admin (IRRSEQ00): RACF administration API", такого не нашел. Единственным пререквизитом R_admin, судя по документации, является наличие запущенной подсистемы RACF.
Именно в этой книге в топике 2.0 Chapter 2. Callable services descriptions есть табличка и там: Callable service : "R_admin (IRRSEQ00): RACF For use by : Tivoli⌐
В то время как у нормальных людей там же - For use by : MVS BCP, z/OS UNIX и так далее...
Ага, увидел. Причем эта строка присутствует даже в книжке по OS/390 V2.10, и похоже с тех пор не менялась. Что имели в виду, внося в таблицу такую запись, совершенно непонятно. В описании самой функции никаких ссылок на Tivoli нет. Сама по себе функция не зависит от продуктов линейки Tivoli. Видимо изначально ввели эту функцию чтобы обеспечить работоспособность какого-то из Тиволевых продуктов.
Самый простой способ убедиться что это работает - скачать двоичный модуль утилиты "rac", скопировать его в USS, и выполнить допустимую команду RACF с помощью этой утилиты. По описанию в ReadMe, сам модуль не изменялся с 2000 года, когда впервые был выложен в доступ.
EHabarov У класса com.ibm.jzos.Exec есть метод main, что позволяет его попробовать без написания собственного кода. С помощью этого класса можно выполнить практически любую команду OMVS. Однако, команды RACF являются командами TSO. Пробовал варианты на команде LISTUSER.
Запуск через "rac" (The rac command) отлично сработал.
правильно ли понимаю, что пакет com.ibm.jzos.* должен быть на мф и все программы так же на нем нужно компилировать? И rac запускался через Exec?
правильно ли понимаю, что пакет com.ibm.jzos.* должен быть на мф и все программы так же на нем нужно компилировать? И rac запускался через Exec?
1. Да, пакет com.ibm.jzos.* идет в составе IBM JDK for z/OS. Функционал появился в JDK 1.4.2, начиная с SR6, в JDK 5.0, начиная с SR3, в JDK 6.0 изначально. JZOS Function now available in IBM SDK 1.4.2 SR6 and 5.0 SR3 2. Java-программы МОЖНО компилировать в среде z/OS, но это не является обязательным. Откомпилировать java-код можно на любой другой платформе, скопировав и добавив в Classpath компиляции архив ibmjzos.jar ($JAVA_HOME/lib/ext/ibmjzos.jar), содержащий классы пакета com.ibm.jzos.*. Понятно, что ИСПОЛНЯТЬСЯ код должен в среде z/OS. 3. Да, rac запускался через класс Exec, что вообще то видно из приведенной команды.
опять вопросы java на нашем мф по ходу версии 1.4. это раз. пакет вроде есть(/usr/lpp/java/J1.4/lib/ext/ibmjzos.jar), но не могу скачать его - при передаче из unix в zos пишет что строки обрезаются - не могу найти какой нд нужно делать, что бы без изменений передать - моя терминальная программа(vista tn3270) только из z/os может забирать данные - не могу проверить, есть ли там необходимый класс. А скачать пакет необходимо, что бы потом в сервлете использовать и упаковать его для вебсферы. Ну и так же вопрос - нужно ли будет обновлять java?