我尝试部署一个包含多个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激活为功能?
答案 0 :(得分:2)
您的<dataSource>
配置似乎缺少一些项目:
<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