0

I have a small problem with creating threads in EJB.OK I understand why i can not use them in EJB, but dont know how to replace them with the same functionality.I am trying to download 30-40 webpages/files and i need to start downloading of all files at the same time(approximately).This is need ,because if i run them in one thread in queue.It will excecute more than 3 minutes.

I try with @Asyncronious anotation, but nothing happened.

 public void execute(String lang2, String lang1,int number) {
            Stopwatch timer = new Stopwatch().start();
            htmlCodes.add(URL2String(URLs.get(number)));
            timer.stop();
            System.out.println(  number +":"+ Thread.currentThread().getName() + timer.elapsedMillis()+"miseconds");
        }
private void findMatches(String searchedWord, String lang1, String lang2) {
    articles = search(searchedWord);
    for (int i = 0; i < articles.size(); i++) {

        execute(lang1,lang2,i);
    }
4

1 回答 1

0

这里有两个非常好的 SO 答案可以提供帮助。 这个给你你的选择这个解释为什么你不应该在 ejb 中产生线程。第一个答案的问题是它没有包含很多关于 EJB 3.0 选项的知识。所以,这里有一个使用@Asynchronous 的教程。

无意冒犯,但我在您的代码中没有看到任何证据表明您已经阅读了本教程。您的异步方法应该返回一个Future. 正如教程所说

客户端可以使用 Future.get 方法之一检索结果。如果处理调用的会话 bean 尚未完成处理,则调用其中一个 get 方法将导致客户端暂停执行,直到调用完成。在调用 get 方法之一之前,使用 Future.isDone 方法确定处理是否已完成。

于 2013-07-17T19:33:42.173 回答