2016-11-15 52 views
0

我想使用一個簡單的@Schedule,所以我可以稍後使用它... 我的web應用程序只包含一個index.html 如果我去到./api/test/我會去我的由EJB管理的控制器。 在此控制器中,我使用@Schedule annation調用方法。但我只是不明白如何得到這個工作... runscript方法添加一個計數器字段,所以我的index.html文件顯示數字:1.但我的號碼從未走得更高,我什至不看任何sysouts ..所以我想我的@schedule不會被觸發?@Schedule將無法工作EJB - Java EE - Web應用程序

這是我的兩個只用代碼文件:

@Path("/test") 
public class controller { 

NewClass test; 

public controller() { 
    test = new NewClass(); 
} 

@GET 
public Response getObservation() { 
    try { 
     //Object to JSON in String 
     test.runningScript(); 
     System.out.println("getObservation"); 
     System.out.println(test.getText()); 
     String jsonInString = test.getText(); 
     return Response.status(200).entity(jsonInString).build(); 
    } catch (Exception ex) { 
     System.out.println("error"); 
     ex.printStackTrace(); 
     return null; 
    } 
} 
} 

類調​​度

public class NewClass { 

private int counter = 0; 
private String text = "test"; 

public NewClass() { 

} 

public String getText(){ 
    return text; 
} 

private void setText(String text){ 
    this.text = text; 
} 


@Schedule(hour="*", minute="*", second="*/5") 
public void runningScript() { 
    counter++; 
    System.out.println("*******test runningscript*****"); 
    System.out.println(counter); 
    text = "number : " + counter; 
} 
} 

有人的想法,我怎麼能得到這個工作? 我搜索了幾個小時:ss

+0

您通常不應該使用'@ Schedule'調用註解的方法。你想做什麼,發生了什麼? –

+0

稍後我想每隔x秒閱讀一次腳本,由@schedule安排... – Tom

+0

但我現在正在測試使用@schedule。他甚至不會每5秒鐘給我的系統管理員如果我運行該方法?如果我最好不要調用Schedule的註釋方法,那麼我該如何啓動它們? – Tom

回答

4

NewClass不是EJB。 @Schedule只適用於EJB。

+0

這是正確的答案。以下是一個示例: https://github.com/javaee-samples/javaee7-samples/blob/master/ejb/timer/src/main/java/org/javaee7/ejb/timer/SchedulesTimerBean.java - 將使用日誌輸出的pingEvent來查看它在日誌中的工作情況。 – Mike

+0

好的。更具體地說,OP應該刪除'controller'構造函數,使用'@Stateless public class NewClass',並使用'@EJB NewClass test'來注入實例。 –

+0

我想,我試過這個,但nvm,它的工作原理。多謝 ! – Tom