Play框架:从作业中调用控制器/ URL

时间:2011-12-12 01:53:04

标签: java playframework

我的工作时间很长。我想像这样调用Controller的Action方法:

public class MyJob extends Job {

    @Override
    public void doJob() throws Exception {
        MyController.someActionMethod();
    }
}

或直接调用网址。

如果可以在作业中找到任何想法吗?

如果我直接调用Controller的动作方法,我会得到:

NullPointerException occured : null

play.exceptions.JavaExecutionException
    at play.jobs.Job.call(Job.java:155)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
    at play.classloading.enhancers.ControllersEnhancer$ControllerInstrumentation.isActionCallAllowed(ControllersEnhancer.java:187)
    at controllers.MyController.someActionMethod(MyController.java)
    at fun.job.MyJob.doJob(MyJob.java:10)
    at play.jobs.Job.doJobWithResult(Job.java:50)
    at play.jobs.Job.call(Job.java:146)
    ... 7 more

2 个答案:

答案 0 :(得分:2)

您可以使用WS帮助程序类。例如,

HttpResponse response = WS.url("http://www.yahoo.com/").get()
String html = response.getString(); // or...
Document xml = response.getXml();

上面你要做的是尝试将浏览器重定向到与控制器操作相关联的URL,这对于异步作业的上下文没有意义,其中除了其他原因之外,没有浏览器要处理重定向。

答案 1 :(得分:1)

你为什么要这样做?也许更好的方法来实现同样的事情是将操作执行的逻辑提取到新的类/方法中,而不是在控制器和作业中调用它。