我有以下代码:
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 Timer Service不可用”。
要解决问题,我按照以下步骤操作:
正如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中提供的解决方案主要包括删除一些文件。更多投票的答案基本上表明了以下几点:
我已安装“GlassFish Server 4.1.1”,但这不起作用。
第二个答案更多投票表明基本上如下:
1.解决此问题所需的全部内容是删除$ GLASSFISH_HOME / glassfish / domains // osgi-cache
下的整个OSGi缓存这也行不通。
我能做什么?任何帮助都将非常感谢
致以最诚挚的问候,
Rafael Costa
答案 0 :(得分:4)
替换
import javax.ejb.Singleton;
使用
import javax.inject.Singleton;
它对我有用。我使用Derby数据库就是你的情况吗?
答案 1 :(得分:3)
我已经解决了
中的“相同”问题完全删除glassfish / domains / domain-name / generated文件夹
再次构建申请
重新启动glassfish应用程序
在我的情况下,我在使用GIT进行拉/推操作后安装了我的应用程序的新版本,并且我的应用程序已停止工作。所以我知道在这个新版本之前,我的应用程序运行良好,并且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!
答案 2 :(得分:0)
我解决了这个问题。如果我需要,我创建了一个新的JDBC资源和一个新的JDBC连接池。
以下链接说明了如何创建JDBC资源和JDBC连接池。 General Steps for Creating a JDBC Resource
可以使用管理控制台或asadmin实用程序创建JDBC资源和JDBC连接池。
以下链接说明了如何使用asadmin实用程序。Using the asadmin Utility (我使用此实用程序,因为在管理控制台中,当我尝试创建JDBC资源并且JDBC连接池出现错误时)
在管理控制台中,在创建的JDBC资源中,字段"池名称"应该等于创建的JDBC连接池的名称。
之后我按照以下步骤操作:
有任何问题请随意。
最诚挚的问候Rafael Santos Costa
答案 3 :(得分:0)
您好,如果您安装了glassfish 4.1.1,我也遇到了同样的问题,服务器上的计时器可能不稳定。 解决方案:将glassfish 4.1更新为glassfish 5,并在此新服务器中部署Web应用程序