2013-07-28 3 views
2

У меня довольно стандартная форма GWT, которая выполняет самую основную функцию захвата данных из регистрационной формы и хранения ее в базе данных.Как выполнить многопоточность в GWT?

authenticationService.registerStudent(email, password, firstName, lastName, contact, 
      country, countryCode, school, lecturerFirstName, lecturerLastName, 
      lecturerEmail, language, new AsyncCallback<Boolean>() { 

     @Override 
     public void onFailure(Throwable throwable) { 

     } 

     @Override 
     public void onSuccess(Boolean bool) { 

     } 
    }); 

На стороне сервера у меня есть сервлет, который хранит данные в базе данных.

public class AuthenticationServiceImpl extends RemoteServiceServlet implements AuthenticationService { 

@Override 
public Boolean registerStudent(String email, String password, String firstName, String lastName, 
           String contact, String country, String countryCode, String school, 
           String lecturerFirstName, String lecturerLastName, String lecturerEmail, 
           String language) throws IllegalArgumentException { 

    .... 

    } 
} 

Я хочу отправить отправить электронное письмо с подтверждением, чтобы подтвердить его. Проблема с внедрением логики электронной почты в функции registerStudent() заключается в том, что может потребоваться некоторое время для связи с SMTP-сервером, что вызовет неуверенность на стороне клиента.

Как «делегировать» функцию отправки электронной почты другому классу/функции при возможности вернуть true из функции registerStudent() при успешной вставке в базу данных? Я предполагаю, что какая-то форма многопоточности понадобится, но я не уверен, как это сделать.

+0

Я согласен с ответом sanbhat в. Напротив, специально для этого вопроса о отправке регистрационного письма я бы сказал, что отправка электронной почты синхронно (то есть: блокировка клиента и ожидание отправки электронной почты) не такая уж плохая альтернатива, потому что тогда вы мог бы предоставить отзыв клиенту в случае, если что-то пошло не так с отправкой электронной почты, например, «перегруженный сервис, повторите попытку позже» .... –

ответ

4

AuthenticationServiceImpl - это сервлет GWT, и здесь есть без ограничений в использовании любой библиотеки Java. Вы можете создать Runnable и передать его Thread и вызвать start(), чтобы он отправлял почту параллельно. Метод runnable run() должен иметь логику отправки электронной почты.

Вы можете увидеть больше документации и примеры на многопоточность here

+1

Я думаю, что это правильный ответ, потому что важно: вы можете делайте все, что хотите в сервлете. Затем, в зависимости от того, какие рамки вы используете на стороне сервера, могут быть тысячи возможных реализаций и дизайна для отправки этого сообщения электронной почты :) –

2

Так как на стороне сервера, вы имеете полный доступ к библиотекам классов Java, вы можете использовать многопоточность, чтобы начать новую нить, которая заботится об отправке по электронной почте.

Что-то вроде этого:

public class sendRegistrationEmail implements Runnable { 
    @Override public void run() { 
     ... here goes the code to send email ... 
} 

, то вы можете начать новую тему с:

Thread emailThread = new Thread(new sendRegistrationEmail()); 
emailThread.start(); 
Смежные вопросы