EJB Timer Service不可用,上下文取消部署失败

问题描述 投票:2回答:4

我有以下代码:

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计时器服务不可用”。

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

  1. 访问glassfish管理控制台(qazxsw poi)
  2. 转到Configurations-> server-config-> EJB Container
  3. 选择标签EJB Timer Service
  4. 然后用你的JDBC资源填充Timer Datasource:我使用“jdbc / projecto_final”
  5. 重启服务器

正如http://localhost:4848所建议的那样。

这导致但在一段时间后TimerService停止工作。部署应用程序后出现以下错误消息:

Set/configure the EJB Timer Service’s DataSource

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 也提到了这个问题,并提出了Set/configure the EJB Timer Service’s DataSource的解决方案。

Glassfish DeploymentException: Error in linking security policy for中提供的解决方案主要包括删除一些文件。更多投票的答案基本上表明以下内容:

  1. 停止了Glassfish服务器
  2. 删除了glassfishhome / glassfish / domains / yourdomainname / generated中的所有内容
  3. 开始Glassfish

我安装了“GlassFish Server 4.1.1”,但这不起作用。

更多投票的第二个答案表明基本上如下:

1.修复此问题所需的全部是删除$ GLASSFISH_HOME / glassfish / domains // osgi-cache下的整个OSGi缓存

这也行不通。

我可以做什么?任何帮助将非常感激

最好的祝福,

拉斐尔·科斯塔

glassfish ejb
4个回答
4
投票

更换

Glassfish DeploymentException: Error in linking security policy for

import javax.ejb.Singleton;

它对我有用。我正在使用Derby数据库是你的情况吗?


3
投票

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

  1. 完全删除glassfish / domains / domain-name / generated文件夹
  2. 再次建立申请
  3. 重启glassfish应用程序

在我的情况下,我在使用GIT进行拉/推操作后安装了我的应用程序的新版本,并且我的应用程序已停止工作。所以我知道在这个新版本之前,我的应用程序运行良好,而且Glassfish上没有任何改变。

我在另一个网站import javax.inject.Singleton; 上找到了一些解释

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!


0
投票

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

以下链接说明了如何创建JDBC资源和JDBC连接池。 https://dzone.com/articles/solving-ejb-timer-service-not-available-error-in-g-1

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

以下链接说明了如何使用asadmin utility.General Steps for Creating a JDBC Resource(我使用此实用程序,因为在管理控制台中,当我尝试创建JDBC资源并且JDBC连接池出现错误时)

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

之后我按照以下步骤操作:

  1. 配置 - > server-config-> EJB容器
  2. 选择标签EJB Timer Service
  3. 使用JDBC资源的名称填充字段Timer Datasource。
  4. 重启服务器

有任何问题请随意。

最好的问候Rafael Santos Costa


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.