0

I am using EJB 3.1 and the timer does not work. I have run the deployed code in Glassfish server 3.1 but the execute() method does not seem to execute. Below is the code:

@Startup
@Singleton
public class Listener {
      javax.annotation.@Resource
      private TimerService timerService;

     javax.annotation.@PostConstruct
     public void init() {
          System.out.println("init");
          timerService.createTimerInterval(TimeUnit.SECONDS.toMillis(5), TimeUnit.SECONDS.toMillis(5), null);
          while(true) {
              Thread.sleep(TimeUnit.SECONDS.toMillis(10);
              System.out.println("Run");
          }
     }

     javax.ejb.@Timeout
     public void execute(javax.ejb.Timer timer) throws Exception {
         // check database
         System.out.println("Database");
     }
}

The server logs say the following:

INFO: There are no EJB Timers owned by this server
INFO: <== ... Timers Restored.

I want the database to be checked every some often.

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.screening</groupId>
<artifactId>screening</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>ejb</packaging>

<name>Screening</name>

<properties>
  <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
  <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
  </dependency>
 </dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
                <compilerArguments>
                    <endorseddirs>${endorsed.dir}</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${endorsed.dir}</outputDirectory>
                        <silent>true</silent>
                        <artifactItems>
                            <artifactItem>
                                <groupId>javax</groupId>
                                <artifactId>javaee-endorsed-api</artifactId>
                                <version>6.0</version>
                                <type>jar</type>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <finalName>screening</finalName>
</build>
</project>

I have also tried the following:

@Startup
@Singleton
public class Listener {

     javax.annotation.@PostConstruct
     public void init() {
          System.out.println("init");
          while(true) {
              Thread.sleep(TimeUnit.SECONDS.toMillis(10);
              System.out.println("Run");
          }
     }

     javax.ejb.@Schedule(second = "5")
     public void execute() throws Exception {
         // check database
         System.out.println("Database");
     }
}

But the execute() method is not executed.

Am I missing anything? Any ideas?

user3189663
  • 211
  • 4
  • 18
  • TimeUnit.SECONDDS.toMillis(5) -> The posted code does not even seem to compile due to this typo, so I wonder how you produced a deployable class then. – Gimby May 01 '14 at 12:48
  • I typed the code. The code compiles in my IDE and I have a deployed version. I have edited the code above. – user3189663 May 01 '14 at 12:57
  • Yeah you see - if you go to a garage to get your car fixed, you don't bring a car which looks like yours - you bring your own car. There is no difference here. – Gimby May 01 '14 at 12:59
  • Possible duplicate of [@Schedule annotation run every few minutes (or seconds)](http://stackoverflow.com/questions/11482988/schedule-annotation-run-every-few-minutes-or-seconds) – Dave Jarvis Jan 12 '17 at 17:14

0 Answers0