2013-11-22 23 views
2

我有一个任务在HTTP Post请求之后在后台执行, 所以我可以在Java7 EE中以这种方式执行此任务。 (他们说Java7 EE可以使用JSE并发货币)。所以这里是我的代码:是否是在Java EE中使用Timer的好方法

@POST public String contactMe(@FormParam("name") String name, @FormParam("email") String email, @FormParam("website") String website, @FormParam("message") String message) { 
    System.out.println("you have sent name " + name + " email " + email + " website " + website + " message " + message); 



    /*methode Timer*/ 
    Timer timer = new Timer(); 
    MyTimerTask myTimerTask=new MyTimerTask(); 
    timer.schedule(myTimerTask,10000); 
    //I have to do something n back ground that take 10 seconds at least 


    return "<h1>DONE</h1>"; 
} 

我很困惑可能是有更好的方式来处理这几样在企业世界的问题,因为内存管理比桌面应用程序不同。 在此先感谢。

回答

1

最后,我已经得到了答案,我很高兴与JEE7多线程工具:

@Stateless 
public class ReportBean { 
@Resource 
private ManagedThreadFactory threadFactory; 
public void runReports() { 
Thread thread = threadFactory.newThread(new Runnable()); 
thread.start(); 
} 

我在我的工作中使用这个bean ... Java的EE7提供了新的方法,使使用JAVA SE由Web容器管理,而不是由JVM管理。

+1

ammazing work, – AndroidLover

+0

看起来像这个例子已经从这个[post]复制(http://stackoverflow.com/questions/3212255/java-ee-specification-and-multi-threading/19404307#19404307) –

0

你的计时器的目的是什么?

您的代码收到一些GET信息,然后等待10秒钟,然后开始执行myTimerTask。

编辑:

在进一步有点检查你的信息:好像你要同步执行任务;如果确实如此,只需执行timertask。

但是你的评论意味着你希望在后台执行任务,但是我不明白你为什么似乎暗示你想等待10秒。

+0

谢谢你的反馈,你已经了解我10/10。 那么我的TumerTask很好发送一些电子邮件和存储在数据库中,并创建一些文件,所以...它可能需要超过10秒... 我不希望客户端等待所有这一次得到他的回应200 OK 。 我希望它是同步的。但我的问题是: 是好的,如果我在我的JEE应用程序中使用某些JSE线程工具,就像这样或可能通过使用另一个 - > new Thread(r).start(); 服务器是否管理我已经隐式创建的线程。还是应该使用一些EJB工具? – AndroidLover

+0

如果是这样,请按照此处所述启动一个单独的线程:http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html。但是,您是否不想让用户知道他们的请求是否成功? – dstibbe

+0

我知道如果是异步我会使用@Suspended AsyncResponse asyncResponse,但我想它同步的方式。感谢您使用javaSE的链接,但您确定确实建议在JEE框架中使用本机线程?我如何检查在JEE中使用简单线程是否没有问题? – AndroidLover

相关问题