Glassfish EJB计时器服务不可用,上下文取消部署失败

Glassfish EJB计时器服务不可用,上下文取消部署失败,glassfish,ejb,Glassfish,Ejb,我有以下代码: package ejbs; import javax.annotation.Resource; import javax.ejb.Singleton; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerConfig; import javax.ejb.TimerService; @Singleton public class timerbackup { @Resource priv

我有以下代码:

package ejbs;
import javax.annotation.Resource;

import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;

@Singleton
public class timerbackup {

@Resource
private TimerService timerservice;

@Timeout
public void methodTimeout(Timer timer)
{     
    System.out.println("timeout");   
} 
public void settimer(long in)
{       
  Timer timer=timerservice.createSingleActionTimer(in,new TimerConfig());  
} 
}
部署应用程序后出现错误消息“EJB计时器服务不可用”

为了解决这个问题,我遵循以下步骤:

  • 访问glash fish管理控制台()
  • 转到配置->服务器配置->EJB容器
  • 选择选项卡EJB定时器服务
  • 然后用您的JDBC资源填写定时器数据源(我使用了“JDBC/projecto_final”)
  • 重新启动服务器
  • 如中所述

    结果是,时间服务在一段时间后停止工作。部署应用程序后,将显示以下错误消息:

    Severe:  Exception while loading the app
    Severe:  Undeployment failed for context /ProjetoEE1
    Info:    /file:/E:/formacaoJAVA/2moduloJEE/pratica/projecto_final   /projfinal2/ProjetoEE1/build/web/WEB-INF/classes/_DEFAULT_PU logout   successful
    Warning:   EJB Timer Service is not available. Timers for application with id 96332697224871936 will not be deleted
    
    本文还提到了这个问题,并在中提出了解决方案

    中介绍的解决方案基本上包括删除一些文件。答案基本上是这样的:

  • 停止Glassfish服务器
  • 已删除glassfishhome/glassfish/domains/yourdomainname/generated中的所有内容
  • 开始吃玻璃鱼
  • 我已经安装了“GlassFish服务器4.1.1”,但这不起作用

    第二个答案基本上是这样的:

    1.解决此问题所需的只是删除$GLASSFISH_HOME/GLASSFISH/domains//OSGi cache下的整个OSGi缓存

    这也不起作用

    我能做什么?任何帮助都将不胜感激

    致以最良好的祝愿

    拉斐尔·科斯塔更换

    import javax.ejb.Singleton;
    


    这对我有用。我使用的是Derby数据库,您的情况如何?

    我解决了这个问题。如果我记得的话,我创建了一个新的JDBC资源和一个新的JDBC连接池

    下面的链接解释了如何创建JDBC资源和JDBC连接池。

    JDBC资源和JDBC连接池可以使用管理控制台或asadmin实用程序创建

    下面的链接解释了如何使用asadmin实用程序。 (我使用此实用程序是因为在管理控制台中,当我尝试创建JDBC资源和JDBC连接池时,出现了一个错误)

    在管理控制台中,在创建的JDBC资源中,“Pool Name”字段应等于创建的JDBC连接池的名称

    之后,我遵循以下步骤:

  • 配置->服务器配置->EJB容器
  • 选择选项卡EJB定时器服务
  • 用JDBC资源的名称填充字段计时器数据源
  • 重新启动服务器
  • 任何问题请随时回答

    向拉斐尔·桑托斯·科斯塔致以最诚挚的问候

    我已经在2009年解决了“同样”的问题

  • 完全删除glassfish/域/域名/生成的文件夹

  • 再次构建应用程序

  • 重新启动glassfish应用程序

  • 在我的例子中,在使用GIT进行拉/推操作之后,我安装了一个新版本的应用程序,并且我的应用程序停止工作。所以我知道,在这个新构建之前,我的应用程序运行良好,Glassfish上没有任何更改

    我在下面的另一个网站上找到了一些解释

    Glassfish应用服务器使用其嵌入式JAVADB来持久化其可用EJB计时器的状态。没有正确设置计时器服务的数据资源会阻止EJB计时器被恢复,并最终无法正常工作。在这种情况下,通常会返回“EJB计时器服务不可用”错误消息。此问题阻止启动或部署任何使用EJB计时器服务的应用程序

    有两种程序可用于克服此类阻塞情况:

    第一种解决方案是转到JDBC连接池,并通过ping检查Timerpool连接池的运行状况。如果ping失败,则需要检查或重新定义连接池

    如果ping连接池成功,那么问题可能是EJB计时器标记文件的存在。每当EJB计时器服务启动或恢复期间出现问题时,就会创建一个标记文件


    删除标记将解决此问题。位于as install parent/glassfish/domains/domain name/generated/ejb/下的标记文件“ejb timer service app”。别忘了重新启动Glassfish

    您好,如果您使用glassfish 4.1.1,我也遇到了同样的问题。服务器中的计时器可能不稳定。
    解决方案:将glassfish 4.1更新为glassfish 5,并在新服务器中部署web应用程序

    我认为计时器非常重要,可能很多人都有同样的问题,他们不知道如何解决。你为什么这么认为?首先,你应该正确地标记你的问题。在您发布的代码中,您在哪里看到了“jsf”?我建议将其标记为“ejb”,而且它似乎与GlassFish有很强的相关性,因此将该标记添加到@Kukeltje@Kukeltje(并删除jsf标记)中,非常感谢。
    import javax.inject.Singleton;