Пример создания работы по расписанию и локальной службы¶
Автор: Виктор Абливанов
Компания: JaNet systems
Ниже приведена пошаговая инструкция по созданию iJaNet модуля.
Постановка задачи:¶
- Создать iJaNet-модуль.
- Продемонстрировать реализацию работы по расписанию.
- Реализовать вызов сервиса аутентификации модуля реестра.
- Сделать примеры для различных видов транспорта.
Все исходные коды приведены в конце статьи.
Пример планируется усложнять по мере поступления пожеланий от пользователей.
Свои пожелания можете отсылать на support@janetsys.com с пометкой "Пример".
Требования к окружению¶
- JDK версии 1.6 или выше можно загрузить по адресу. Рекомендуется использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будет использоваться следующее обозначение
$JAVA_HOME. - Maven версии 1.6 или выше доступен по адресу. Рекомендуется использовать последнюю доступную версию maven. Далее для ссылок на место установки maven будет использоваться следующее обозначение
$MAVEN_HOME. - Последнюю версию платформы iJaNet. Процесс установки платформы iJaNet рассмотрен в п 3.3 этой статье.. Далее для ссылок на место установки платформы будем использовать следующее обозначение
$JANET_HOME. - Создать папку в которую будет помещены создаваемые iJaNet-модуль и описание бизнес-процесса. Далее ссылки на эту папку будем обозначать
$JANET_PROJECTS. - Последнюю версию iJaNet SDK for Java. Пример создания модуля приведен в данной статье.
Создание работы по расписанию¶
Для создания работы по расписанию необходимо:- Создать класс, унаследовать его от интерфейса IScheduledJob и реализовать в нем метод run():
package pack; import org.ijanet.core.jobs.IScheduledJob; import org.ijanet.core.jobs.JobException; public class MySimpleJob implements IScheduledJob { public void run() throws JobException { System.out.println("My new job runs"); } } - В файле конфигурации модуля в секции <scheduled-jobs> сделать описание созданной работы по расписанию:
<job start-delay="1000" interval="100000"> <job-class>pack.MyJob<job-class> </job>
, где:- start-delay - интервал времени (в мс.), через которое работа будет запущена;
- interval - интервал времени(в мс.), через которое работа будет повторяться;
- <job-class> - полный путь к классу работы по расписанию, унаследованному от интерфейса IScheduledJob.
Таким образом, созданная работа по расписанию запустится через секунду после старта сервера приложений и будет повторяться каждые 100 секунд.
Создание локального сервиса¶
Локальным называется сервис, находящийся внутри модуля, из которого данный сервис вызывается. Вызов локального сервиса называется локальным вызовом.
В данном примере будет описан процесс создания своего собственного сервиса.
Для создания сервиса необходимо:
- Унаследовать интерфейс создаваемого сервиса от интерфейса IService. В создаваемом интерфейсе сделаем описание метода doRun(), который будет вызываться при вызове сервиса:
package pack.myservice; import org.ijanet.core.services.IService; public interface ITestService extends IService { public void doRun(); } - Сделать реализацию созданного интерфейса:
package pack.myservice; import org.ijanet.core.services.ServiceBase; import org.ijanet.core.services.ServiceFactoryBase; public class TestServiceImpl extends ServiceBase implements ITestService { public TestServiceImpl(ServiceFactoryBase factory) { super(factory); } public void doRun() { System.out.println("******************************** LOCAL SERVICE START *******************************"); System.out.println("Your business logic here"); System.out.println("******************************** LOCAL SERVICE END *******************************"); } }
Помимо имплементации от ITestService, класс TestServiceImpl унаследован от абстрактного класса ServiceBase.
Данное наследование необходимо для упрощения загрузки класса сервиса. С дополнительной информацией по данному классу можно ознакомиться в документации.
Для реализации класса сервиса необходимо реализовать конструктор и метод doRun(). - Для того, чтобы созданный сервис стал доступен, необходимо его зарегистрировать в платформе iJaNet. Это можно сделать, описав сервис в файле конфигурации janet-module.xml в разделе <local-services>:
<service name="testService" publish="true"> <factory-class>org.ijanet.core.services.GenericServiceFactory</factory-class> <service-interface>pack.myservice.ITestService</service-interface> <parameters> <param name="impl.class" type="string">pack.myservice.TestServiceImpl</param> </parameters> </service>
, где:- name - локальное имя сервиса;
- publish - флаг доступности сервиса;
- <factory-class> - класс фабрики для создания сервиса;
- <service-interface> - интерфейс сервиса;
- <param> - единственный параметр, в котором указан класс имплементации интерфейса <service-interface>.
Таким образом, сервис будет доступен не только внутри данного модуля, но и за его пределами. Для того, чтобы ограничить доступность сервиса из другого модуля, флаг publish необходимо установить в false.
- Созданный сервис полностью готов для использования. Для локального вызова сервиса, необходимо выполнить следующие действия:
import org.ijanet.core.services.Services; import org.ijanet.core.services.ServiceException; import org.ijanet.core.config.ConfigurationException;
try { ITestService serv = (ITestService) Services.getService("testService"); serv.doRun(); } catch (ServiceException e) { e.printStackTrace(); } catch (ConfigurationException e) { e.printStackTrace(); }
, где testService - имя, под которым сервис зарегистрирован в платформе.
Примечание: в коде данного примера вызов метода будет происходить из работы, созданной ранее.