如何在 Open Liberty 中设置 EJB timerDataSource

How to setup an EJB timerDataSource in 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 作为一项功能激活?

您的 <dataSource> 配置似乎缺少一些项目:

  1. A <jdbcDriver> 指向与您正在使用的数据库相对应的 JDBC 驱动程序 jar
  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 中配置数据源的更多信息,请查看此文档:
Configuring relational database connectivity in Liberty