Glassfish schedule(timer) exception

ejb, glassfish, jakarta-ee, java

Solution

In case you are using an embedded glassfish, it might be disabled, you should try downloading a standalone glassfish and try again.

Regarding configuration you can verify the settings in the glassfish admin console, usually reachable at `http://localhost:4848` :

Following settings are relevant:

- Configurations -> server-config -> EJB Container -> EJB Timer Service tab

- Resources -> JDBC -> JDBC Connection Pools -> __TimerPool (here you can also test the connection via the Ping button)

Problem

i am trying repeat this tutorial on Glassfish 4 and java EE7. So i created simple WebApp with maven in Netbeans. I created simple class: ``` import java.util.Date; import javax.ejb.Schedule; import javax.ejb.Stateless; @Stateless public class NewClass { @Schedule(minute = "*/1", hour = "*",persistent = false) public void anyMethod() { System.out.println("hello "+new Date()); } } ``` But when i am deploing app to the server, i get this exception: ``` Info: EJB5181:Portable JNDI names for EJB NewClass: [java:global/WebApplication1/NewClass, java:global/WebApplication1/NewClass!NewClass] Severe: Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method java.lang.RuntimeException: EJB Timer Service is not available at com.sun.ejb.containers.BaseContainer.startApplication(BaseContainer.java:3951) at org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:163) at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122) at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291) at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:497) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:360) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) at java.lang.Thread.run(Thread.java:744) Severe: Exception during lifecycle processing java.lang.RuntimeException: EJB Timer Service is not available at com.sun.ejb.containers.BaseContainer.startApplication(BaseContainer.java:3951) ...... Severe: Exception while loading the app Severe: Undeployment failed for context /test Warning: EJB Timer Service is not available. Timers for application with id 91511565780975616 will not be deleted Severe: Exception while loading the app : EJB Timer Service is not available ``` Why EJB Timer Service is not available ? How can i enable it ? :)

Original source