2013-11-22 2 views
2

У меня есть задача сделать это в фоновом режиме после HTTP-запроса на отправку, , так что я могу сделать это так, как в Java7 EE. (Они сказали, что Java7 EE может использовать совпадения JSE). так вот мой код:Является ли это хорошим способом использования таймера в Java EE

@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>"; 
} 

Я смущен, может быть, есть лучший способ справиться с такого рода проблемы в Enterprise мире, так как управление памятью отличается от настольных приложений. Спасибо заранее.

ответ

1

Наконец, я получил ответ, и я счастлив с инструментами JEE7 Многопоточности:

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

Я использовал этот компонент в моей работе ... Java-EE7 предлагает новый способ сделать использование JAVA SE, управляемого Web Container, а не JVM.

+1

мерцающая работа, – AndroidLover

+0

Похоже, что этот пример был скопирован из этого [сообщения] (http://stackoverflow.com/questions/3212255/java-ee-specification-and-multi-threading/19404307#19404307) –

0

Какова цель вашего таймера?

Ваш код получает некоторую информацию GET, затем ждет 10 секунд, а затем начинает выполнение myTimerTask.

Edit:

при осмотре вашего поста немного дальше: кажется, что вы хотите, чтобы выполнить задачу синхронно; если это действительно так, просто выполните timertask.

Однако ваш комментарий предполагает, что вы хотите выполнить задачу в фоновом режиме, но затем я не понимаю, почему вы, похоже, подразумеваете, что хотите ждать 10 секунд.

+0

Спасибо за обратную связь, что вы поняли меня 10/10. Хорошо, мой TumerTask хорошо отправил по электронной почте и сохранил в БД и создал некоторые файлы, поэтому ... может потребоваться больше 10 секунд ... Я не хочу, чтобы клиент все это время ожидал, чтобы получить ответ 200 OK , Я хочу, чтобы он был синхронным. но мой вопрос: . Хорошо, если я использую какой-либо инструмент нити JSE в своем приложении JEE, например, так или иначе, используя другой -> новую тему (r) .start(); Выполняет ли сервер управление потоками, которые я создал неявно. или я должен использовать некоторые инструменты EJB? – AndroidLover

+0

Если это так, просто запустите отдельный поток, как описано здесь: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html. Однако не хотите ли вы сообщить пользователю, был ли успешный запрос? – dstibbe

+0

Я знал, что если бы был Asynchronous, я использовал бы @Suspended AsyncResponse asyncResponse, но я хочу его синхронным способом. Спасибо за ссылку javaSE, но вы уверены, что действительно рекомендуется работать с родными потоками в системе JEE? как я могу проверить, нет ли проблемы работать с простыми потоками в JEE? – AndroidLover

Смежные вопросы