Timer 如何在Wildfly AS 8中为数据源实现EJB计时器服务

Timer 如何在Wildfly AS 8中为数据源实现EJB计时器服务,timer,persistence,ejb-3.1,wildfly-8,Timer,Persistence,Ejb 3.1,Wildfly 8,我正在将EAR应用程序从JBossAS6迁移到Wildfly AS 8.2.0。在这样做的过程中,我面临着一个问题,即在Wildfly中实现EJB计时器服务,以及在独立完整ha.xml中定义的数据源TestSybaseDB 以下是与JBoss AS 6相关的文件,这些文件与数据源的EJB3定时器服务实现相关TestSybaseDB。在JBoss6AS的以下文件中,定义了数据源名称,我相信这些更改对于在JBoss6AS中为数据库实现EJB定时器服务已经足够了 persistence.xml pat

我正在将EAR应用程序从JBossAS6迁移到Wildfly AS 8.2.0。在这样做的过程中,我面临着一个问题,即在Wildfly中实现
EJB计时器服务
,以及在
独立完整ha.xml
中定义的数据源
TestSybaseDB

以下是与JBoss AS 6相关的文件,这些文件与数据源的EJB3定时器服务实现相关
TestSybaseDB
。在JBoss6AS的以下文件中,定义了数据源名称,我相信这些更改对于在JBoss6AS中为数据库实现EJB定时器服务已经足够了

persistence.xml

path: ${JBOSS_HOME}\common\deploy\jboss-ejb3-timerservice-mk2.jar\META-INF\persistence.xml

<jta-data-source>java:/TestSybaseDB</jta-data-source>
path: ${JBOSS_HOME}\server\default\deploy\ejb2-timer-service.xml

<depends>jboss.jdbc:datasource=TestSybaseDB,service=metadata</depends>
<depends optional-attribute-name="DataSource">jboss.jca:service=DataSourceBinding,name=TestSybaseDB</depends>
<timer-service thread-pool-name="timer" default-data-store="clustered-store">
    <data-stores>
        <database-data-store name="clustered-store" datasource-jndi-name="java:/TestSybaseDB" partition="timer"/>
    </data-stores>
</timer-service>
独立完整ha.xml中的计时器服务定义

path: ${JBOSS_HOME}\common\deploy\jboss-ejb3-timerservice-mk2.jar\META-INF\persistence.xml

<jta-data-source>java:/TestSybaseDB</jta-data-source>
path: ${JBOSS_HOME}\server\default\deploy\ejb2-timer-service.xml

<depends>jboss.jdbc:datasource=TestSybaseDB,service=metadata</depends>
<depends optional-attribute-name="DataSource">jboss.jca:service=DataSourceBinding,name=TestSybaseDB</depends>
<timer-service thread-pool-name="timer" default-data-store="clustered-store">
    <data-stores>
        <database-data-store name="clustered-store" datasource-jndi-name="java:/TestSybaseDB" partition="timer"/>
    </data-stores>
</timer-service>
从上面的错误中,我认为
timer sql.properties
中的
create table
导致了问题,因此,我尝试删除它,但得到了下面的错误

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.ejb3.timerService.timerPersistence.clustered-store: org.jboss.msc.service.StartException in service jboss.ejb3.timerService.timerPersistence.clustered-store: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_67]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_67]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_67]
Caused by: java.lang.NullPointerException
at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.runCreateTable(DatabaseTimerPersistence.java:146)
at org.jboss.as.ejb3.timerservice.persistence.database.DatabaseTimerPersistence.start(DatabaseTimerPersistence.java:117)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
... 3 more

ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS014613: Operation ("add") failed - address: ([
("subsystem" => "ejb3"),
("service" => "timer-service"),
("database-data-store" => "clustered-store")
]) - failure description: {"JBAS014671: Failed services" => {"jboss.ejb3.timerService.timerPersistence.clustered-store" => "org.jboss.msc.service.StartException in service jboss.ejb3.timerService.timerPersistence.clustered-store: Failed to start service
Caused by: java.lang.NullPointerException"}}

JBAS014777:   Services which failed to start:      service jboss.ejb3.timerService.timerPersistence.clustered-store: org.jboss.msc.service.StartException in service jboss.ejb3.timerService.timerPersistence.clustered-store: Failed to start service  

请任何人帮助我解决此错误,并为Wildfly AS中定义的数据源配置EJB计时器服务。

我认为您可以删除timer-sql.properties文件的最后一行。 如果这些语句在Sybase中工作正常,那么它应该可以工作


我用过这个,它对我很有用。我使用的是Postgres而不是Sybase

在删除最后一行后,我仍然得到“ERROR[org.jboss.as.ejb3](MSC服务线程1-2)JBAS014263:无法为计时器持久性创建表:com.Sybase.jdbc4.jdbc.SybSQLException:数据库中已经有一个名为“jboss_EJB_timer”的对象。”。。Marcel@sridhar您能尝试搜索所有具有该名称的对象吗?查询类似于从sysobjects中选择*作为o,其中o.name类似于“%JBOSS\u EJB\u TIMER%”;谢谢你的回复。。马塞尔。数据库中存在JBOSS_EJB_计时器表。我还在一个单独的测试程序中验证了LOAD_TIMER sql,以查看是否存在任何问题,但我没有得到任何异常或错误。服务器仍然会发生异常。