Как настроить EJB timerDataSource в Open Liberty
Я пытаюсь развернуть приложение Java EE, содержащее несколько служб таймера EJB (с постоянством =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 как функцию?
1 ответ
Решение
Похоже, ваш <dataSource>
В конфигурации не хватает нескольких элементов:
<jdbcDriver>
который указывает на jar-файл драйвера JDBC, соответствующий используемой вами БД<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