2016-07-30 27 views
1

我有以下代码: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 
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. 访问glash鱼管理控制台(http://localhost:4848
  2. 转到配置 - >服务器配置 - >EJB容器
  3. 选择标签EJB定时器服务
  4. 然后填写定时器数据源:用JDBC资源(我用 “的jdbc/projecto_final”)
  5. 重启服务器

正如Set/configure the EJB Timer Service’s DataSource建议。

这会导致TimerService停止工作。部署应用程序后,将出现以下错误消息:

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呈现的溶液。

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

  1. 采空GlassFish服务器
  2. 删除了所有内容从glassfishhome/GlassFish中/域/ yourdomainname /生成
  3. 开始Glassfish的

我已经安装“GlassFish服务器4.1.1”,这不起作用。

更多投票第二个答案暗示基本上如下:

1,所有多数民众赞成需要解决这个问题的就是删除在$ GLASSFISH_HOME/GlassFish中/域整个OSGi的缓存// OSGi的缓存

这也不起作用。

我能做些什么?任何帮助将是非常赞赏

最好的问候,

拉斐尔·科斯塔

+0

我认为定时器非常重要,可能很多人都有同样的问题,他们不知道如何解决它。 –

+0

你为什么这么认为?首先,您应该先正确标记您的问题。在你发布的代码中你看到'jsf'?我建议标记它'ejb'并且它看起来非常强烈GlassFish相关,所以添加该标签(并删除jsf标签) – Kukeltje

+0

@Kukeltje非常感谢。 –

回答

2

更换

import javax.ejb.Singleton; 

随着

import javax.inject.Singleton; 

它为我工作。我使用Derby数据库是你的情况吗?

0

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

以下链接介绍了如何创建JDBC资源和JDBC连接池。 General Steps for Creating a JDBC Resource

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

以下链接介绍了如何使用asadmin实用程序。 Using the asadmin Utility (我用这个工具,因为在管理控制台中,当我试图创建一个JDBC资源和JDBC连接池出现了一个错误)

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

之后,我按照这些步骤:

  1. 设置 - >服务器config-> EJB容器
  2. 选择标签EJB计时器服务
  3. 填写现场计时器数据源与JDBC的名字资源。
  4. 重新启动服务器

任何问题,请随意。

问候拉斐尔·桑托斯科斯塔

0

我在

  1. 解决了 “相同” 的问题删除的GlassFish /域/域名/生成的文件夹完全

  2. 建设再次申请

  3. 重新启动玻璃鱼应用程序

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

我已经发现了一些解释上的另一个以下站点 https://dzone.com/articles/solving-ejb-timer-service-not-available-error-in-g-1

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!

相关问题