Jakarta ee WildFly中的群集数据库计时器
在Jakarta ee WildFly中的群集数据库计时器,jakarta-ee,timer,ejb,wildfly,Jakarta Ee,Timer,Ejb,Wildfly,在独立完整ha.xml中应用以下配置 位于java:jboss/datasources/projectXADatasource的XA数据源已经可以正常工作了 应用程序未部署。部署过程失败,出现以下错误 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("deploy") failed - address: ([("deploy
独立完整ha.xml
中应用以下配置
位于java:jboss/datasources/projectXADatasource
的XA数据源已经可以正常工作了
应用程序未部署。部署过程失败,出现以下错误
ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 2) WFLYCTL0013: Operation ("deploy") failed
- address: ([("deployment" => "WildFly.ear")])
- failure description: {"WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"WildFly.ear\".\"WildFly-ejb.jar\".component.BackgroundJobManager.ejb3.timerService is missing [jboss.thread.executor.ejb3.timer]"]}
将相同的配置应用于非集群环境(standalone full.xml
)也会失败,并出现相同的错误
我唯一更改的是来自的DDL语句
create-table.mysql=CREATE TABLE JBOSS_EJB_TIMER (ID VARCHAR(255) PRIMARY KEY NOT NULL...
到
在${Home}/modules/system/layers/base/org/jboss/as/ejb3/main/timers/timer sql.properties下提供
因为MySQL被配置为使用utf8mb4
字符集,而VARCHAR(255)
超过了主键(767字节)
JDBC驱动程序即使在进行此更改后也会出现以下错误
21:07:07,750 ERROR [org.jboss.as.ejb3] (MSC service thread 1-7) WFLYEJB0163: Cannot create table for timer persistence: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2546)
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541)
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469)
at com.mysql.jdbc.jdbc2.optional.StatementWrapper.executeUpdate(StatementWrapper.java:749)
at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:414)
at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.checkDatabase(DatabaseTimerPersistence.java:286)
at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.start(DatabaseTimerPersistence.java:160)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
但我认为这与根本问题无关。即使发生此错误,也会创建该表
如何修复此错误
component.BackgroundJobManager.ejb3.timerService is missing [jboss.thread.executor.ejb3.timer]
其中BackgroundJobManager
是一个具有持久计时器的单例EJB。计时器在文件系统中正确持久化(默认),但无法持久化到数据库
我是WildFly 9.0.2 final。目前,我使用默认的线程池,如下所示
而独立完整ha.xml
中的默认线程池
定义如下
欢迎提出任何其他想法或建议。没有如中所述的名为计时器的线程池。需要创建名为timer
的线程池
,或者使用默认的线程池
。
component.BackgroundJobManager.ejb3.timerService is missing [jboss.thread.executor.ejb3.timer]