2

登録フォームからデータを取得してデータベースに保存するという非常に基本的な機能を実行する、かなり標準的な 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()なんらかの形式のマルチスレッドが必要になると思いますが、それを行う方法がわかりません。

4

2 に答える 2

4

AuthenticationServiceImplは GWT サーブレットであり、Java のライブラリの使用に制限はありません。を作成してRunnableに渡しThread、呼び出しstart()て、メールを並行して送信できます。ランナブルのrun()メソッドには、電子メールを送信するロジックが必要です。

ここでマルチスレッドに関するドキュメントと例をさらに見ることができます

于 2013-07-28T08:45:11.943 に答える
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();
于 2013-07-28T08:47:55.213 に答える