繁体   English   中英

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

[英]Play Framework: Call Controller/URL from within a Job

我的工作按小时计算。 我想像这样调用Controller的Action方法:

public class MyJob extends Job {

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

或直接调用网址。

有什么想法可以在Job内完成吗?

如果我直接调用Controller的action方法,则会得到以下信息:

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

您可以使用WS helper类。 例如,

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

上面的操作将尝试将浏览器重定向到与控制器操作相关联的URL,从异步作业的上下文来看这是没有意义的,在异步作业中,除其他原因外,没有浏览器可以处理重定向。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM