Pull to refresh

RESTup: RESTful java-сервер консольных приложений или опять о вызове shell из Oracle

Завязка не оригинальна: в процессе разработки приложения на 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 с тестовым эхо-сервисом:

<?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.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings