Установка/настройка EJB Timer Services DataSource - программирование
Подтвердить что ты не робот

Установка/настройка EJB Timer Services DataSource

Я пытаюсь использовать службу Timer в EJB 3.1 в своем приложении.

@Stateless
@LocalBean
public class StatelessTimerSessionBean {

    @Schedule(minute = "*", second = "0", dayOfMonth = "*", month = "*", year = "*", hour = "9-17", dayOfWeek = "Mon-Fri")
    public void myTimer() {
        System.out.println("Timer event: " + new Date());
    }
}

".. установите для параметра источника данных Timer Services Timer Data Timer значение действительного ресурса JDBC.."

из Служба таймера EJB

Я не могу понять, как правильно настроить источник данных Timer?

Ошибка при развертывании:

SEVERE: Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.RuntimeException: EJB Timer Service is not available

Запуск: glassfish-3.1.2.2

4b9b3361

Ответ 1

1. Пример настройки базы данных

  • Я использую MySQL для своей базы данных.

  • Создайте таблицу EJB__TIMER__TBL из {GF_HOME}/glassfish/lib/install/databases/ejbtimer_{DB_ENGINE}.sql

DB_ENGINE = например, MySQL:

CREATE TABLE EJB__TIMER__TBL (
    `CREATIONTIMERAW`      BIGINT        NOT NULL,
    `BLOB`                 BLOB,
    `TIMERID`              VARCHAR(255)  NOT NULL,
    `CONTAINERID`          BIGINT        NOT NULL,
    `OWNERID`              VARCHAR(255)  NULL,
    `STATE`                INTEGER       NOT NULL,
    `PKHASHCODE`           INTEGER       NOT NULL,
    `INTERVALDURATION`     BIGINT        NOT NULL,
    `INITIALEXPIRATIONRAW` BIGINT        NOT NULL,
    `LASTEXPIRATIONRAW`    BIGINT        NOT NULL,
    `SCHEDULE`             VARCHAR(255)  NULL,
    `APPLICATIONID`        BIGINT        NOT NULL,
    CONSTRAINT `PK_EJB__TIMER__TBL` PRIMARY KEY (`TIMERID`)
);

2. Конфигурация сервера

Консоль администратора GlassFish

  • Запустите консоль администратора GlassFish: обычно http://localhost:4848
  • С левой стороны перейдите к [Конфигурации] > [сервер-config] > [Контейнер EJB]
  • Затем нажмите TAB вверху [Служба таймера EJB]
  • Затем заполните Источник данных таймера: с вашим ресурсом JDBC, например. [MySQL-пу]. ( Примечание: По умолчанию jdbc/__TimerPool)
  • Перезапустить сервер

3. Результат

...
INFO: [TimerBeanContainer] Created  TimerBeanContainer: TimerBean
INFO: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!com.sun.ejb.containers.TimerLocal]
INFO: WEB0671: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
INFO: EJB5109:EJB Timer Service started successfully for data source [mysql-pu]
INFO: Setting DBReadBeforeTimeout to false
INFO: ==> Restoring Timers ... 
INFO: There are no EJB Timers owned by this server
INFO: <== ... Timers Restored.
...

4. Все еще сломан? TimerService просто перестала работать (она работала)?

Итак, это случилось со мной после дня, полного "разворачивания при сохранении". "Таймерсервис" неожиданно был недоступен.

Severe:   Exception while loading the app
Severe:   Undeployment failed for context /ejb-timer-service-app
Warning:   Cannot deploy or load EJBTimerService: org.glassfish.deployment.common.DeploymentException: Error in linking security policy for ejb-timer-service-app -- Inconsistent Module State

Решение найдено здесь

5. Полезные ссылки