如何在Open Liberty中设置EJB timerDataSource

时间:2019-05-31 10:07:25

标签: open-liberty ejb-timer

我尝试部署一个包含多个EJB Timer Services(persistence = true)的Java EE应用程序。 服务器抱怨没有定义数据源:

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 个答案:

答案 0 :(得分:2)

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

  1. <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