我有一个相当标准的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) {
}
});
在服务器端,我有一个将数据存储到数据库中的servlet。
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 :(得分:4)
AuthenticationServiceImpl
是一个GWT Servlet,在任何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();