RESTup: RESTful java-сервер консольных приложений или опять о вызове shell из Oracle
Invite pending
Завязка не оригинальна: в процессе разработки приложения на Oracle-XE (Linux) возникла необходимость вызова консольной команды проверки пакета XML-файлов checkPFR (Windows). Действо заключалась в передаче файлов, вызове команды и получении, в моем случае, одного из двух файлов-протоколов проверки.
Вы скажете: DBMS_SCHEDULER в руки, некоторое количество грантов и все срастется, но Oracle-XE ограничен в возможности запуска удаленных команд, выгрузке данных в файловую систему,…
Зато имеет эффективный интерфейс: APEX_WEB_SERVICE.MAKE_REST_REQUEST!
С учетом того, что консольных программ преобразующих, проверяющих, создающих файлы — великое множество, возникло непреодолимое желание прикрутить технологию RESTful к этому счастью. Т.е. создать легкий сервер для распределенного использования в Intra-сети.
Создание сервера консольных приложений свелось к реализации RESTful API:
— получить список сервисов сервера (GET), по уникальному имени определить URI сервиса;
— создать задание сервису, получить URI для файлов задания (POST);
— передать файл(ы) задания (PUT);
— исполнить параметризованное задание, получить URI хранилища файлов-результатов (POST);
— получить список URI файлов-результатов (GET);
— получить файл результата (GET);
— удалить задание и связанные файлы (DELETE).
Это — общая схема. Сервис может не потреблять и не продуцировать файлы, не использовать параметры, но код завершения — изволь вернуть.
Для воплощения затеи выбрал JavaSE (javac 1.6) за кроссплатформенность и аскетичность. В итоге, с помощью WEB-сообщества и текстового редактора, создан pure java продукт, предлагаемый оценке Хабровчан. Исходники, документация, сервер RESTup, PL/SQL API и примеры сервисов (Linux/Windows) в пакете. Здесь постараюсь быть кратким:
Функциональность сервера прозрачна на примере конфигурации для платформы Windows с тестовым эхо-сервисом:
Атрибуты сервера определяют:
— место размещения заданий;
— срок «жизни» заданий с момента создания;
— максимальное количество запущенных внешних команд, при достижении которого, задание стоит в очереди на исполнение в пределах срока «жизни».
Атрибуты сервиса определяют:
— имя (идентификатор) сервиса;
— внешнюю команду с макроподстановками и параметры задания по-умолчанию (если таковые имеются);
— ограничения сервиса по расширениям файлов, размеру задания (файлов), времени исполнения внешней команды;
— аннотацию сервиса.
PL/SQL интерфейс — пакет restup_web_service является надстройкой над APEX_WEB_SERVICE API.
Совместим с Oracle-XE 11g. Special thanks to AScheffer (Oracle community).
Примеры сервисов базируются на свободно распространяемом программном обеспечении и содержат:
— преобразование офисных документов в PDF, HTML, ...;
— OCR;
— checkPFR.
Вы скажете: DBMS_SCHEDULER в руки, некоторое количество грантов и все срастется, но Oracle-XE ограничен в возможности запуска удаленных команд, выгрузке данных в файловую систему,…
Зато имеет эффективный интерфейс: APEX_WEB_SERVICE.MAKE_REST_REQUEST!
С учетом того, что консольных программ преобразующих, проверяющих, создающих файлы — великое множество, возникло непреодолимое желание прикрутить технологию RESTful к этому счастью. Т.е. создать легкий сервер для распределенного использования в Intra-сети.
Создание сервера консольных приложений свелось к реализации RESTful API:
— получить список сервисов сервера (GET), по уникальному имени определить URI сервиса;
— создать задание сервису, получить URI для файлов задания (POST);
— передать файл(ы) задания (PUT);
— исполнить параметризованное задание, получить URI хранилища файлов-результатов (POST);
— получить список URI файлов-результатов (GET);
— получить файл результата (GET);
— удалить задание и связанные файлы (DELETE).
Это — общая схема. Сервис может не потреблять и не продуцировать файлы, не использовать параметры, но код завершения — изволь вернуть.
Для воплощения затеи выбрал JavaSE (javac 1.6) за кроссплатформенность и аскетичность. В итоге, с помощью WEB-сообщества и текстового редактора, создан pure java продукт, предлагаемый оценке Хабровчан. Исходники, документация, сервер RESTup, PL/SQL API и примеры сервисов (Linux/Windows) в пакете. Здесь постараюсь быть кратким:
Функциональность сервера прозрачна на примере конфигурации для платформы Windows с тестовым эхо-сервисом:
<?xml version="1.0" encoding="Windows-1251" ?>
<server spoolDir="\spool" jobsLifeTime="240" maxJobsStarted="2" >
<service name="Echo" fileExts="" debug="on" jobCommand="CMD /C xcopy %inFilesDir%%jobParams% %outFilesDir% /E/Y/Q" jobDefaults="*.*" jobMaxSize="160000" commandTimeout="20">
Эхо-сервис. Возвращает файл(ы) задания по маске, передаваемой в качестве параметра.
</service>
</server>
Атрибуты сервера определяют:
— место размещения заданий;
— срок «жизни» заданий с момента создания;
— максимальное количество запущенных внешних команд, при достижении которого, задание стоит в очереди на исполнение в пределах срока «жизни».
Атрибуты сервиса определяют:
— имя (идентификатор) сервиса;
— внешнюю команду с макроподстановками и параметры задания по-умолчанию (если таковые имеются);
— ограничения сервиса по расширениям файлов, размеру задания (файлов), времени исполнения внешней команды;
— аннотацию сервиса.
PL/SQL интерфейс — пакет restup_web_service является надстройкой над APEX_WEB_SERVICE API.
Совместим с Oracle-XE 11g. Special thanks to AScheffer (Oracle community).
Примеры сервисов базируются на свободно распространяемом программном обеспечении и содержат:
— преобразование офисных документов в PDF, HTML, ...;
— OCR;
— checkPFR.