2013-06-07 2 views
0

Каждый раз, когда я пытаюсь открыть файл в @Timeout, Java возвращает Исключение нулевого указателяОткрыть файл в @Timeout из timerservice

@Singleton 
public class EngineTrans { 


@Resource 
private TimerService timerService; 

public void createProgrammaticalTimer() { 

    ScheduleExpression everyTenSeconds = new  ScheduleExpression().second("*/15").minute("*").hour("4-20"); 
    timerService.createCalendarTimer(everyTenSeconds, new TimerConfig(
      "passed message " + new Date(), false)); 


} 
@Timeout 
public void handleTimer() { 
    System.out.println("timer received - contained message is: " + new Date()); 

    File xmlFile = new File(FacesContext.getCurrentInstance().getExternalContext().getRealPath("")); 
} 
} 

Любые идеи?

ответ

1

В контексте метода @Timeout нет контекста JSF. Выполните вызов getRealPath в методе createProgrammaticalTimer, а затем передайте его методу @Timeout с помощью первого параметра конструктора TimerConfig (параметр «info»). При необходимости создайте внутренний класс для хранения всех данных, которые необходимо передать методу @Timeout:

@Singleton 
public class EngineTrans { 
    @Resource 
    private TimerService timerService; 

    private static class TimeoutData { 
    private final Date date = new Date(); 
    private final String resourcePath; 
    ... 
    } 

    public void createProgrammaticalTimer() { 
    ... 
    String resourcePath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("..."); 
    TimeoutData timeoutData = new TimeoutData(resourcePath); 
    timerService.createCalendarTimer(everyTenSeconds, new TimerConfig(timeoutData, false)); 
    } 

    @Timeout 
    public void handleTimer(Timer timer) { 
    TimeoutData timeoutData = (TimeoutData)timer.getInfo(); 
    ... 
    } 
} 
Смежные вопросы