Как настроить EJB timerDataSource в Open Liberty

Я пытаюсь развернуть приложение Java EE, содержащее несколько служб таймеров EJB (с параметром persistence=true). Сервер жалуется, что источник данных не определен:

Caused by: javax.ejb.EJBException: See nested exception; nested exception is: java.lang.IllegalStateException: The ejbPersistentTimer feature is enabled, but the defaultEJBPersistentTimerExecutor persistent executor cannot be resolved. The most likely cause is that the DefaultDataSource datasource has not been configured. Persistent EJB timers require a datasource configuration for persistence.

Функция ejbPersistentTimer-3.2 включена. Не могу найти пример как настроить такой источник данных в файле server.xml

Я старался:

<dataSource id = "timerDataSource" jndiName = "jdbc/timerDataSource">
</dataSource>

<databaseStore id = "EJBTimerDatabaseStore"
    tablePrefix = "EJBTimer_" dataSourceRef = "timerDataSource" />
<persistentExecutor
    id = "defaultEJBPersistentTimerExecutor"
    taskStoreRef = "EJBTimerDatabaseStore" />

Но этого, кажется, недостаточно? Нужно ли было активировать DerbyDB как функцию?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
515
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, в вашей конфигурации <dataSource> отсутствуют несколько элементов:

  1. <jdbcDriver>, указывающий на jar-файл драйвера JDBC, который соответствует используемой вами БД.
  2. Элемент <properties>, который идентифицирует свойства БД, такие как имя хоста сервера БД, порт и имя БД.

Поскольку вы упомянули об использовании DerbyDB, вот пример того, как может выглядеть конфигурация Derby:

<dataSource id = "timerDataSource" jndiName = "jdbc/timerDataSource">
    <jdbcDriver libraryRef = "DerbyLib"/>
    <properties.derby.embedded databaseName = "${server.config.dir}/data/EJBTimerDB" createDatabase = "create"/>
</dataSource>

<library id = "DerbyLib">
    <fileset dir = "${server.config.dir}/derbyDriverDir/"/>
</library>

Для получения дополнительной информации о настройке источников данных в Liberty ознакомьтесь с этим документом:
Настройка подключения к реляционной базе данных в Liberty

Спасибо. Я уже пытался использовать существующий источник данных psql. Проблема заключалась в теге transactional = "true". После того, как я изменил значение на «false» для timerDataSource, оно работает

Ralph 31.05.2019 18:34

Другие вопросы по теме