Пример создания работы по расписанию и локальной службы

Автор: Виктор Абливанов
Компания: JaNet systems

Ниже приведена пошаговая инструкция по созданию iJaNet модуля.

Постановка задачи:

  1. Создать iJaNet-модуль.
  2. Продемонстрировать реализацию работы по расписанию.
  3. Реализовать вызов сервиса аутентификации модуля реестра.
  4. Сделать примеры для различных видов транспорта.

Все исходные коды приведены в конце статьи.
Пример планируется усложнять по мере поступления пожеланий от пользователей.
Свои пожелания можете отсылать на с пометкой "Пример".

Требования к окружению

  1. JDK версии 1.6 или выше можно загрузить по адресу. Рекомендуется использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будет использоваться следующее обозначение $JAVA_HOME.
  2. Maven версии 1.6 или выше доступен по адресу. Рекомендуется использовать последнюю доступную версию maven. Далее для ссылок на место установки maven будет использоваться следующее обозначение $MAVEN_HOME.
  3. Последнюю версию платформы iJaNet. Процесс установки платформы iJaNet рассмотрен в п 3.3 этой статье.. Далее для ссылок на место установки платформы будем использовать следующее обозначение $JANET_HOME.
  4. Создать папку в которую будет помещены создаваемые iJaNet-модуль и описание бизнес-процесса. Далее ссылки на эту папку будем обозначать $JANET_PROJECTS.
  5. Последнюю версию iJaNet SDK for Java. Пример создания модуля приведен в данной статье.

Создание работы по расписанию

Для создания работы по расписанию необходимо:
  1. Создать класс, унаследовать его от интерфейса 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");
        }
    }
    
    
  2. В файле конфигурации модуля в секции <scheduled-jobs> сделать описание созданной работы по расписанию:
    <job start-delay="1000" interval="100000">
        <job-class>pack.MyJob<job-class>
    </job>
    

    , где:
    • start-delay - интервал времени (в мс.), через которое работа будет запущена;
    • interval - интервал времени(в мс.), через которое работа будет повторяться;
    • <job-class> - полный путь к классу работы по расписанию, унаследованному от интерфейса IScheduledJob.

Таким образом, созданная работа по расписанию запустится через секунду после старта сервера приложений и будет повторяться каждые 100 секунд.

Создание локального сервиса

Локальным называется сервис, находящийся внутри модуля, из которого данный сервис вызывается. Вызов локального сервиса называется локальным вызовом.
В данном примере будет описан процесс создания своего собственного сервиса.

Для создания сервиса необходимо:

  1. Унаследовать интерфейс создаваемого сервиса от интерфейса IService. В создаваемом интерфейсе сделаем описание метода doRun(), который будет вызываться при вызове сервиса:
    package pack.myservice;
    
    import org.ijanet.core.services.IService;
    
    public interface ITestService  extends IService {
        public void doRun();
    }
    
  2. Сделать реализацию созданного интерфейса:
    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().
  3. Для того, чтобы созданный сервис стал доступен, необходимо его зарегистрировать в платформе 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.
  4. Созданный сервис полностью готов для использования. Для локального вызова сервиса, необходимо выполнить следующие действия:
    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 - имя, под которым сервис зарегистрирован в платформе.
    Примечание: в коде данного примера вызов метода будет происходить из работы, созданной ранее.

Also available in: HTML TXT