2015-01-16 2 views
0

Я хочу напечатать строку «qui» каждые 5 секунд. Я создал синглтон EJB и через аннотации я определил метод тайм-аута. Я ожидал, что строка «qui» печатается каждые 5 секунд, но этого не происходит. Строка «qui» печатается в продолжении. Мой сервер приложений - Glassfish. Ниже мой код:JavaEE - Singleton EJB Timer не работает

import EJBData.AuctionFrontEndLocal; 
import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.EJB; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.TimerConfig; 
import javax.ejb.TimerService; 

/** 
* 
* @author melix 
*/ 
@Startup 
@Singleton 
public class Timer{ 

    @EJB 
    private AuctionFrontEndLocal auctionFrontEnd; 

    private Timer timer; 

    @Resource TimerService tservice; 

    @PostConstruct 
    public void initTimer(){ 
     tservice.createIntervalTimer(0,5000,new TimerConfig()); 
    } 

    @Timeout 
    public void timeout() { 
     System.out.println("QUI!"); 
    } 

} 
+0

Не могли бы вы использовать журналы сервера приложений вместо println? – iku

+0

Попробуйте удалить папки tmp и data вашего AS, поскольку более ранняя версия вашего таймера может смешать ситуацию. Также вы можете попробовать развернуть свой код с помощью нового проекта. Я видел эту проблему на JBoss EAP 6.2, и хотя я не знаю, в чем причина того, что тот же код, который не работал в одном развертывании, работает в другом. –

+0

Уважаемый @Nunzio Meli, у меня есть проблема: когда я использую '@ Timeout', я не могу загрузить планировщик при запуске, даже если я использую' @ Startup'. пожалуйста, посмотрите: http://stackoverflow.com/questions/42242037/parameterize-ejb-scheduler-with-schedule-expression –

ответ

0

ваш код кажется нормально ... вот мой рабочий пример:

package com.mycompany.mavenproject2; 

import java.util.logging.Logger; 
import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.TimerConfig; 
import javax.ejb.TimerService; 

@Startup 
@Singleton 
public class NewSessionBean { 

    @Resource 
    private TimerService ts; 

    @PostConstruct 
    public void init() { 
     final TimerConfig tc = new TimerConfig(); 
     tc.setPersistent(false); 
     ts.createIntervalTimer(0, 5000, tc); 
    } 

    @Timeout 
    public void timeout() { 
     Logger.getLogger(NewSessionBean.class.getName()).severe("==> timeout called..."); 
    } 

} 

вывод на консоль, когда я запустить его в стеклянной рыбы 4,1

Information: mavenproject2 was successfully deployed in 721 milliseconds. 
Schwerwiegend: ==> timeout called... 
Schwerwiegend: ==> timeout called... 
Schwerwiegend: ==> timeout called... 
+0

Уважаемый @StefanHeimberg, у меня есть проблема: когда я использую '@ Timeout', я не могу загрузить планировщик при запуске даже я использую '@ Startup'. пожалуйста, посмотрите: http://stackoverflow.com/questions/42242037/parameterize-ejb-scheduler-with-schedule-expression –

3

попробуй это немного проще.

import javax.ejb.Schedule; 
import javax.ejb.Singleton; 
import org.slf4j.LoggerFactory; 

@Singleton 
public class Timer { 
    public Timer() { 
     LoggerFactory.getLogger(this.getClass()).info("Starting timer"); 
    } 

    @Schedule (persistent = false, second = "*", minute = "*", hour = "*") 
    private void second() { 
     LoggerFactory.getLogger(this.getClass()).info("Second"); 
    } 

    @Schedule (persistent = false, second = "*/2", minute = "*", hour = "*", info = "Second Second") 
    private void secondSecond() { 
     LoggerFactory.getLogger(this.getClass()).info("Second Second"); 
    } 

    @Schedule (persistent = false, second = "*/3", minute = "*", hour = "*") 
    private void thirdSecond() { 
     LoggerFactory.getLogger(this.getClass()).info("Third Second"); 
    } 
} 
Смежные вопросы