如何在 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>
配置似乎缺少一些项目:
- A
<jdbcDriver>
指向与您正在使用的数据库相对应的 JDBC 驱动程序 jar
- 一个
<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
我尝试部署一个 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>
配置似乎缺少一些项目:
- A
<jdbcDriver>
指向与您正在使用的数据库相对应的 JDBC 驱动程序 jar - 一个
<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