2016-11-15 79 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