После HTTP POST (генерируется приложением, а не пользователями) я хочу отправить электронное письмо.Я правильно понял процедуру отправки электронной почты, но я не уверен в том, как работают серверы веб-приложений Java.
Меня особенно беспокоит тайм-ауты, и я хочу знать, не блокирую ли я какой-либо важный поток.
Если я сделаю что-то вроде следующего:
@Override
public void doPost(
final HttpServletRequest req,
final HttpServletResponse resp
) throws IOException, ServletException {
final PrintWriter pw = resp.getWriter();
pw.write( ... );
pw.flush();
pw.close();
// Here I'm sending an email, this can potentially
// block until the email send procedure times out
// (the timeout is set to 5 seconds)
sendEmail(...);
}
И если почтовый сервер не работает, поток будет блокироваться до истечения времени моего sendEmail (тайм-аут, который я установилдо нескольких секунд).
Какой поток я тогда блокирую?Я имею в виду, очевидно, я понимаю, что я блокирую поток, который обрабатывает этот POST, но это проблема?Что этот поток должен делать дальше?
Я прочитал, что не должен создавать новые потоки на сервере веб-приложений Java, поэтому я полагаю, что не должен делать следующее правильно?
Thread t = new Thread( new Runnable() {
public void run() {
sendEmail();
}
});
t.start();
Обратите внимание, что мой вопрос не относится к отправке электронной почты: я хочу понять, о чем нужно заботиться в веб-приложении Java каждый раз, когда вы планируете выполнить потенциально блокирующую / долгую операцию после GET или POST.