Java 设置/配置EJB计时器服务’;s数据源

Java 设置/配置EJB计时器服务’;s数据源,java,jakarta-ee,glassfish,ejb-3.1,Java,Jakarta Ee,Glassfish,Ejb 3.1,我正在尝试在我的应用程序中使用EJB3.1中的计时器服务 @Stateless @LocalBean public class StatelessTimerSessionBean { @Schedule(minute = "*", second = "0", dayOfMonth = "*", month = "*", year = "*", hour = "9-17", dayOfWeek = "Mon-Fri") public void myTimer() {

我正在尝试在我的应用程序中使用EJB3.1中的计时器服务

@Stateless
@LocalBean
public class StatelessTimerSessionBean {

    @Schedule(minute = "*", second = "0", dayOfMonth = "*", month = "*", year = "*", hour = "9-17", dayOfWeek = "Mon-Fri")
    public void myTimer() {
        System.out.println("Timer event: " + new Date());
    }
}
“。将EJB计时器服务的计时器数据源设置设置为有效的JDBC资源…”

我不知道如何正确配置计时器数据源

部署时出现的错误是:

SEVERE: Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.RuntimeException: EJB Timer Service is not available

运行:glassfish-3.1.2.2

听起来glassfish-3.1.2.2不支持EJB3,请尝试使用jboss7

1。数据库设置示例
  • 我的数据库使用MySQL

  • {GF_HOME}/glassfish/lib/install/databases/ejbtimer{DB_ENGINE}.sql创建表

  • DB_引擎=例如MySQL:

    创建表EJB\uuuu计时器\uuuu TBL(
    `CREATIONTIMERAW`BIGINT不为空,
    `一滴一滴,
    `TIMERID`VARCHAR(255)不为空,
    `CONTAINERID`BIGINT不为空,
    `OWNERID`VARCHAR(255)NULL,
    `状态`整数不为空,
    `PKHASHCODE`整数不为空,
    `INTERVALDURATION`BIGINT不为空,
    `INITIALEXPIRATIONRAW`BIGINT不为空,
    `LASTEXPIRATIONRAW`BIGINT不为空,
    `附表'VARCHAR(255)空,
    `APPLICATIONID`BIGINT不为空,
    约束'PK\u EJB\uuu TIMER\uu TBL'主键('TIMERID`)
    );
    
    2.服务器配置

  • 启动GlassFish服务器管理控制台:通常
    http://localhost:4848
  • 在左侧导航到[Configurations]>[server config]>[EJB Container]
  • 然后单击选项卡顶部[EJB计时器服务]
  • 然后用您的JDBC资源(例如[mysql pu])填写计时器数据源。()
  • 重新启动服务器
  • 3.结果

    5.有用的链接

    在JBoss/WildFly中,您可以按照以下说明操作:



    发布日期:2015年3月8日

    出于好奇,设置非持久计时器是否有效@计划(second=“/5”,minute=“”,hour=“*”,persistent=false)它不起作用。我刚解决了,我要写答案了。
    ...
    INFO: [TimerBeanContainer] Created  TimerBeanContainer: TimerBean
    INFO: EJB5181:Portable JNDI names for EJB TimerBean: [java:global/ejb-timer-service-app/TimerBean, java:global/ejb-timer-service-app/TimerBean!com.sun.ejb.containers.TimerLocal]
    INFO: WEB0671: Loading application [ejb-timer-service-app] at [/ejb-timer-service-app]
    INFO: EJB5109:EJB Timer Service started successfully for data source [mysql-pu]
    INFO: Setting DBReadBeforeTimeout to false
    INFO: ==> Restoring Timers ... 
    INFO: There are no EJB Timers owned by this server
    INFO: <== ... Timers Restored.
    ...
    
    Severe:   Exception while loading the app
    Severe:   Undeployment failed for context /ejb-timer-service-app
    Warning:   Cannot deploy or load EJBTimerService: org.glassfish.deployment.common.DeploymentException: Error in linking security policy for ejb-timer-service-app -- Inconsistent Module State